2014-09-24 63 views
0

我正在尝试编写一个git钩子,它在推送到服务器时对文件运行语法检查。如何过滤git日志以仅显示已修改但未删除的不同文件名?

我已经成功示出了使用

git的日志--name-仅--pretty =格式的日志与文件名: '%H' --diff滤波器= AM

这使我在日志中的格式如下:

\ < \ SHA-1>

路径/到/文件

路径/到/文件2

...

这会给我只已添加或修改的文件。

我想更进一步借此,并具有满足以下每个条件的日志:

  1. 可见,未被删除在以后提交所有修改过的文件。例如,我修改一个文件并在稍后提交它,然后我将该文件提交给该文件并进行提交。日志输出不应该显示该文件,因为它在稍后的提交中被删除
  2. 显示所有尚未删除的已创建文件。例如)我添加一个文件并提交它,然后在以后提交我gm rm该文件。日志输出不应显示该文件,因为它在稍后的提交中被删除。
  3. 仅在最新的提交中显示已修改的文件。例如)我修改一个文件并提交它。我再次修改文件并提交。日志输出应该只显示最近提交的文件。

我该如何在没有代码的情况下做到这一点?即)使用git或git和常用unix命令的组合的命令行解决方案。

回答

0

如果你想因为给定的修订rev添加或修改的文件列表,

git diff --name-only --diff-filter=AM $rev.. 

应该足够了。

如果您确实需要知道导入每个文件更改的最新非合并提交,则类似于以下内容的某些操作可能会起作用,但速度会非常慢。

for rev in $(git rev-list --min-parents=1 --max-parents=1 HEAD); do 
    echo $rev 
    for file in $(git diff --name-only $rev^..$rev); do 
     [ -z "$(git log -1 $rev.. -- $file)" ] && echo "$file" 
    done 
    echo 
done 
相关问题