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

6

Ich versuche, einige Dateien in meinem Repository in einen neuen Ordner zu verschieben. Ich möchte, dass git / TortoiseGit erkennt, dass es sich um einen Zug anstelle eines Löschvorgangs handelt und mehrere hinzugefügt werden.
Wie kann ich diese Arbeit machen? Ich habe die Dokumentation von TortoiseGit und Google durchsucht, aber das schien nicht sehr nützlich zu sein.

Was ich also habe, ist diese Struktur:

repo_root/somefile.txt

Was ich möchte:

repo_root/new_folder/somefile.txt

Natürlich steht "somefile.txt" für alle Dateien und Ordner, die verschoben werden.

Dries
quelle

Antworten:

10

Erinnern Sie sich an eine Sache: Git verfolgt nur den Inhalt der Datei.

Von Dateien verschieben Abschnitt von Pro Git Book v2:

Im Gegensatz zu vielen anderen VCS-Systemen verfolgt Git die Verschiebung von Dateien nicht explizit. Wenn Sie eine Datei in Git umbenennen, werden keine Metadaten in Git gespeichert, die Sie darüber informieren, dass Sie die Datei umbenannt haben. Allerdings ist Git ziemlich klug, das hinterher zu verstehen

Verschieben und Umbenennen ist in Git dasselbe.

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

Git tut diese Dinge, wenn Sie nur eine Datei verschieben / umbenennen:

  1. Eine nachverfolgte Datei wird gelöscht. Git erhält den SHA-1 des Dateiinhalts. Angenommen, der Wert ist abc.
  2. Eine untrack-Datei wird hinzugefügt. Git berechnet den SHA-1 des Dateiinhalts. Angenommen, der Wert ist abc, auch.
  3. Wenn Sie zu diesem Zeitpunkt einen Commit ausführen, wird git feststellen, dass sie denselben SHA-1-Wert haben, und behandeln Sie sie dann als Umbenennung.

Angenommen, Sie haben einige verfolgte Dateien geändert und auch in andere Ordner verschoben. Dann kann git sie beim Commit leider nicht automatisch umbenennen / verschieben.

Wenn Sie wirklich möchten, dass git automatisch umbenannt / verschoben wird, du musst es tun :

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


Wenn Sie die Datei ändern und gleichzeitig verschieben möchten, und git sie mit TortoiseGit als Umbenennung / Verschiebung erkennen möchte, dann in Ihrem Fall:

  1. Klicken Sie mit der rechten Maustaste auf diese Datei und klicken Sie auf TortoiseGit -> Rename... Element des Kontextmenüs.
  2. Präfix new_folder\ zum Dateinamen siehe: enter image description here
  3. verpflichten

Hinweis: Sie müssen die Dateien einzeln umbenennen. Angenommen, es gibt viel zu tun. Umbenennen Sie also nur die Datei.

Hinweis2: Wenn Sie ändern viel In der Akte kann git nicht feststellen, dass es sich um eine Umbenennung / Verschiebung handelt.

Yue Lin Ho
quelle
Großartig. Das ist jetzt ein Ausgezeichnet Antworten ;)
DavidPostill
Nicht ganz richtig. Bis zu einem gewissen Grad kann Git Bewegungen erkennen, auch wenn sich der Inhalt geändert hat. Ich habe irgendwo auf SO gelesen, dass Sie bis zu 50% der Datei ändern können und Git sie weiterhin als Umbenennung erkennt, und einige Befehlszeilenparameter können diesen Schwellenwert sogar erhöhen. Ich bin kein Git-Experte, aber das weiß ich.
Tsahi Asher
1

Von dem TortoiseGit-Dokumentation :

Wenn Sie Dateien in Ihrem Arbeitsbaum verschieben möchten, z. B. in einen anderen Unterordner, können Sie den Drag & Drop-Handler mit der rechten Maustaste verwenden:

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

B. rechts ziehen sie an den neuen Ort innerhalb des Arbeitsbaums

C. lassen Sie die rechte Maustaste los

D. im Popup-Menü auswählen Kontextmenü → Git Versionsdateien hierher verschieben

Narvarth
quelle
0

Git wird dies am Back-End erledigen, nachdem Sie das Commit ausgeführt haben. Während Sie die nicht festgeschriebenen Dateien bearbeiten, werden zunächst die erstellten & amp; Löschvorgänge werden als separate Aktionen ausgeführt. Nach dem Festschreiben wird jedoch versucht, die Löschvorgänge mit create aufzulösen, um festzustellen, ob es sich tatsächlich nur um einen Dateiverschiebevorgang handelt. Dies können Sie im Commit-Protokoll mit den Meldungen "Alte Datei == & gt; Neue Datei" nachvollziehen, wenn git eine Verschiebung der Datei findet.

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

Mike Gonzales
quelle