Getting Git zu Folgen, umbenannt und bearbeitet Dateien
Fragen über das umbenennen von Dateien in Git haben wurde gefragt vor, aber ich kann nicht herausfinden, eine Lösung für mein spezifisches problem.
Habe ich verschoben und bearbeitet mehrere Dateien (ich habe nicht verwenden git mv
- leider ist es jetzt zu spät dafür). Jetzt möchte ich es so wenn mein Kollege zieht aus meinem repository, mit seinen eigenen Bearbeitungen, die Sie auf die gleichen Dateien (ohne Sie zu bewegen), es erfolgreich führt meine änderungen mit seinem in die Datei den neuen Pfad. Erfolgreich merge, Git, klar muss wissen, dass diese sind die gleichen Dateien.
Ist Git schlau genug, diese arbeiten auf seine eigene? Es scheint schwer zu glauben. Und wenn ja, wie kann ich sicher sein, dass eine bestimmte Datei verschieben will abgeholt werden von Git - selbst wenn der Inhalt sich geändert hat?
- Dies ist der Zweck der
git mv
. - Okay, aber wie kann ich feststellen, git, dass eine Datei verschoben wurde? Ich zog die Dateien in Visual Studio, nun möchte ich sichergehen, dass git kennt. Ich habe versucht
git mv --cached
aber, der nicht existiert. Wenn ich versuchegit mv
bekomme ichfatal: bad source, source= ...
- Wenn Sie noch nicht begangen, Sie könnte bewegen Sie einfach die Dateien zurück an Ihre ursprünglichen Pfade, und dann
git mv
Sie die neuen Pfade. - Okay, ich kann das tun, aber es ist ärgerlich, weil ich neu aufbauen müssen ganze directory-Strukturen. Es scheint dumm von git, um nicht
--cached
äquivalent für diese. - Git ist tatsächlich clever genug, um diese Arbeit heraus auf seine eigene. Ein umbenennen ist eigentlich nur ein add und ein löschen im repository, unabhängig davon, ob Sie
git mv
oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Git nicht wirklich verfolgen benennt im repository, verwendet es eine diff-Heuristik, um zu bestimmen, wenn Sie die Umbenennung einer Datei zur anderen. Das heißt, wenn Sie
git mv
eine Datei und ersetzen Sie dann den Inhalt komplett, es ist nicht als eine Umbenennung, und Sie tun nicht verwenden müssengit mv
für es zu erkennen, benennt.Beispiel:
Ebenso
git mv
bedeutet nicht, dass die Datei umbenannt wird, wird es immer noch die diff-Algorithmus:Standardmäßig git zu überprüfen, benennt, wenn eine Datei entfernt wurde, die zwischen commit -- es gibt keine Notwendigkeit zu sagen, es manuell. Wenn Sie tatsächlich eine Datei verschieben (mit git mv, anstatt manuell entfernen und das hinzufügen es wieder) er ignoriert den Hinweis. Aus Gründen der performance der Heuristiken nicht die ganze Zeit laufen -- wenn Sie eine Datei aus dem Weg, dann fügen Sie eine neue mit dem ursprünglichen Namen, der Zug kann nicht erkannt werden.
Beachten Sie, dass logisch, git speichert nur den Baum, wie es Sie bereits in jedem überarbeitung: es muss nicht store keine tracking-Informationen über die änderungen zwischen den Revisionen.
Wenn Sie möchten, um zu sehen, was erkannt wurde, können Sie die
-M
(--find-renames
) wechseln zugit diff
zu zeigen, benennt. Dieser Schalter stellt sich auch auf die Heuristik, die ist nützlich, wenn Sie haben, einen zu Begehen, dass nicht Sie auszulösen.Dieser Heuristik-basierte Ansatz ist ein guter Grund (wenn Sie ein anderes benötigt wird) zu halten, verpflichtet sich klein und eigenständig, wie macht git die Arbeit zu erleichtern.
git diff
war nicht Abholung, dass ich Dateien umbenannt und verändert deren Inhalt. Mein Szenario war hatte ich die Dateien A, B, C, und einsetzen einer neuen B, so alt B war jetzt C, und die alte C war nun D.git diff
erzählte mir, B und C wurden nun komplett anders ist!Die Lösung, die ich verwendet, war mühsam und manuell, aber hast den job zu erledigen.
git mv
um den Namen der Dateien zurück an Ihre neuen Namen. B zu C, C zu D.