我创建了一个新用户,负责备份/同步“来源”。远程使用其他遥控器,我们称之为“备份”#39;我们的Origin远程位于我们的lcoa网络上,备份删除托管在bitbucket上。
我希望用户拉入Origin上存在的所有分支(所有功能分支等),一旦它已经提取了它们,它应该将所有内容推送到“备份”中。远程。
我需要哪些命令才能实现此目的?或者还有另一种方式吗?
答案 0 :(得分:4)
假设您并非真的想要将远程origin
分支机构合并到本地仓库中的本地分支机构,那么请注意"备份"当前状态的origin
分支到Bitbucket仓库,你可以简单地使用它:
git fetch origin && git push backup refs/remotes/origin/*:refs/heads/*
执行以下操作:
获取origin
上分支的当前状态,并将该状态存储在.git/refs/remotes/origin/
下的远程跟踪分支(引用)中。
如果获取成功,则执行push命令(这是&&
的用途)。推送使用refspec说"取.git/refs/remotes/origin/
下的所有远程跟踪分支,并将它们推送到远程backup
进入具有相同名称的分支。
refspec的目标方,
refs/heads/*
与源端不对称,
refs/remotes/origin/*
因为冒号:
的每一侧都与源和目标仓库相对:
在源端(本地仓库),origin
远程跟踪分支都存储在.git/refs/remotes/origin/
下。
在desitation方面(备份回购),本地分支存储在.git/refs/heads/
下。这就是为什么refspec的右侧必须与之匹配。
您可以采用稍微不同的方式创建一个裸存储库作为" relay",并以这样的方式对其进行配置,使您只需要使用
git fetch origin && git push backup --all
以下是您需要做的事情:
创建一个裸仓库
git init --bare
添加源和目标遥控器
git remote add origin <url-or-path-to-your-origin-remote>
git remote add backup <bitbucket-repo-url>
修改relay repo以获取origin
遥控器的配置。
git config remote.origin.fetch '+refs/heads/*:refs/heads/*'
现在,中继存储库已正确配置为从远程origin
获取本地分支,并将其作为本地分支存储在其自身中,并带有一个简单的
git fetch origin
此外,由于他们现在已经存储在.git/refs/heads/
下的本地分支机构,因此您可以使用简单的
backup
遥控器
git push backup --all
答案 1 :(得分:0)
在这种情况下,为什么不使用推拉来备份git repoistory。
git clone other / repo.git ---这将备份其远程的每个存储库。
或
设置repo:git clone --mirror user @ origin:/repo.git
之后刷新备份:克隆位置的git远程更新。
您可以使用bash命令创建一个sh文件,并为您自动执行此操作。