代码之家  ›  专栏  ›  技术社区  ›  ACA-Ken

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

  •  4
  • ACA-Ken  · 技术社区  · 10 年前

    我试图创建一个githook,为我的代码和服务器代码之间发生变化的每个文件创建一个差异报告。

    我见过的大多数解决方案都说使用git的diff命令来创建报告,但我需要对每个更改过的文件都这样做,并且我需要在beyond-compare中创建它,特别是作为一个并排的HTML报告。

    因此,对于每个已更改的文件,我需要调用beyond compare来创建一些 文件 .html详细说明了发生的变化。如果63个文件发生了更改,我希望63个html文件显示不同的更改。

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

    有人做过这样的事吗?

    EDIT-我想使用githooks,因为我想让每次提交都自动生成diff文件,而不需要任何人考虑。这是我们现在签入过程的一部分(由管理层决定),手动处理每个更改的文件很乏味。

    2 回复  |  直到 10 年前
        1
  •  2
  •   Community pid    7 年前
    1. 要列出更改的文件,请执行以下操作:

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

      git show <revision>:<file>
      
    3. Beyond Compare seem 通过添加 - 命令。

    结合这些,假设您在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
    
        2
  •  0
  •   ACA-Ken    10 年前

    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