2011-03-07 87 views
2

我以前一直是CVS用户,虽然我认为Git是一个好的版本控制系统,但我缺少CVS中的功能。具体而言,我想查看文件的版本历史记录,例如其上的标签。我怎么能在Git中做到这一点?如何让Git显示文件的版本历史

回答

5

在git文件中没有自己的历史记录。整个项目都有历史。所以你唯一可以要求的是与文件相关的历史的一部分,或者更确切地说(因为没有文件标识的特殊概念)到一个路径。所有显示命令的历史记录都接受路径限制器。像:

$ git log -- file 
$ gitk HEAD -- file 

--将修订与路径分开。在大多数情况下,您可以忽略它,但如果名称也是有效的修订名称,或者文件在当前版本中不存在,则可能需要该名称。

您也可以指定一个目录名称,在这种情况下,将列出该子树中所有文件的历史记录。

由于此限制通过路径,如果文件被重命名,它将不会遵循。毕竟,git不会存储任何有关重命名的明确信息。然而,它可以猜测重命名和你可以问log尽量遵循重命名与--follow像:

$ git log --follow -- file 

这只适用于单个文件,而不是一个目录。

另一种选择是寻找包含特定文本的更改,如果您正在查找某些代码来自何处,这通常更容易。使用-S选项以记录,如:

$ git log -Stext 
2

试试这个关于大小:

git log -p filename 

这是一个有点难以在终端上阅读,所以你可能需要将其重定向到一个文件,它在那里寻找。

+0

谢谢。它显示提交历史记录。任何方法都可以显示标签上的信息?提交信息很长,大多数版本都不相同。 – wintige 2011-03-07 09:20:40

+0

@wintige我不知道有任何命令可以区分标签。 – 2011-03-07 09:26:50

+1

什么是难以阅读?就像所有的git命令一样,如果它指向终端,它会将自己重定向到更少的位置。当然,该寻呼机是可配置的。 – 2011-03-07 10:21:31

3

Rafe Kettler's answer给你你所需要的基础知识,但是是值得推广的一个位。首先,如果你的文件具有相同的名称作为一个分支,你应该在文件名前添加--

git log -p -- filename 

-p参数说也显示更改由该承诺中引入该文件。您提到您希望看到适用于该版本的任何标签 - 为此,您应该添加--decorate选项。

最后,如果该文件可能已在其历史记录中的某个位置重新命名,或者从存储库中的其他位置复制到位,则应考虑添加--follow选项。

可以在其documentation,或检查特定文件的历史记录在这个其他堆栈溢出问题的一些其他方法找到git log的更多信息:

...这也建议图形历史浏览器(例如,gitk),可以给出一个特定的路径。