Git是一个内容跟踪器,而不是文件跟踪器。如果你移动或重命名文件,但没有对这些文件的内容做任何修改,那么Git就只需要rewrites the tree objects。文件blob不会被目录操作更改;目录位置信息被单独存储在树对象中。 实际的重命名检测由diffing the blobs and trees处理,并查找文件之间相似性的可配置百分比。这意味着Git不会直接存储移动或重命名;它根据提交之间的差异来计算它们。 所有这一切的结果是,您的历史记录不受特定文件名或目录结构的约束。这对于大多数用例来说都很好用,但与Bazaar这样的系统相反,它将重命名作为一级操作进行跟踪。
4条答案
按热度按时间h5qlskok1#
TL;DR
继续:移动你的文件和目录。只要确保在目录重组的同一次提交中没有对文件进行任何编辑即可。
为什么有效
Git是一个内容跟踪器,而不是文件跟踪器。如果你移动或重命名文件,但没有对这些文件的内容做任何修改,那么Git就只需要rewrites the tree objects。文件blob不会被目录操作更改;目录位置信息被单独存储在树对象中。
实际的重命名检测由diffing the blobs and trees处理,并查找文件之间相似性的可配置百分比。这意味着Git不会直接存储移动或重命名;它根据提交之间的差异来计算它们。
所有这一切的结果是,您的历史记录不受特定文件名或目录结构的约束。这对于大多数用例来说都很好用,但与Bazaar这样的系统相反,它将重命名作为一级操作进行跟踪。
nhn9ugyo2#
你可以只移动文件,Git会(或者应该)注意到你移动了文件。它将保留历史。
如果由于某种原因它没有注意到移动,你可以尝试使用
--find-copies-harder
选项进行比较。gxwragnw3#
当我移动或重命名一些文件时,我也丢失了历史记录。但我尝试访问TortoiseGit和SourceTree应用程序。
当我尝试访问git bash命令时,我发现我可以看到历史记录。
字符串
在网上花了几个小时的时间寻找原因后,我终于找到了答案。
Tortoise git默认设置,只显示实际的文件历史。我的意思是,如果你重命名或如果你移动任何文件或文件夹,你不能看到历史。要查看历史记录,您必须在TortoiseGit设置上单击下面的复选框。
的数据
kulphzqa4#
虽然这是一个较老的问题,但我经历过标记的答案是不正确的。使用本机命令移动任何文件夹都将导致“删除”和“添加”。然而,git mv是你想要使用的。
https://git-scm.com/docs/git-mv
在上述情况下,将是
字符串