检查文件是否已在过去<x>时间段重命名</x>

时间:2014-07-12 17:34:25

标签: git

我想知道文件是否已重命名。我正在使用git来跟踪项目。

如何使用git查看过去是否已重命名此特定文件?另外,我想将搜索限制在最近一段时间,例如1个月或1年。

3 个答案:

答案 0 :(得分:2)

您可以尝试的一个选项是git blame

它向您显示给定文件的每个请求行,哪个提交负责该行,有时它会显示该提交中文件的名称(如果它检测到多个文件对其有贡献)

例如(来自GitBook):

  

Git的另一个很酷的事情是它不会显式跟踪文件重命名。它会记录快照,然后尝试在事后确定隐式重命名的内容。其中一个有趣的功能是你可以要求它找出各种代码运动。如果你将-C传递给git blame,Git会分析你正在注释的文件,并试图找出它中的代码片段最初来自哪里,如果它们是从其他地方复制的。最近,我将一个名为GITServerHandler.m的文件重构为多个文件,其中一个是GITPackUpload.m。通过使用-C选项指责GITPackUpload.m,我可以看到代码的哪些部分最初来自:

$ git blame -C -L 141,153 GITPackUpload.m
f344f58d GITServerHandler.m (Scott 2009-01-04 141)
f344f58d GITServerHandler.m (Scott 2009-01-04 142) - (void) gatherObjectShasFromC
f344f58d GITServerHandler.m (Scott 2009-01-04 143) {
70befddd GITServerHandler.m (Scott 2009-03-22 144)         //NSLog(@"GATHER COMMI
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 145)
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 146)         NSString *parentSha;
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 147)         GITCommit *commit = [g
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 148)
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 149)         //NSLog(@"GATHER COMMI
ad11ac80 GITPackUpload.m    (Scott 2009-03-24 150)
56ef2caf GITServerHandler.m (Scott 2009-01-05 151)         if(commit) {
56ef2caf GITServerHandler.m (Scott 2009-01-05 152)                 [refDict setOb
56ef2caf GITServerHandler.m (Scott 2009-01-05 153)

有关git blame选项的更多信息(来自man page):

  

-C|<num>|

     

除了-M之外,检测从同一提交中修改的其他文件移动或复制的行。这对你很有用   重新组织您的程序并跨文件移动代码。当这个   选项被给出两次,该命令另外查找副本   创建文件的提交中的其他文件。当这个选项是   给定三次,该命令另外查找来自的副本   任何提交中的其他文件。

     

<num>是可选的,但它是git必须检测到的字母数字字符数的下限。   用于将这些行与父提交相关联的文件。而且   默认值为40.如果给出多个-C选项,则    最后一个-C的参数将生效。

并将其限制在一段时间内:

  

- 日期<format>

     

该值是以下备选方案之一:{relative,local,default,iso,rfc,short}。如果未提供--date,则使用blame.date配置变量的值。如果未设置blame.date配置变量,则使用iso格式。有关更多信息,请参阅git-log(1)中对--date选项的讨论。

答案 1 :(得分:1)

您可以将git log--follow选项一起用于特定path/file,并添加--after=date选项以显示比特定日期更近的提交。

git log --oneline --name-only --follow -- path/file 

在下面的示例中,使用file2提交重命名了069396b。之前是file1

$ ls 
file2

$ git log --oneline --name-only --follow -- file2 
6589023 msg
file2
069396b msg
file2
10f5830 msg
file1
2ce8c3d msg
file1

来自git-log手册页

- 按照:继续列出重命名以外的文件历史记录(仅适用于单个文件)。

答案 2 :(得分:0)

Alper部分回答了这个问题。我想我也会回答问题的时间段部分:

git log --oneline --name-only --follow --since=<time period> --diff-filter=R -- path/file

将提供重命名文件的提交(如果有)。如果没有重命名,则不存在此类提交,因此不会返回任何内容。