2010-12-12 8 views
1

Im Laufe der Repo (ursprünglich SVN) war ich nicht zu gut mit Dateiverbindungen zusammen zu halten. Ich habe IDEs zweimal geändert, das Projekt in Netbeans-Module aufgeteilt und das Projekt über seine Zeit mavenisiert. Der größte Teil des Dateiverlaufs ist verloren, hauptsächlich weil ich beim Mavenisieren den gesamten Stamm gelöscht, committed, über das Maven-Projekt kopiert und festgeschrieben habe. Nicht gerade die beste Idee, als ich später alle auf diesen Punkt zurückgesetzten Geschichte herausfand. Es ist so schlecht geworden, dass ein Repository-Statistik-Programm nutzlos ist, da es besagt, dass ich 50.000 Zeilen Code anstelle von ~ 8.000 investiert habe.Reparieren Sie Links zwischen verschobenen Dateien in Mercurial

Gibt es eine Möglichkeit, alle beschädigten Dateiverläufe zu beheben? Ich habe Zugriff auf SVN und Git, wenn Mercurial es nicht tun kann

Antwort

3

Hrm, und die Zeit, die Sie löschten und kopieren Sie waren in Ordnung, hatten Sie gerade getan hg addremove --similarity 90, die sagt "entfernen alles, was weg ist, fügen Sie hinzu alles, was neu ist, und wenn sie zu 90% ähnlich sind, zählt als Umbenennung ".

Nun, da diese Gelegenheit verstrichen ist, gibt es keine Möglichkeit, einen zu verschieben, ohne Ihr Repository neu zu schreiben. Dadurch werden alle Klone in der Wildnis ungültig, wenn sich alle Knoten-IDs (Hashes) ändern. Wenn das in Ordnung ist, und Sie haben eine weitgehend lineare Geschichte kann man wohl mit so etwas wie dieses erhalten von:

hg export --output "../patch-%n.patch" 0:tip # exports every changeset to a patch file 
cd .. 
hg init newrepo 
cd newrepo 
hg import --similarity 90 ../patch* 

, die eine lineare Geschichte von Ihrem ersten zur letzten (ohne Zweige und andere Köpfe, etc.) verpflichten nimmt Exporte Sie erstellen Patches, erstellen ein neues, leeres Repo und importieren die Changesets mit der Funktion zur Erkennung von Umbenennungen.

Dies ist eine ziemlich drastische Handlung, also stellen Sie sicher, es ist es wirklich wert und halten Sie Ihre alten Repo für ein gutes Maß.

+0

Da ich die einzige Person in diesem Repo bin und niemand es geklont hat, sollte ich damit klar kommen. Gibt es jedoch eine Möglichkeit, die Lösch- und Kopier-Commits, die ich in SVN gemacht habe, zusammenzuführen? Weil Sie immer noch das Problem der gebrochenen Geschichte vor dem Mavenizing haben. Der einzige Weg, an den ich denken kann, besteht darin, zu dieser bestimmten Revision zurückzukehren, die Arbeit zu erledigen und dann alle Änderungen oben anzuwenden. Aber das ist etwas, was ich bei Mercurial nicht so gut kann, und ich denke, es würde alle Zeitstempel verlieren, etwas, das ich bewahren möchte. – TheLQ

+0

Wenn Sie die Route export-everything import-everything verwenden, können Sie zwei Changesets zusammenführen, indem Sie 'hg import --no-commit' verwenden und dann beide Importe ausführen, bevor Sie' hg commit' ausführen. Zeitstempel können in einem Änderungsset beliebig gesetzt werden (siehe 'commit --date') und Dateizeitstempel werden überhaupt nicht verfolgt. –

+0

Zurück zu dieser Frage habe ich versucht, dies zu tun, aber ich stoße auf Probleme, die das Repo neu erstellen. Ich exportiere mit 'hg export --git -a -o" ../patch-%r.patch "-vv 0: tip' und importiere mit (stark vereinfacht)' für i in \ 'ls .. | grep patch \ '; do hg import --ähnlichkeit 90 --user "..." --force --date "..." ../$i; fertig; '. Allerdings bekomme ich viele Importfehler: Dateien existieren nicht, sie existieren bereits oder werden zurückgewiesen. Irgendwelche Vorschläge? – TheLQ

Verwandte Themen