假设我有一个带有pre-commit
钩子的 git repo,并且我编辑了一堆文件,但我只提交了其中的一些。或者我(错误地)在我最后一次将一些文件添加到提交之后发生了进一步的编辑。然而它发生了,我对不在索引中的文件进行了编辑,因此它们可以被钩子看到,但不会成为提交的一部分。如果其他人要检查该提交,则钩子对他们来说会失败。
是否有一种简单的方法来获取与提交后状态匹配的目录(即,如果要从我期望创建的提交中进行新的克隆,我会得到什么),以便钩子可以测试,而不是工作目录?
我想我可以通过以下方式一起破解一些东西:
OLDR=$PWD
NEWR=$(mktemp -d -t hook-XXXXXXXXXX)
HEAD=$(git rev-parse HEAD)
INDEX=$(mktemp -t hook-XXXXXXXXXX.patch)
git diff --staged > $INDEX
cd $NEWR
git clone $OLDR $NEWR
git checkout $HEAD
git apply $INDEX
...
但这似乎......不仅仅是一个黑客,我不确定我可以多么可靠地相信它可以跨版本和操作系统工作。