如何让我的本地git副本自动保持最新版本?

时间:2013-10-15 06:55:19

标签: git bitbucket git-pull

我的系统中有很少的git存储库,其中包含一些c ++代码。向我的系统发送请求的用户正在获取从所有git存储库一起编译的二进制可执行文件。该系统的一个基本功能是发送从最新版本的源构建的二进制文件。为此,每次系统获取运行git pull --all的请求时,此命令都会花费大量时间。我希望避免在请求到达时运行pull命令,而是在提交新版本时使系统自动运行pull命令。怎么自动完成?

我能想到的唯一方法是每隔一秒左右定期查询git服务器并在每次远程存储库中有新的提交时运行pull命令,但我认为轮询是我最后的解决方案。 ;我正在寻找。即便如此,如何实施这种天真的民意调查计划以及我有哪些替代方案?

1 个答案:

答案 0 :(得分:2)

你可以在你的git服务器的裸存储库上放一个post-receive hook,以便该钩子转到一个非裸仓库并拉动。
它将保持这样一种工作树始终是最新的,在提交后提交。

您可以在this question中看到一个示例。

#!/bin/sh

unset $(git rev-parse --local-env-vars)
cd /path/to/non-bare.repo
git pull

如后续问题“Can I issue git rev-parse on remote repository without a local copy?”所示,torek提及:

  

您可以使用 git ls-remote 从遥控器(包括refs/heads/master)获取头部SHA-1。   假设你在本地拥有头部SHA-1,所有会告诉你的是“相同”或“不同”   如果它们不同,你就无法准确说明原因(尽管如果你走的是当地的转速,你可能已经足够了。)

     

比较git ls-remotegit rev-parse master的输出会告诉我本地仓库是否更新。

这可以是一种知道何时触发git pull的方法。