【发布时间】:2011-11-21 16:31:25
【问题描述】:
我正在尝试设置一个预提交挂钩以在任何提交通过之前测试我的项目,但我找不到如何确保只测试 HEAD(带有当前提交的补丁)而不是当前工作树(在大多数情况下对我来说很脏)。
找到的解决方案:
找到此链接并最终执行以下操作。
http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/
# Checkout a copy of the current index into MIRROR
git checkout-index --prefix=$TMPDIR/ -af
# Remove files from MIRROR which are no longer present in the index
git diff-index --cached --name-only --diff-filter=D -z HEAD | \
(cd $TMPDIR && xargs -0 rm -f --)
【问题讨论】:
-
“测试我的仓库”是什么意思?
-
只要您的单元测试是“git 感知”并且可以访问
HEAD版本而不是您的工作树,我就看不到问题。 -
我的测试不是“git 感知”并且据我所知仅访问 HEAD 不会给我我的暂存区域。无论如何,我找到了答案(请参阅接受的解决方案)
-
如果您的测试不支持 git,那么您需要摆脱(可能是暂时的,例如通过
stage)未提交的更改或检查干净的工作树,可能通过 @987654325 @ 和checkout-index。 “暂存区”可能包括当前提交中不是的补丁,因此您需要HEAD,而不是您的索引/缓存/暂存区。从根本上说,如果你不能直接访问 git 模型,你需要一个看起来像HEAD的文件系统区域。我没有办法解决这个问题。 -
我找到了一种解决方法,并用它更新了我的问题。感谢您的帮助。
标签: git githooks pre-commit