【问题标题】:Only perform git hook operation when files in specific folder changed仅在特定文件夹中的文件发生更改时执行 git hook 操作
【发布时间】:2017-09-13 10:26:59
【问题描述】:

我有 2 个命令(与 git 无关),我希望在提交(之前或之后)和拉取之后都执行这些命令。

但是,这些命令需要一些时间才能运行,所以我不希望它们在每次提交或拉取时都执行。仅当特定文件夹中的文件自上次运行后发生更改时,它们才会发挥作用。

他们在同一个文件夹中创建或更新一个被 git 忽略的文件。当然,这个被更改的文件不应该在下次执行提交或拉取时触发命令的执行。该文件夹中的所有文件都在它的顶层(没有子目录)。 git 会跟踪其更改与是否应执行命令相关的所有文件。当新文件出现在文件夹中并且还没有被 git 跟踪时,我不在乎命令是否已经执行。但必须在创建将它们添加到 repo 的提交时执行它们。

如何解决?

【问题讨论】:

  • 我怀疑this answer 是你所需要的。
  • @larsks 谢谢!有了您的提示,我可以自己完成剩下的工作。

标签: git hook githooks


【解决方案1】:

我认为这是我想要的。在 larsks 给我提示后,我想出了它。没有任何钩子只能在 pull 之后执行,但在任何合并之后执行 at 也可以。

钩子post-commitpost-merge 现在有这个内容:

#!/bin/sh
./.hooks/conditionallyMergeChangedPdfs
exit 0

.hooks/conditionallyMergeChangedPdfs 包含以下内容:

#!/bin/bash
for folder in "Vorlesungsfolien" "Übungsfolien"
do
    diff="$(git diff HEAD^ --name-only --diff-filter=ACMR "$folder")"
    if [ ! -z "$diff" ]
    then
    rm -f "$folder/All.pdf"
    pdftk "$folder/"* cat output "$folder/All.pdf"
    fi
done

不幸的是,这不是线程安全的,因为显然无法获得新提交的哈希值,而是必须依赖于执行脚本时 repo 包含的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2017-12-13
    • 2022-10-17
    • 2010-12-13
    • 2015-08-30
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多