Git:从存储库中自动提取?


90

有什么方法可以设置git,以便它监听来自远程仓库的更新,并在发生任何变化时将其拉出?用例是我想使用git部署Web应用程序(以便获得部署的应用程序的版本控制),但想将“中央” git存储库放到Github而不是Web服务器上(Github的界面太好了) 。

有没有人得到这个工作?Heroku是如何做到的?我的Google-fu无法给我任何相关结果。

Answers:


48

Git具有“钩子”,可以在其他动作之后执行的动作。您似乎正在寻找的是“接收后挂钩”。在github管理员中,您可以设置一个接收后URL,每次有人推送到您的存储库时,该URL都会被命中(有效负载包含有关所推送内容的数据)。

对于它的价值,我认为自动拉并不是一个好主意-如果在您的分支中出现了问题,该怎么办?capistrano对于此类事情,我会使用类似的工具(或等效工具)。


10
我计划的用例是为开发人员“测试和搞乱”阶段创建一个单独的存储库/分支,并有一个特殊的“推向生产”存储库,只有在我确定一切正常后,才推送到该存储库。我基本上使用Git处理rsync可以做到的,除了它保留已部署的所有版本的日志,而且我很容易能够回滚到以前的版本。相对于像capistrano这样的更顽固的东西,优点是我不需要为现在的小项目学习一个全新的工具。
李浩义

Webhook身份验证增加了额外的安全性问题和复杂性,因此基于请求的解决方案仍然具有其优势。可以使用标签来完成发行版本控制,以避免意外部署。
lz96

21

在unix-likes上,您可以在计算机上创建cron作业,该作业称为“ git pull”(每天,每周或任何时间)。在Windows上,您可以使用任务计划程序或“ AT”命令执行相同的操作。


3
不是使用Git的正确方法。
2015年

26
@deepdive为什么不呢?假设您家中有一个小Rasperry Pi,并且没有可用的静态IP。您还有什么其他选择可以执行cron或运行作业?
kaiser

2
这不是一个好主意。他希望更改在推送后立即应用。
boi_echos '16

10
OP专门要求一种侦听远程仓库中更新的方法,在发生任何更改时将其拉出。这种解决方案会经常从存储库中拉出,因此要使其生效,间隔必须非常短,从而导致大量的冗余拉取请求。
波阿斯

3
一种无需更改cron标签的快速方法:while true; do git pull; sleep 10; done。这将git pull每10秒执行一次...
JakeD

3

有诸如Jenkins或Bamboo的持续集成程序,可以检测提交并触发构建,测试,打包和部署之类的操作。它们可以满足您的要求,但是它们的依赖项繁重,难以配置,最后它们可能会定期对git仓库进行检查,其效果与每分钟通过cron调用git pull一样。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.