同步两个远程 git 存储库

Synchronizing two remote git repositories

假设,我有以下设置:

  1. 有某个项目的git库(暂且称之为"upstream")(实际上它是一个SVN库的镜像,但我希望它不会引入任何并发症)。我对它只有只读访问权限(当然,我无权访问服务器以安装任何挂钩等)。
  2. 我还有一个个人 Git 存储库,可以通过 SSH 访问。我们称它为"mirror"。它应该包含我个人分支的上游副本。

我想将所有更新从上游复制到镜像(大概使用一些 cronjob 或者,比如说,Jenkins 中的周期性任务,即复制应该从不同的机器完成,而不是镜像所在的机器)。我的分支总是与上游的分支不同,所以不会发生冲突(否则脚本应该失败,但它不能覆盖任何本地分支)。应更新所有 "heads"。

我发现这个 script 几乎可以满足我的需要,但它似乎只适用于 "symmetric" 情况(即写入所有回购)并修复它可能需要太多 "diving" 变成 git man.

我会很感激一个有效的解决方案(当然我不希望有人会为我写另一个 300 行的脚本,但也许它已经写好了,或者它实际上比我想象的更容易)或一些提示修复上述脚本。

是的,您找到的脚本看起来不错,但考虑到您只想拉取 1 个存储库,它对于您的需求来说有点太大了。您应该能够用更少的代码行来完成它。

假装这是一个新项目,这就是您 运行 在将托管同步脚本的服务器上的项目:

git clone git@github.com:some_user/some_project.git
git remote add mirror ssh://git@git.some_url.com/some_project.git

这将执行只读应用程序的初始克隆。然后,它将您的备份位置设置为另一个名为 "mirror" 的遥控器。其实你可以随便叫它什么。

然后,这里有一个 bash 脚本,仅在原点更改时更新您的同步位置。你可以把它放在一个简单的 cron 作业上:

#! /bin/bash
cd /path/to/git/repo/
if [ "`git pull origin`" == "Already up-to-date." ]
then
    echo "Nothing to update!"
else
    git push mirror
fi

我在我的 Github 和我的私人 Gitlab 服务器上的一个项目上测试了这个。成功了!