TortoiseGit:將檔案移至新資料夾不被識別為移動

TortoiseGit:將檔案移至新資料夾不被識別為移動

我正在嘗試將存儲庫中的一些文件移動到新資料夾。我希望 git / TortoiseGit 認識到這是一個移動而不是刪除和多次添加。
我怎樣才能做到這一點?我檢查了 TortoiseGit 的文檔並蒐索了 Google,但這似乎不是很有用。

所以,我所擁有的是這樣的結構:

repo_root/somefile.txt

我想要的是:

repo_root/new_folder/somefile.txt

當然,「somefile.txt」代表正在移動的所有檔案和資料夾。

答案1

記住一件事:Git 僅追蹤文件內容。

移動檔案Pro Git 書籍 v2 的部分:

與許多其他 VCS 系統不同,Git 不會明確追蹤檔案移動。如果您在 Git 中重新命名文件,Git 中不會儲存任何元資料來告訴它您重新命名了該文件。然而,Git 非常聰明,能夠在事後解決這個問題

而且,移動和重命名在 Git 中是同一件事。

所以,Git自動偵測移動/重新命名僅在這些檔案未被修改的前提下起作用

只有當您移動/重命名檔案時,Git 才會執行以下操作:

  1. 追蹤的檔案被刪除,git 取得該檔案內容的 SHA-1,假設值為abc.
  2. 新增一個 untrack 文件,git 計算該文件內容的 SHA-1,假設該值abc也是 。
  3. 如果你此時提交,git 會發現它們具有相同的 SHA-1 值,然後將它們視為重新命名。

假設您修改了一些追蹤檔案並將它們移動到其他資料夾中。然後,不幸的是,git 無法偵測到它們在提交時自動重命名/移動。

如果你真的想讓 git 自動追蹤重命名/移動,你需要做:

確保您不修改文件,並且僅在一次提交中重新命名/移動文件。


如果你想同時修改文件和移動文件,並希望 git 使用 TortoiseGit 將它們檢測為重命名/移動,那麼在你的情況下:

  1. 右鍵單擊該文件,然後按一下TortoiseGit -> Rename...上下文選單項目。
  2. new_folder\檔案名稱的 前綴,請參閱:在此輸入影像描述
  3. 犯罪

注意:需要一一重命名檔案。假設有很多工作要做。因此,最好僅重命名文件。

註2:如果修改很多在檔案上,git 無法確定它是重命名/移動。

答案2

來自TortoiseGit 文檔:

如果您想在工作樹內移動文件,也許移動到不同的子資料夾,您可以使用滑鼠右鍵拖放處理程序:

A.選擇要移動的檔案或目錄

B.右鍵拖曳他們到工作樹內的新位置

C.放開滑鼠右鍵

D. 在彈出式選單中選擇上下文選單 → Git 將版本控制的檔案移至此處

答案3

提交後,Git 將在後端處理此問題。當您處理未提交的文件時,它最初會將創建和刪除視為單獨的操作,但在您提交後,它將嘗試使用創建來解決刪除問題,以查看它是否實際上只是文件移動。當 git 發現檔案移動時,您可以在提交日誌中看到「舊檔案 ==> 新檔案」訊息。

或者,如果你覺得比較安全,你可以使用 git mv https://git-scm.com/docs/git-mv

相關內容