TortoiseGit: Das Verschieben von Dateien in einen neuen Ordner wird nicht als Verschieben erkannt

TortoiseGit: Das Verschieben von Dateien in einen neuen Ordner wird nicht als Verschieben erkannt

Ich versuche, einige Dateien in meinem Repository in einen neuen Ordner zu verschieben. Ich möchte, dass Git/TortoiseGit erkennt, dass es sich um ein Verschieben handelt und nicht um ein Löschen und mehrere Hinzufügen.
Wie kann ich das zum Laufen bringen? Ich habe die Dokumentation von TortoiseGit überprüft und bei Google gesucht, aber das schien nicht sehr hilfreich zu sein.

Ich habe also diese Struktur:

repo_root/somefile.txt

Was ich möchte:

repo_root/new_folder/somefile.txt

Natürlich stellt „somefile.txt“ alle Dateien und Ordner dar, die verschoben werden.

Antwort1

Denken Sie an eines:Git verfolgt nur Dateiinhalte.

AusVerschieben von DateienAbschnitt des Pro Git-Buchs v2:

Im Gegensatz zu vielen anderen VCS-Systemen verfolgt Git die Dateibewegung nicht explizit. Wenn Sie eine Datei in Git umbenennen, werden in Git keine Metadaten gespeichert, die darauf hinweisen, dass Sie die Datei umbenannt haben. Git ist jedoch ziemlich intelligent und erkennt dies im Nachhinein.

Und das Verschieben und Umbenennen funktioniert in Git genauso.

Also,Git erkennt das Verschieben/Umbenennen automatisch nur unter der Voraussetzung, dass diese Dateien nicht geändert werden.

Git macht diese Dinge nur, wenn Sie Dateien verschieben/umbenennen:

  1. Eine verfolgte Datei wird gelöscht, Git ruft den SHA-1 des Dateiinhalts ab und nimmt an, der Wert ist abc.
  2. Eine Untrack-Datei wird hinzugefügt, Git berechnet den SHA-1 des Dateiinhalts und nimmt an, dass der Wert abcebenfalls ist.
  3. Wenn Sie in diesem Moment ein Commit durchführen, stellt Git fest, dass sie denselben SHA-1-Wert haben, und behandelt sie dann als Umbenennung.

Angenommen, Sie haben einige verfolgte Dateien geändert und sie auch in einen anderen Ordner verschoben. Dann kann Git sie beim Commit leider nicht als automatisch umbenannt/verschoben erkennen.

Wenn Sie wirklich möchten, dass Git Umbenennungen/Verschiebungen automatisch verfolgt,Sie müssen tun:

Stellen Sie sicher, dass Sie die Datei(en) NICHT ändern und die Datei(en) nur in einem Commit umbenennen/verschieben.


Wenn Sie Dateien gleichzeitig ändern und verschieben möchten und möchten, dass Git diese mithilfe von TortoiseGit als Umbenennung/Verschiebung erkennt, dann gilt in Ihrem Fall:

  1. Klicken Sie mit der rechten Maustaste auf die Datei und klicken Sie auf TortoiseGit -> Rename...das Element im Kontextmenü.
  2. Präfix new_folder\zum Dateinamen, siehe: Bildbeschreibung hier eingeben
  3. begehen

Hinweis: Sie müssen die Dateien einzeln umbenennen. Das ist vermutlich mit viel Arbeit verbunden. Benennen Sie also am besten nur die Datei um.

Hinweis 2: Wenn Sie Änderungen vornehmeneine Mengebei der Datei kann Git nicht erkennen, dass es sich um eine Umbenennung/Verschiebung handelt.

Antwort2

Von demTortoiseGit-Dokumentation:

Wenn Sie Dateien innerhalb Ihres Arbeitsbaums verschieben möchten, beispielsweise in einen anderen Unterordner, können Sie den Drag-and-Drop-Handler mit der rechten Maustaste verwenden:

A. Wählen Sie die Dateien oder Verzeichnisse aus, die Sie verschieben möchten

B.Rechts ziehensie an die neue Position im Arbeitsbaum

C. Lassen Sie die rechte Maustaste los

D. Wählen Sie im Popup-MenüKontextmenü → Git Versionierte Dateien hierher verschieben

Antwort3

Git wird dies nach dem Commit im Backend handhaben. Während Sie die nicht festgeschriebenen Dateien handhaben, werden die Erstellungs- und Löschvorgänge zunächst als separate Aktionen behandelt. Nach dem Commit wird jedoch versucht, die Löschvorgänge mit Erstellungsvorgängen zu verrechnen, um festzustellen, ob es sich tatsächlich nur um eine Dateiverschiebung handelte. Sie können dies selbst im Commit-Protokoll mit den Meldungen „alte Datei ==> neue Datei“ sehen, wenn Git eine Dateiverschiebung feststellt.

Alternativ können Sie git mv verwenden, wenn Sie sich dadurch sicherer fühlen https://git-scm.com/docs/git-mv

verwandte Informationen