【问题标题】:Using git hooks to create a diff report for every file that has changed for the current commit使用 git hooks 为当前提交更改的每个文件创建差异报告
【发布时间】:2014-02-28 23:30:26
【问题描述】:

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

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

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

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

有人做过这样的事吗?

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

【问题讨论】:

  • 为什么要使用钩子以及何时调用它?

标签: git diff githooks git-diff beyondcompare


【解决方案1】:
  1. 列出更改的文件:

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

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

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

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】:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2018-08-15
      • 2021-03-23
      • 2011-07-06
      • 1970-01-01
      相关资源
      最近更新 更多