Answers:
Git不会进行重命名跟踪或复制跟踪,这意味着它不会记录重命名或复制。相反,它所做的是重命名和复制检测。您可以使用选项在git diff
(和git show
)中请求重命名检测-M
,可以使用-C
选项(-C
隐含-M
)请求更改文件中的其他副本检测,还可以在所有文件中使用--find-copies-harder
或进行更昂贵的副本检测-C -C
(这意味着-C
,这意味着-M
)。请参见git-diff联机帮助页。
您还可以配置GIT中经常做重命名检测设置diff.renames
为true值(如true
或1
),您可以要求混帐将其设置为做拷贝检测过copy
或copies
。请参见git-config手册页。
还要检查和相关配置变量的-l
选项。git diff
diff.renameLimit
请注意,它git log <pathspec>
在Git 中的工作方式不同:这<pathspec>
是一组路径分隔符,其中path可以是(子)目录名称。在重命名和复制检测开始发挥作用之前,它可以过滤和简化历史记录。如果要遵循重命名和副本,请使用git log --follow <filename>
(当前受限制,并且仅适用于单个文件)。
git log -L123,456:file.xyz
)正确地跟随重命名,但不能复制,在这种情况下,您不能传递--follow;同样,AFAICT,这不适用于git blame。
2020-05-19:以下解决方案的优点是不更改原始文件的日志,不创建合并冲突且更短。
您可以强制Git通过三次提交来检测复制文件的历史记录:
--no-ff
。(版权归Raymond Chen所有。)
前一个解决方案有四个提交:
move
和之间有什么区别rename
?
mv
这两种操作吗?对于可能涉及更改文件目录的情况,我使用了“移动”,对于没有更改的情况,我使用了“重命名”。
git mv orig new
?“阅读原件”是什么意思cp new orig && git add orig
?
diff.renames
为copies
(例如'git config diff.renames copies
')。我同意这有点违反直觉。