仅在特定文件夹中的文件发生更改时才执行git hook操作

时间:2017-09-13 10:26:59

标签: git hook githooks

我得到了2个命令(与git无关),我想在提交时执行(无论是在之前还是之后)和之后执行。

但是,这些命令需要一些时间才能运行,所以我不希望它们在每次提交或拉取时执行。如果特定文件夹中的文件自上次运行以来发生了更改,它们只能执行有用的工作。

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

钩子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包含的内容。