为什么在预提交挂钩中添加 git 后索引没有更新?

Why is the index not updated after doing a git add in a pre-commit hook?

我有一个预提交挂钩:

这允许我将更新后的版本文件添加到同一提交中。 我遇到的唯一问题是,在挂钩运行后,工作树和 HEAD 会更新为新版本文件,但索引不会。我需要手动暂存索引的版本文件以反映更改。

我将 git 更新为 2.3.4,但这并没有解决任何问题。

我遗漏了什么吗?

更新

版本文件的当前设置:

content filter driver, more specifically a clean filter 你会过得更好。

(图片显示在“Customizing Git - Git Attributes", from "Pro Git book”)

该过滤器(通过 .gitattributes declaration 与版本文件相关联)将 运行 在 git diffgit commit 上自动 运行,并且将:

  • 检测版本是否需要更改
  • 如果需要更新版本文件

这样,常规提交最终会提交一个 更新的 版本文件。自动。

我添加了一个 post-commit 挂钩,它将自动执行 git add 版本文件(如果有的话)。如果有人 better/easier/cleaner 解决了这个问题,请告诉我。

对于那些感兴趣的人,这是 post-提交:

for fn in `git diff-tree -r --name-only --no-commit-id develop`; do
    if [[ $fn == *"version.txt" ]];then #prevent infinite loops that will eventually fill up the entire harddrive
        echo "post-commit hook found a version file at $fn"
        git add $fn
    fi
done