2 Stimmen

Entfernen+Hinzufügen zu Verschieben in der Git-Historie ändern

Ich habe ein Git-Repository, das eine Mischung aus einigen alten Svn-Repos ist. Als ich alles gemischt habe, habe ich nicht bemerkt, dass ich git mv anstelle von nur die Dateien verschieben, so dass jetzt die Svn-Geschichte für die meisten Dateien verloren ist. gibt es eine Möglichkeit, dies zu beheben?

die alte Struktur war etwa so:

svn1
|_apps/
|_tests/
|_...

svn2
|_src
|_libs

svn3
|_src
|_libs

und jetzt:

   root
   |_libs
   |  |_svn1_name
   |  |  |_apps
   |  |  |_tests
   |  |  |_...
   |_addons
   |  |  |_svn2_name
   |  |  |  |_src
   |  |  |  |_libs
   |  |  |_svn3_name
   |  |  |  |_src
   |  |  |  |_libs

Ich habe versucht, Checkout auf den vorherigen Commit zu diesem mv, tun Git mv, Erstellen einer neuen Verzweigung und rebasing Master gegen das, aber die Struktur ist Art von komplex und die Zusammenführung ist ein Schmerz. gibt es einen einfacheren Weg, dies zu tun?

0 Stimmen

Welche Historie wollen Sie wiederherstellen, die von git oder die von svn?

0 Stimmen

Svn's history im Git Repository vor dem Verschieben der Dateien, also wenn ich mache: git log addons/svn2_name/src jetzt bekomme ich die Geschichte nur seit dem mv, aber ich möchte auch die vorherige Geschichte bekommen.

4voto

Greg Hewgill Punkte 882617

Normalerweise verfolgt Git eine Umbenennung nicht anders als ein Löschen oder Hinzufügen. Wenn dies geschieht innerhalb desselben Commits kann Git schnell feststellen, dass eine Umbenennung stattgefunden hat, und den Umbenennungsvorgang entsprechend in git log . Wenn jedoch das Löschen und Hinzufügen derselben Datei in verschiedene Vorgänge verwenden, dann müssen Sie die --find-copies-harder Wechsel von git log :

--find-copies-harder

Aus Leistungsgründen ist dies die Standardeinstellung, -C findet Kopien nur, wenn die Originaldatei der Kopie im selben Changeset geändert wurde. Diese Option veranlasst den Befehl, unveränderte Dateien als Kandidaten für die Quelle der Kopie zu untersuchen. Dies ist eine sehr kostspielige Operation für große Projekte, also verwenden Sie sie mit Vorsicht. Die Angabe von mehr als einer -C hat die gleiche Wirkung.

0voto

magomarcelo Punkte 370

Wenn ich git log --follow für eine einzelne Datei verwende, kann ich ihre Geschichte über Umbenennungen hinaus verfolgen, die als add+remove übertragen wurden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X