繁体   English   中英

使用 git pre-commit hook 检查 repo 的最终状态?

[英]Use git pre-commit hook to inspect the eventual state of the repo?

假设我有一个带有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

...

但这似乎......不仅仅是一个黑客,我不确定我可以相信它跨版本和操作系统工作的可靠性。

您需要做的是提取 Git 索引的内容,如果设置了$GIT_INDEX_FILE变量定义,否则为默认索引。

序列:

dir=$(mktemp -d)
git checkout-index --prefix=${dir}/ -a

将做到这一点,填充新的临时目录。 (当然,此片段不会自行清理,并且您省略了-t模板;这只是一个最小的演示。)

不幸的是,这种简单的方法通常是不够的,因为您通常还需要任何未跟踪的文件。 使这一切工作得很好是相当困难的。

这里描述一个名为pre-commit的相当奇特的程序,它试图处理所有事情。 我没有实际使用过它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM