同步两个远程git存储库

时间:2015-04-09 03:57:45

标签: git bash synchronization

假设我有以下设置:

  1. 某个项目有一个git存储库(我们称之为“upstream”)(实际上它是SVN存储库的镜像,但我希望它不会引入任何复杂性)。我有只读权限(当然,我无法访问服务器来安装任何挂钩等)。
  2. 我还有一个个人Git存储库,可以通过SSH访问。我们称之为“镜像”。它应该包含我个人分支的上游副本。
  3. 我想将所有更新从上游复制到镜像(可能是使用一些cronjob,或者说,在Jenkins中使用周期性任务,即复制应该从与镜像所在的机器不同的机器完成)。我的分支将始终与上游的分支不同,因此不应发生冲突(否则脚本应该失败,但不能覆盖任何本地分支)。所有“头”都应该更新。

    我发现这个script几乎可以满足我的需求,但它似乎只适用于“对称”情况(即写入所有回购)并修复它可能需要太多“潜水”到git man

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

1 个答案:

答案 0 :(得分:1)

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

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

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

这将执行只读应用程序的初始克隆。然后,它将您的备份位置设置为另一个名为“镜像”的远程。你实际上可以把它称为任何你喜欢的东西。

然后,这是一个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服务器上的项目上测试了这个。它运作成功!