我有一个提交后挂钩,可以编辑特定的源文件(具体来说,将提交哈希写入 c# 类中的字符串)。脚本是:
#!/bin/sh
hashStr=`git log --pretty=format:'%H' -n 1`
str="public static class GitHash { public static readonly string CommitHash = \"$hashStr\"; }"
echo $str > MyApp\\MyNamespace\\gitHash.cs
相同的脚本在我的 post-rebase、post merge 等钩子中。它工作正常并且在 git 中显示为已修改,直到我将 GitHash.cs 文件添加到 skip-worktree:
git update-index --skip-worktree MyApp/MyNamespace/GitHash.cs
现在该文件根本没有被修改,并且保持在我将它添加到 skip-worktree 时的状态。如果我从跳过工作树中删除它,钩子会再次起作用(文件被修改)。如果我正确理解了skip-worktree,那么当我想在本地修改文件时使用它是可以的,但不想意外提交它们并且不想在我执行git diff 时看到这些文件。但是,它似乎以某种方式阻止了钩子编辑此文件?
所以,如果我想让文件被钩子修改并且不显示在 git diff 上,我该怎么办?