所有先前版本中的git:grep文件

时间:2016-01-03 12:49:41

标签: git version-control grep pelican

考虑一个包含以下行的Python配置文件:

THEME = 'gum'

THEME键只出现一次,所以当我想知道THEME是什么时,我会把文件格式化:

grep THEME pelicanconf.py

该文件保存在git中,我想在之前的所有git提交中查找THEME,以便知道此行何时更改。

是否有一种优雅的方式来浏览git文件的整个历史记录?

2 个答案:

答案 0 :(得分:2)

git log -S'THEME' -- pelicanconf.py | xargs -n 1 git show显示更改THEME

的每个提交的内容

然而,它打印出完整的提交,而不仅仅是更改。

var="THEME"; git log -S"$var" -p -- pelicanconf.py | egrep "$var|commit|Date:"

会显示THEME的所有变体,其中包含提交哈希值和日期。

@ -p选项的@ knittl。

此外,找到了gitksee here的解决方案。

答案 1 :(得分:1)

实现目标的方法是使用bisect run <script> 像目前为止一样使用bisect,并使用带有脚本选项的bisect。

bisect搜索所有提交(在给定范围内),并使用合适的退出代码判断代码是好还是坏。

脚本将返回相应的跳过代码(或125代表不可测试 - 在您的情况下更合适)。

  

请注意,如果当前源代码良好,脚本(上例中的my_script)应该以代码0退出,如果当前源代码不好,则退出时使用1到127(含)之间的代码,但125除外

     

任何其他退出代码都将中止bisect进程。应该注意的是,一个程序终止于&#34;退出(-1)&#34;离开$? = 255,(参见exit(3)手册页),因为该值被&#34;&amp; 0377&#34;

     

当无法测试当前源代码时,应使用特殊退出代码125。如果脚本以此代码退出,则将跳过当前修订(请参阅上面的git bisect)。选择125作为用于此目的的最高敏感值,因为POSIX shell使用126和127来指示特定的错误状态(127表示未找到命令,126表示找到命令但不可执行---这些详细信息无所谓,因为它们是脚本中的正常错误,就“&#34; bisect run&#34;而言”而言。

Sample project for bisect

使用git log

您可以将-p标记传递给日志以跟踪特定文件

git log -p filename