No.
Die kurze Antwort lautet NO . Es ist nicht möglich, eine Datei in Git umzubenennen und sich den Verlauf zu merken. Und es ist eine Qual.
Man munkelt, dass git log --follow
--find-copies-harder
funktioniert, aber bei mir funktioniert es nicht, selbst wenn es keine Änderungen am Inhalt der Datei gibt und die Verschiebungen mit git mv
.
(Ursprünglich habe ich Eclipse verwendet, um Pakete in einem Arbeitsgang umzubenennen und zu aktualisieren, was Git vielleicht verwirrt hat. Aber das ist eine sehr übliche Vorgehensweise. --follow
scheint zu funktionieren, wenn nur ein mv
durchgeführt und anschließend eine commit
und die mv
ist nicht allzu weit).
Linus sagt, dass man den gesamten Inhalt eines Softwareprojekts ganzheitlich verstehen soll und nicht einzelne Dateien verfolgen muss. Nun, leider kann mein kleines Gehirn das nicht leisten.
Sie ist sehr ärgerlich dass so viele Leute gedankenlos die Behauptung wiederholt haben, dass Git automatisch Bewegungen verfolgt. Sie haben meine Zeit verschwendet. Git macht so etwas nicht. Git ist so konzipiert(!), dass es Bewegungen überhaupt nicht verfolgt.
Meine Lösung besteht darin, die Dateien an ihren ursprünglichen Speicherort zurückzubenennen. Ändern Sie die Software, um sie an die Versionskontrolle anzupassen. Mit Git müssen Sie es anscheinend nur beim ersten Mal richtig "git".
Leider funktioniert das nicht mit Eclipse, das anscheinend die --follow
. git log --follow
zeigt manchmal nicht den vollständigen Verlauf von Dateien mit komplizierten Umbenennungsvorgängen, obwohl git log
tut. (Ich weiß nicht, warum.)
(Es gibt einige zu clevere Hacks, die zurückgehen und alte Arbeit wieder aufnehmen, aber sie sind eher beängstigend. Siehe GitHub-Gist: emiller/git-mv-mit-geschichte .)
Kurz gesagt: Wenn Subversion macht das falsch ist, dann ist es auch falsch, dass Git dies tut - dies ist keine (falsche!) Funktion, Es ist ein Fehler.
14 Stimmen
Über
git mv
: stackoverflow.com/questions/1094269/whats-the-purpose-of-git-mv5 Stimmen
Ich möchte nur anmerken, dass ich gerade das Verschieben von Dateien über das Dateisystem getestet habe, und nach dem Übertragen (über intellij) kann ich dann den gesamten Verlauf sehen (einschließlich des Verlaufs, wenn er sich an einem anderen Ort befand), wenn ich den Verlauf (wieder in intellij) ansehe. Ich gehe davon aus, dass intellij nichts Besonderes tut, um das zu tun, also ist es schön zu wissen, dass zumindest die Historie nachvollzogen werden kann.
0 Stimmen
Für die Regeln, denen Git bei der Erkennung einer Verzeichnisumbenennung folgt, siehe meine Antwort unten
0 Stimmen
Ich habe hier eine Antwort geschrieben. Ich hoffe, sie funktioniert. stackoverflow.com/questions/10828267/
0 Stimmen
Git-Unterbäume haben ohnehin "falsche" Historien. Wenn Sie ein Repository aufbrechen, indem Sie
git-subtree
gibt Git dem entstehenden Teilbaum eine erfundene Geschichte, die nicht mit der des Projekts übereinstimmt, von dem er sich abgespalten hat. Ich glaube, dass Git versucht, alle Commits zu ermitteln, die an einer der Dateien im Teilbaum beteiligt waren, und diese verwendet, um eine Geschichte zusammenzufügen. Außerdem werden diese Historien jedes Mal neu geschrieben, wenn Sie die Teilbäume neu kombinieren und neu aufteilen. Untermodule haben jedoch ihre eigene Historie, die vom übergeordneten Projekt getrennt ist.