我得到了2个命令(与git无关),我想在提交时执行(无论是在之前还是之后)和之后执行。
但是,这些命令需要一些时间才能运行,所以我不希望它们在每次提交或拉取时执行。如果特定文件夹中的文件自上次运行以来发生了更改,它们只能执行有用的工作。
他们在同一个文件夹中创建或更新git忽略的文件。当然,更改此文件不应在下次执行提交或拉取时触发命令的执行。该文件夹中的所有文件都位于它的顶层(没有子目录)。 git跟踪所有更改与命令是否应该执行相关的文件。当新文件出现在文件夹中并且git尚未跟踪时,我不关心命令是否已经执行。但是,当创建将它们添加到repo的提交时,必须执行它们。
如何解决这个问题?
答案 0 :(得分:0)
我认为这就是我想要的。在larsks给我一个提示之后我想出了它。没有钩子只能在拉动之后执行,但在任何合并之后也可以执行。
钩子post-commit
和post-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包含的内容。