2010-11-29 6 views
2

Ich habe hg strip verwendet, um einige Commits aus meiner Geschichte zu entfernen. Jetzt möchte ich den Patch erneut anwenden, die als Sicherung während des Streifen Befehl gemacht wurde: .hg/strip-backup/68a8f24f62d0-backup.hg'hg strip' erstellt Patch ist beschädigt

Leider wenn ich versuche, den Patch zu schieben, so scheint es, dass der Patch beschädigt ist:

$:~/sc2$ hg init --mq 
adding .hg/patches/68a8f24f62d0-backup.hg 
68a8f24f62d0-backup.hg: up to 582 MB of RAM may be required to manage this file 
(use 'hg revert 68a8f24f62d0-backup.hg' to cancel the pending addition) 
$:~/sc2$ hg qpush 
applying 68a8f24f62d0-backup.hg 
patch 68a8f24f62d0-backup.hg is empty 
transaction abort! 
rollback completed 
cleaning up working directory...done 
abort: decoding near 'h91AY&SY݁��S������': 'utf8' codec can't decode byte 0xb1 in position 16: invalid start byte! 

Hat jemand hatte Dieses Problem bereits oder kann mir einen Rat geben, wie man den Flecken anwendet? Wenn es nicht möglich ist, bin ich mehr als geschraubt ...

Vielleicht ist dies ein Python-Problem?

Ich habe versucht, hg entflechten und erhalten diese:

adding changesets 
adding manifests 
adding file changes 
transaction abort! 
rollback completed 
abort: received file revlog group is empty 

Wenn ich ziehen hg:

pulling from 68a8f24f62d0-backup.hg 
searching for changes 
adding changesets 
transaction abort! 
rollback completed 
abort: data/[email protected]: no node! 

So wie kann ich den Knoten Problem zu beheben?

Heinrich

+2

AFAIK Der Befehl 'hg unbundle' wird verwendet, um die vom Befehl 'strip' gemachten Sicherungen wiederherzustellen - siehe die Ausgabe von' hg help strip'. –

+0

Eine Lösung für mich wäre, einfach die "gesunden" Dateien aus dem Bundle zu holen, die ich dann wieder zu meiner Arbeitskopie zusammenführen kann. Das Problem ist, ich kann keinen Befehl finden, um den Inhalt zu bekommen! – Erik

+1

Vielleicht ist die Datei tatsächlich korrupt. Um das eigentliche Problem zu finden, kann es nützlich sein, 'hg' Befehle für diese Datei mit der' --debug' Option auszuführen. Was passiert, wenn Sie "hg --debug -R log" ausführen? –

Antwort

2

hatte ich etwas Kontakt mit Matt Mackall (Primary Mercurial Autor) zu diesem Thema und wir dachten, einen Fehler in Mercurial:

Mercurial ist tatsächlich nicht in der Lage, Dateien größer als 2^31-1 Bytes, die ~ 2GB sind, wie signed Ints zum Speichern der Größe verwendet werden. Wenn Sie jedoch größere Dateien hinzufügen (was ich getan habe), wird mercurial diese nicht ablehnen, sondern wie gewohnt hinzufügen. Die einzige Überprüfung auf die Dateigröße scheint beim Push auf den Server zu sein. Allerdings habe ich hier nur eine Warnung und eine unendliche hg push erhalten.

Zitat von Matt Mackall aus dem Mail-Gespräch:

Es wird ein Überlauf in wenigen Orte führen:

a) wenn die erste Überarbeitung die revlog schreiben, wir werden Speicher eine unkomprimierte Größe Modulo 2G, aber wir werden noch in der Lage sein, erfolgreich die gesamte Datei zu lesen

b) beim Bau des Bündels für Übertragung oder Abisolieren, wir werden Bericht eine Chunk-Größe Modulo 2G, die wird als eine negative Nummer interpretiert werden und so aussehen wie eine leere Chunk.

+2

Ich denke, Sie müssen zugeben, dass das Verfolgen von 2GB-Dateien keine normale Versionskontrolle ist. Dein Repository wird * enorm * sein, mit ein bisschen Modifikation und ein bisschen Modifikation dort. –

+0

Als Sie diese Datei hinzugefügt haben, gab es kein großes Problem damit, eine zu große Datei hinzuzufügen. Es war für etwas über 10 MB, was ich denke, wurde aber nicht beseitigt. –

+0

Sicher, eine 3G-Datei hinzuzufügen, macht keinen Sinn und deshalb wollte ich Strip! – Erik

5

Vom Ausgang von hg help strip:

Alle gestrippt Differenzmengen gespeichert sind, in ".hg/Band-Backup" ... Sie können durch Laufen „hg entflechten .hg wiederhergestellt werden/strip-backup/BUNDLE ", wobei BUNDLE die Bundle-Datei ist, die vom Strip erstellt wird.

Diese einfache Demo-Session zeigt die Verwendung des Streifen und entflechten Befehle:

# create a new repo and commit some changes: 
$ hg init foobar 
$ cd foobar/ 
$ echo a > file 
$ hg ci -A -m "Initial" 
adding file 
$ echo b > file 
$ hg ci -m "Change 1" 
$ echo c > file 
$ hg ci -m "Change 2" 
$ hg glog --template '{rev} - {node} - {desc}\n' 
@ 2 - 86ecd06a38260fd229fdd73ba82efa6b2db0784c - Change 2 
| 
o 1 - 7827b4d5a10c2ca8d5196752f1b2dec92e8cf573 - Change 1 
| 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# trash revision 1 and all its children: 
$ hg strip 1 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
saved backup bundle to /path/to/foobar/.hg/strip-backup/7827b4d5a10c-backup.hg 
$ hg log --template '{rev} - {node} - {desc}\n' 
@ - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# meanwhile, make new changes: 
$ hg ci -m "Change 1.1" 
$ hg glog --template '{rev} - {node} - {desc}\n' 
@ 1 - a5ad2a79835ad0019f215e62fd928f8649cbbcab - Change 1.1 
| 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 

# you decide your previous work was not that bad at all: 
$ hg unbundle .hg/strip-backup/7827b4d5a10c-backup.hg 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 2 changes to 1 files 
(run 'hg update' to get a working copy) 

$ hg glog --template '{rev} - {node} - {desc}\n' 
o 3 - 86ecd06a38260fd229fdd73ba82efa6b2db0784c - Change 2 
| 
o 2 - 7827b4d5a10c2ca8d5196752f1b2dec92e8cf573 - Change 1 
| 
| @ 1 - a5ad2a79835ad0019f215e62fd928f8649cbbcab - Change 1.1 
|/ 
o 0 - 2b41b1e661196fe943125fdb1d590b5a60369c7e - Initial 
+0

Danke für Ihre Hilfe! Leider kann ich keine Entbündelung ohne Fehler ausführen, siehe oben in meinem Beitrag. – Erik