使用git钩子为当前提交已更改的每个文件创建差异报告

时间:2014-02-28 23:30:26

标签: git diff githooks git-diff beyondcompare

我正在尝试创建一个git hook来为我的代码和服务器代码之间的每个文件创建一个diff报告。

我见过的大多数解决方案都说使用git的diff命令来创建报告,但是我需要为每个已更改的文件完成此操作。我需要将其创建为特别是作为并排HTML报告进行比较。< / p>

因此,对于每个已更改的文件,我需要调用超出比较来创建一些文件 .html,详细说明已更改的内容。如果更改了63个文件,我希望63个html文件显示更改的差异。

我对如何自动化以及创建差异进行自动操作有一个粗略的想法,我只是不知道如何获得已更改的文件的路径以及远程文件的本地缓存的路径那已经改变了。

有人做过这样的事吗?

编辑 - 我想使用githooks因为我想让每次提交都自动生成diff文件而不必考虑它。这是我们现在的签入过程的一部分(由管理层决定),并且为每个已更改的文件手动执行操作非常繁琐。

2 个答案:

答案 0 :(得分:2)

  1. 列出已更改的文件:

    git diff --name-only
    
  2. 打印文件at a specified revision的内容:

    git show <revision>:<file>
    
  3. Beyond Compare seem通过向命令添加-来接受stdin作为输入。

  4. 结合这些,假设您在Windows上并假设服务器位于origin/master分支上,您可以执行以下操作:(请注意,我测试此内容)

    for f in $(git diff --name-only)
        git show origin/master:"$f" | BCompare.exe "$f" - # add correct option(s) before "$f" to generate html
    do
    

答案 1 :(得分:0)

超越比较似乎不喜欢在带有参数列表的文本中使用管道,所以我最终得到了这样的东西:

COUNTER=0
for f in $(git diff --name-only --cached); do
    git show HEAD:"$f" > tempRemote.dat
    "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe" "$f" tempRemote.dat "C:\output\output${COUNTER}.html" @"script.txt"
    rm tempRemote.dat
    ((COUNTER++))
done