TortoiseGit:将文件移动到未识别为移动的新文件夹

Dri*_*ies 10 git tortoise-git

我正在尝试将存储库中的一些文件移动到一个新文件夹中。我想让 git / TortoiseGit 认识到这是一个移动而不是删除和多次添加。
我怎样才能使这项工作?我检查了 TortoiseGit 的文档并搜索了谷歌,但这似乎不是很有用。

所以,我所拥有的是这个结构:

repo_root/somefile.txt
Run Code Online (Sandbox Code Playgroud)

我想要的是:

repo_root/new_folder/somefile.txt
Run Code Online (Sandbox Code Playgroud)

当然,“somefile.txt”代表正在移动的所有文件和文件夹。

Yue*_* Ho 15

记住一件事:Git 只跟踪文件内容。

来自Pro Git book 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 无法确定它是重命名/移动。

  • 不完全准确。在一定程度上,即使内容发生变化,Git 也可以检测到移动。我在某处读到 SO 你最多可以更改文件的 50%,Git 仍然会将其检测为重命名,并且某些命令行参数甚至可以增加此阈值。我不是 Git 专家,但这就是我所知道的。 (2认同)
  • @TsahiAsher 对此是正确的。请参阅 [`--find-renames`](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---find-renamesltngt) 和 [`--find-copies例如,`](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---find-copiesltngt)`git diff`的选项。话虽如此,我同意如果可能的话,最好避免在同一提交中进行修改和重命名/移动。 (2认同)

小智 5

TortoiseGit 文档

如果你想在你的工作树中移动文件,或者移动到不同的子文件夹,你可以使用鼠标右键拖放处理程序:

A.选择要移动的文件或目录

B.右键将它们拖到工作树内的新位置

C.松开鼠标右键

D. 在弹出菜单中选择Context Menu ? Git 在此处移动版本化文件