4

我正在尝试创建一个 git 挂钩来为我的代码和服务器代码之间发生更改的每个文件创建一个差异报告。

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

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

我对如何自动化创建差异有一个粗略的想法,我只是不知道如何获取已更改文件的路径以及已更改的远程文件的本地缓存路径.

有没有人做过这样的事情?

编辑 - 我想使用 githooks,因为我想为每次提交自动生成差异文件,而无需任何人考虑。这是我们现在签入过程的一部分(由管理层规定),手动为每个已更改的文件进行操作很乏味。

4

2 回答 2

2
  1. 要列出更改的文件:

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

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

结合这些,假设您在 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
于 2014-03-01T00:31:48.510 回答
0

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 3\BCompare.exe" "$f" tempRemote.dat "C:\output\output${COUNTER}.html" @"script.txt"
    rm tempRemote.dat
    ((COUNTER++))
done
于 2014-03-04T18:33:35.227 回答