man*_*lds 199
Git pre-push
在1.8.2
发布中获得了优势 .
示例pre-push
脚本:https://github.com/git/git/blob/87c86dd14abe8db7d00b0df5661ef8cf147a72a3/templates/hooks--pre-push.sample
1.8.2发布说明谈论新的预推钩:https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt
Jim*_*ane 23
Git在1.8.2版本中获得了预推钩.
预推钩是我需要的预提交钩子.除了保护分支外,它们还可以提供额外的安全性以及预先提交的钩子.
并举例说明如何使用(从这个漂亮的条目中采取和采用和增强)
登录vagrant,运行测试然后推送的简单示例
#!/bin/bash
# Run the following command in the root of your project to install this pre-push hook:
# cp git-hooks/pre-push .git/hooks/pre-push; chmod 700 .git/hooks/pre-push
CMD="ssh vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key 'cd /vagrant/tests; /vagrant/vendor/bin/phpunit'"
protected_branch='master'
# Check if we actually have commits to push
commits=`git log @{u}..`
if [ -z "$commits" ]; then
exit 0
fi
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
if [[ $current_branch = $protected_branch ]]; then
eval $CMD
RESULT=$?
if [ $RESULT -ne 0 ]; then
echo "failed $CMD"
exit 1
fi
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该示例使用受保护的分支,即预推钩的主题.
ord*_*rig 19
我宁愿在pre-commit-hook中运行测试.因为提交时已经记录了更改.仅推送和拉取已记录已更改的交换信息.如果测试失败,您的存储库中已经有一个"损坏"的版本.无论你是否推动它.
kub*_*ubi 13
如果您使用的是命令行,最简单的方法是编写一个运行单元测试的推送脚本,如果成功,则完成推送.
编辑
从git 1.8.2开始,这个答案已经过时了.请参阅上面manojlds的回答.
没有钩子,因为推送不是修改存储库的操作.
你可以在post-receive
钩子上对接收方进行检查.那是你通常拒绝传入推送的地方.在钩子中运行单元测试可能有点密集,但这取决于你.
为了记录,有一个Git 1.6的补丁添加了一个预推钩.我不知道它是否适用于1.7.
你可以运行像@kubi推荐的推送脚本,而不是弄乱它.你也可以把它变成一个Rake任务,所以它在你的回购中.ruby-git可以帮助解决这个问题.如果检查目标仓库,则只能在推送到生产仓库时运行测试.
最后,您可以在pre-commit
钩子中运行测试,但检查正在提交的分支.然后,您可以拥有一个production
分支,在接受提交之前需要所有测试通过,但您master
不关心.limerick_rake在这种情况下可能很有用.
归档时间: |
|
查看次数: |
61649 次 |
最近记录: |