Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在预提交钩子中添加git后索引没有更新?_Git_Pre Commit Hook - Fatal编程技术网

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

为什么在预提交钩子中添加git后索引没有更新?,git,pre-commit-hook,Git,Pre Commit Hook,我有一个预提交钩子: 检查是否需要更新我的版本文件 修改所述文件 在此文件上执行git添加 这允许我将更新的版本文件添加到同一提交中。 我唯一的问题是,在钩子运行之后,工作树和头部会用新版本文件更新,但索引没有更新。我需要手动暂存索引的版本文件以反映更改 我将git更新为2.3.4,但这并不能解决任何问题 我有什么遗漏吗 更新 版本文件的当前设置: 每个模块都包含一个版本文件 它们存储在这里:/module//version.txt 它们包含手动输入的版本号(如1.5.2)和父提交散列 你

我有一个预提交钩子:

  • 检查是否需要更新我的版本文件
  • 修改所述文件
  • 在此文件上执行git添加
这允许我将更新的版本文件添加到同一提交中。 我唯一的问题是,在钩子运行之后,工作树和头部会用新版本文件更新,但索引没有更新。我需要手动暂存索引的版本文件以反映更改

我将git更新为2.3.4,但这并不能解决任何问题

我有什么遗漏吗

更新 版本文件的当前设置:

  • 每个模块都包含一个版本文件
  • 它们存储在这里:
    /module//version.txt
  • 它们包含手动输入的版本号(如1.5.2)和父提交散列

你最好选择一个,更具体地说是一个

(图像显示在“”中,来自“”)

该过滤器(通过a与版本文件关联)将在
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。