如何从“原点”遥控器拉出每个分支并推送到我们的“备份”遥控器

时间:2014-05-30 05:07:12

标签: git backup

我创建了一个新用户,负责备份/同步“来源”。远程使用其他遥控器,我们称之为“备份”#39;我们的Origin远程位于我们的lcoa网络上,备份删除托管在bitbucket上。

我希望用户拉入Origin上存在的所有分支(所有功能分支等),一旦它已经提取了它们,它应该将所有内容推送到“备份”中。远程。

我需要哪些命令才能实现此目的?或者还有另一种方式吗?

2 个答案:

答案 0 :(得分:4)

假设您并非真的想要将远程origin分支机构合并到本地仓库中的本地分支机构,那么请注意"备份"当前状态的origin分支到Bitbucket仓库,你可以简单地使用它:

git fetch origin && git push backup refs/remotes/origin/*:refs/heads/*

执行以下操作:

  1. 获取origin上分支的当前状态,并将该状态存储在.git/refs/remotes/origin/下的远程跟踪分支(引用)中。

  2. 如果获取成功,则执行push命令(这是&&的用途)。推送使用refspec说"取.git/refs/remotes/origin/下的所有远程跟踪分支,并将它们推送到远程backup进入具有相同名称的分支。

    refspec的目标方,

    refs/heads/*
    

    与源端不对称,

    refs/remotes/origin/*
    

    因为冒号:的每一侧都与源和目标仓库相对:

    • 在源端(本地仓库),origin远程跟踪分支都存储在.git/refs/remotes/origin/下。

    • 在desitation方面(备份回购),本地分支存储在.git/refs/heads/下。这就是为什么refspec的右侧必须与之匹配。

  3. 修改后的替代解决方案

    您可以采用稍微不同的方式创建一个裸存储库作为" relay",并以这样的方式对其进行配置,使您只需要使用

    git fetch origin && git push backup --all
    

    以下是您需要做的事情:

    1. 创建一个裸仓库

      git init --bare
      
    2. 添加源和目标遥控器

      git remote add origin <url-or-path-to-your-origin-remote>
      git remote add backup <bitbucket-repo-url>
      
    3. 修改relay repo以获取origin遥控器的配置。

      git config remote.origin.fetch '+refs/heads/*:refs/heads/*'
      
    4. 现在,中继存储库已正确配置为从远程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文件,并为您自动执行此操作。