使用githook为当前提交中更改的每个文件创建一个diff报告



我正试图创建一个git挂钩,为我的代码和服务器代码之间发生变化的每个文件创建一个diff报告。

我见过的大多数解决方案都说使用git的diff命令来创建报告,但我需要对每个更改的文件都这样做,并且我需要将其创建为一个并排的HTML报告。

因此,对于每一个更改的文件,我都需要调用beyond-compare来创建一些文件.html,详细说明更改的内容。如果63个文件发生了更改,我希望63个html文件显示更改的差异。

我对如何自动创建diff有一个大致的想法,我只是不知道如何获得更改的文件的路径以及更改的远程文件的本地缓存路径。

有人做过这样的事吗?

EDIT-我想使用githook,因为我想让diff文件在每次提交时自动生成,而无需任何人考虑。这是我们现在签入过程的一部分(根据管理层的指示),手动处理每个更改的文件很乏味。

  1. 要列出更改的文件:

    git diff --name-only
    
  2. 以指定的修订版打印文件的内容:

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

将这些结合起来,假设你在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

Beyond compare似乎不喜欢使用带参数列表的管道文本,所以我最终选择了这样的东西:

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

最新更新