git可以很好地处理移动/重命名目录,但是要跟踪这些重命名的更改,您可能需要为您正在使用的任何命令添加一些额外的参数,或者设置几个配置选项.
原因是git只是在每次提交时存储树的状态,而不是为了从一个状态移动到另一个状态而发生的更改.如果你的源代码树中有很多文件,那么你可能需要告诉git积极尝试查找任何重命名.同样,如果您对某个特定文件感兴趣,则需要明确告诉git在其过去搜索可能的重命名.
举一个后者的例子,一个典型的案例是git log -- filename
用于检查特定文件的历史.为了告诉git在任何可能发生的重命名之前也查找它的历史记录,你必须这样做:
git log --follow -- filename
Run Code Online (Sandbox Code Playgroud)
作为另一个示例,git log --stat
如果树中有许多文件,则有用输出可能不包括所有重命名或副本,因为它需要检查所有文件对才能执行此操作.要强制git在使用时检测副本并重命名git log
,git diff
您可以将config选项diff.renameLimit
设置为至少树中的文件数,并将config选项设置diff.renames
为copies
- 这意味着检测副本和重命名.
或者,如果您不想将这些设置为配置选项,则可以使用-M
或-C
选项git log
或git diff
.这些在JakubNarębski对这个问题的回答中有更详细的描述: