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

相关内容