1

我的系统很少有 git 存储库,其中包含一些 c++ 代码。向我的系统发送请求的用户将获得从所有 git 存储库一起编译的二进制可执行文件。该系统的一个基本功能是发送从最新版本源构建的二进制文件。为了做到这一点,每次系统收到它运行的请求时git pull --all,这个命令都会花费很多时间。我想避免在请求到达时运行 pull 命令,而是让系统在提交新版本时自动运行 pull 命令。如何自动完成?

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

4

1 回答 1

2

您可以在 git 服务器的裸仓库上放置一个接收后挂钩,以便该挂钩转到非裸仓库并拉取。
它将以这种方式保持工作树始终是最新的,在提交后提交。

你可以在这个问题中看到一个例子。

#!/bin/sh

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

如后续问题“我可以在没有本地副本的情况下在远程存储库上发出 git rev-parse 吗? ”中所示,torek提到:

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

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

这可能是一种知道何时触发git pull.

于 2013-10-15T10:20:43.000 回答