为什么在预提交钩子中添加git后索引没有更新?
我有一个预提交钩子:为什么在预提交钩子中添加git后索引没有更新?,git,pre-commit-hook,Git,Pre Commit Hook,我有一个预提交钩子: 检查是否需要更新我的版本文件 修改所述文件 在此文件上执行git添加 这允许我将更新的版本文件添加到同一提交中。 我唯一的问题是,在钩子运行之后,工作树和头部会用新版本文件更新,但索引没有更新。我需要手动暂存索引的版本文件以反映更改 我将git更新为2.3.4,但这并不能解决任何问题 我有什么遗漏吗 更新 版本文件的当前设置: 每个模块都包含一个版本文件 它们存储在这里:/module//version.txt 它们包含手动输入的版本号(如1.5.2)和父提交散列 你
- 检查是否需要更新我的版本文件
- 修改所述文件
- 在此文件上执行git添加
- 每个模块都包含一个版本文件
- 它们存储在这里:
/module//version.txt
- 它们包含手动输入的版本号(如1.5.2)和父提交散列
git diff
和git commit
上自动运行,并将:
- 检测版本是否需要更改
- 如果需要,请更新版本文件
这样,常规提交将最终提交更新的版本文件。自动。我添加了一个post-commit钩子,它将自动执行版本文件的
git-add
(如果有)。如果有人对此问题有更好/更容易/更干净的解决方案,请告诉我
对于感兴趣的人,这是提交后:
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
我已经更新了我的问题。使用内容过滤器驱动程序是否可以实现这一点?此处的设置是否正确?如何让versionupdate脚本只检查当前模块的文件?@diesonne我不熟悉您项目的结构,但脚本的思想是随时检测所需的版本,以替换version.txt中的正确值。@diesone过滤器将应用于所有
version.txt
文件(每个文件执行一次脚本),脚本需要能够检测它运行的是哪个version.txt
,以获得正确的信息。如果我理解这一点,那么我需要每次手动更新version.txt
文件,以便过滤器拾取并修改它。@diesonne脚本的目的是检测新版本和更新正确的文件(该文件将自动成为提交的一部分)。我不知道它是如何检测新版本号的,也不知道从哪里检测到的。这是特定于您的项目的。但如果您可以检测到该版本号,那么我的观点是,可以通过干净的内容过滤器驱动程序自动提交version.txt。