Ich traf vor kurzem ein Problem, bei dem eine leere Datei in zwei Zweigen anders umbenannt wurde, aber ohne einen Konflikt zusammengeführt zusammengeführt.Git umbenennen Erkennung von leeren Datei
Schritte zum Wiederherstellen sind wie folgt.
Erstellen Sie eine leere Datei.
git init touch empty git add empty git commit -m "add empty file"
Benennen Sie es in der Branche um.
git checkout -b branch git mv empty empty-in-branch git commit -m "empty -> empty-in-branch"
Im Master umbenennen.
git checkout master git mv empty empty-in-master git commit -m "empty -> empty-in-master"
Zweig in Master zusammenführen.
git merge --no-commit branch
Dies gibt die Nachricht Automatic merge went well; stopped before committing as requested
.
git status
zeigt nur die neue Datei empty-in-branch
. Aber es gibt keine Löschung von empty-in-master
, also wenn wir zu diesem Zeitpunkt committen, werden wir beide Dateien bekommen.
Ich würde erwarten, dass dies als Merge-Konflikt gekennzeichnet wird, der manuelle Auflösung benötigt (d. H. Entscheidung, welche leere Datei zu behalten). Das passiert, wenn die Originaldatei nicht leer ist.
Gibt es etwas Besonderes an leeren Dateien, das sich auf die Erkennung von Umbenennungen auswirkt? Gibt es irgendwelche Parameter, die ich der git merge
hinzufügen könnte, um den Konflikt zu erkennen (z. B. Feinabstimmung der Merge-Strategie)?
Interessantes Verhalten für sicher. Nicht sicher die Ursache, aber ... Git speichert Dateien nach ihrem Inhalt. Zwei leere Dateien würden also technisch als gleich betrachtet werden. Wegen des Potenzials für eine große Anzahl von Überschneidungen wäre es sinnvoll, hier eine spezielle Logik zu haben. – Barett
Es sieht sicherlich so aus, als könnte es eine spezielle Handhabung für leere Dateien geben. Aber Git speichert bereits nur eine Kopie jedes Objekts basierend auf seinem Hash, so dass es keinen wirklichen Unterschied zwischen vielen duplizierten leeren Dateien und vielen duplizierten nicht leeren Dateien gibt (d. H. Keine offensichtliche Notwendigkeit einer speziellen Behandlung von leeren Dateien). –