Zug*_*alt 9 git hook push compilation
我想为git添加一个更新钩子,以防止人们推送无法编译的java代码.理想情况下,它会调用javac,查看结果,并允许或拒绝推送.
我想要阻止的最常见的例子是有人没有提交他们所有的更改,从而打破了构建.但是,我的理解是git钩子在客户端(而不是服务器)上运行,所以如果发生上述情况,钩子仍然允许推送.
什么是阻止人们使用不完整提交破坏构建的最佳方法?
更新:
有一个原始版本的钩子工作,感谢所有的帮助!
摘自更新钩子:
### make sure code compiles
## currently does this by copying the state of the repository as of the pushed code and attempting to build it
# for now, hard coded as C:\Windows\Temp
copydir="/c/Windows/Temp/git_hook_compile_copy"
echo "making copy of $newrev to $copydir" >&2
rm -rf "$copydir"
mkdir "$copydir"
git archive $newrev | tar -x -C $copydir/
if [ "$?" != "0" ]; then
echo "*** unable to make copy of code" >&2
exit 1
fi
echo "attempting to build $newrev" >&2
"$ANT_HOME/bin/ant" -file "$copydir/appropriatePath/build.xml"
if [ "$?" != "0" ]; then
echo "*** code does not compile" >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
(注意这是针对Windows环境并且依赖于定义的ANT_HOME(以及JAVA_HOME)环境变量)
Git 服务器和客户端没有太大区别;-)。因此,当然,如果服务器上发生相同的事件,则在“客户端”上运行的所有挂钩都将在“服务器”上运行。
比如update
hook,就完全属于这一类。它在分支更新后调用,如果此挂钩返回非零状态,则更新将被取消。所以你可能想把编译放在那里,并返回它的结果。您从钩子打印的所有消息都将显示给在其控制台上提交的用户。这非常方便,因为他可以从您的构建脚本中看到错误消息并修复它。
即使您同时运行两个编译,git 存储库也不会丢失提交,因为在其更新挂钩中使用了“old refname”参数。然而,可能会发生这样的情况:提交者等待编译,而他的引用没有被推送,因为其他人已经推送了他的引用。
默认的 git 存储库包含一个很好的钩子示例update
(名为update.sample
)。如果您需要明确的示例,请参阅它。
但是,如果编译时间太长,并且提交率超过了编译代码的频率,您可能需要使用更高级的解决方案。评论者建议在谷歌中寻找“持续集成”。
归档时间: |
|
查看次数: |
4717 次 |
最近记录: |