假设我有以下设置:
我想将所有更新从上游复制到镜像(可能是使用一些cronjob,或者说,在Jenkins中使用周期性任务,即复制应该从与镜像所在的机器不同的机器完成)。我的分支将始终与上游的分支不同,因此不应发生冲突(否则脚本应该失败,但不能覆盖任何本地分支)。所有“头”都应该更新。
我发现这个script几乎可以满足我的需求,但它似乎只适用于“对称”情况(即写入所有回购)并修复它可能需要太多“潜水”到git man
我很欣赏一个有效的解决方案(当然我不希望有人会为我写另一个300行的脚本,但也许它已经写好了,或者它实际上比我想的更容易)或一些提示修复上面提到的脚本。
答案 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服务器上的项目上测试了这个。它运作成功!