仅在特定文件夹中的文件更改时执行 git 挂钩操作

Only perform git hook operation when files in specific folder changed

我有 2 个命令(与 git 无关)我想在提交时(无论是之前还是之后)和拉取之后执行。

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

发生更改时才执行有用的工作

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

如何解决这个问题?

我认为这符合我的要求。我是在 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 包含的内容。