【发布时间】:2020-08-20 10:18:06
【问题描述】:
上下文
我想确保我推送的每个提交都通过测试。
我想在我的(客户端)端检查这一点,即在提交之前甚至推送(所以我不想依赖 CI 工具)。
问题
目前,我已经实现了一个 pre-commit 挂钩来运行我的测试,因此我什至无法提交一个损坏的状态。
但是,我的测试套件需要几秒钟才能运行。在编写提交消息之前,我需要等待很多时间。这使它成为每天impractical to use;既是因为我经常提交,而且有时我故意要提交一个损坏的状态以便以后压扁(我知道git commit --no-verify,但这不是重点)。
问题
因此,我不想检查每个提交一次(在创建时),我想在推送之前对它们进行批量测试。
如何实现一个 pre-push 钩子来运行我的测试套件每个新提交要推送?
(为简单起见,假设通过测试意味着test/run_tests.sh 返回0。)
【问题讨论】:
-
pre-push hook传递本地和远程 ID。要在每次提交上运行测试,请在git rev-list <remote-id>..<local-id>上运行一个循环。在循环中检查每个提交到一个临时目录,运行测试并删除该目录。 -
@phd:这里有一点问题:远程 ID 可能在本地不存在。当然,如果是这种情况,那么推送可能一开始就会被拒绝为非快进。