为什么在预提交挂钩中添加 git 后索引没有更新?
Why is the index not updated after doing a git add in a pre-commit hook?
我有一个预提交挂钩:
- 检查我的版本文件是否需要更新
- 修改所述文件
- 在此文件上执行 git 添加
这允许我将更新后的版本文件添加到同一提交中。
我遇到的唯一问题是,在挂钩运行后,工作树和 HEAD 会更新为新版本文件,但索引不会。我需要手动暂存索引的版本文件以反映更改。
我将 git 更新为 2.3.4,但这并没有解决任何问题。
我遗漏了什么吗?
更新
版本文件的当前设置:
- 每个模块都包含一个版本文件
- 它们存储在这里:
/module/<name of module>/version.txt
- 它们包含手动输入的版本号(例如 1.5.2)和父提交哈希
content filter driver, more specifically a clean filter 你会过得更好。
(图片显示在“Customizing Git - Git Attributes", from "Pro Git book”)
该过滤器(通过 .gitattributes
declaration 与版本文件相关联)将 运行 在 git diff
和 git 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
我有一个预提交挂钩:
- 检查我的版本文件是否需要更新
- 修改所述文件
- 在此文件上执行 git 添加
这允许我将更新后的版本文件添加到同一提交中。 我遇到的唯一问题是,在挂钩运行后,工作树和 HEAD 会更新为新版本文件,但索引不会。我需要手动暂存索引的版本文件以反映更改。
我将 git 更新为 2.3.4,但这并没有解决任何问题。
我遗漏了什么吗?
更新
版本文件的当前设置:
- 每个模块都包含一个版本文件
- 它们存储在这里:
/module/<name of module>/version.txt
- 它们包含手动输入的版本号(例如 1.5.2)和父提交哈希
content filter driver, more specifically a clean filter 你会过得更好。
(图片显示在“Customizing Git - Git Attributes", from "Pro Git book”)
该过滤器(通过 .gitattributes
declaration 与版本文件相关联)将 运行 在 git diff
和 git 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