0

我有以下场景:两个远程裸存储库 repo1 和 repo2。他们应该共享一个分支,即事实上有关于特定分支的定期推送到 repo1。这些更改应同步到 repo2。

我认为,同步意味着类似于基于钩子或某物的自动拉动。像这样。

您有什么想法,如何满足上述要求?

非常感谢!

4

1 回答 1

2

设置一个将转发更改的挂钩。您可以从四个挂钩中选择:pre-receiveupdate和。post-receivepost-update

前两个在推送期间运行,因此它们会减慢速度,但可以中止它。后两者在推送之后运行,因此用户不必等待它们,但它们不能中止它并且需要单独的方法来通知错误。

代码将大部分相似并且非常简单。简单post-update(文件hooks/post-updatein repo1)变体将是:

#!/bin/sh
for ref; do
    if [ refs/heads/branch-to-mirror = "$ref" ]; then
        git push repo2 "$ref"
    fi
done

pre-receive/update需要说明,因为git push repo2 $newsha:branch-to-mirror本地分支尚未更新。条件当然可以不同;任何可以说明分支应该被镜像到repo2.

如果无法转发到,则会update中止推送到的钩子是:repo1repo2

#!/bin/sh
set -e
if [ refs/heads/branch-to-mirror = "$1" ]; then
    git push repo2 "$3:$1"
fi

用于将set -e错误传播到脚本之外。或者|| exit 1,可以添加到应该传播其失败的命令中。这个钩子会为每个更新的 ref 调用一次,所以没有循环。参数为 ref 名称、旧 SHA1 和新 SHA1,并且推送需要使用新 SHA1,因为本地 ref 尚未更新。

于 2013-01-02T09:29:17.763 回答