Git Hook超时连接到Github-是否可以将“预先发送”的Git Hook绑定到其中?

问题描述 投票:0回答:2

因此,我有一个用于预推的git钩子,该钩子运行一堆代码分析和测试。这些测试有时可能需要2-3分钟才能完成。因此,我与Github的连接超时,并且对Github的推送失败。

我不想在每次提交后都运行这些测试,因为我倾向于等到完成所有更改并完成自己的测试,然后在所有小的提交中提交所有内容。可以预期,在开发测试期间,测试会中断,而我并不想阻止我继续提交,只是将损坏的代码推送到Github。我还只想在我认为将代码推送到GitHub之前就通过所有测试,就可以运行所有测试。

如果我可以绑入某种“预发送”的Git挂钩?这将在完成所有提交之后和在推送之前都进行我的所有测试,但是在打开与Github的连接之前,因此我不必担心超时吗?还是我只是在需要调整工作流程并提交更大代码段的情况下?

我喜欢有意进行小的提交的想法,以便在逻辑上分解更改以便以后进行代码审查。与将所有更改分组为一个大型提交相反,我只需要运行一次测试即可。但是,如果我无法阻止git在运行测试之前在预推钩上打开与GitHub的连接,这似乎是一种情况,我可能不得不硬着头皮。

git github githooks
2个回答
0
投票

[post-commit钩子中的运行插入和测试的想法怎么样,并且只在您打算时才运行开关?例如,[bash中的post-commit

#!/bin/bash

is_runnable=$(git config foo.bar)
if [[ "${is_runnable}" = yes ]];then
    # linting and tests
else
    # do nothing
fi
exit 0

对于git commit,该挂钩被调用,但进入“不执行任何操作”块。当您希望它运行检测和测试时,请指定foo.bar=yes

git -c foo.bar=yes commit

对于foo.bar,它是有效的git配置变量。但是最好提出一个有意义的变量,该变量与其他配置变量没有冲突。


0
投票

直到Git打开与服务器的连接以读取引用,它不知道服务器在其端拥有什么,因此无法确定要推送的数据。据Git所知,这两个存储库可能是最新的,因此没有什么可推送的。

通常,人们处理这种情况的方式是建立某种CI系统,然后将其代码推送到主分支以外的其他内容中,然后合并(快进或其他方式)到主分支中。这是处理它的推荐方法,主要是因为(a)它是自动化的,并且(b)它不能被绕过。如果您是唯一从事此项目的人,那么后者并不重要,但是对于任何形式的协作都非常重要。

如果您不想这样做,您可以切换到HTTPS而不是SSH进行此操作,因为如果在pre-push挂钩期间旧的HTTPS连接断开,Git将打开新的连接。

© www.soinside.com 2019 - 2024. All rights reserved.