如何在git中备份私有分支

时间:2009-05-29 01:01:07

标签: git merge workflow rebase dropbox

我有一个本地分支,用于git中的日常开发工作。我的工作流程是:

  1. 在local_branch上执行,提交
  2. 获取origin / master
  3. 重新启动local_branch以赶上来自origin / master的新东西
  4. 一切正常,但我遇到的大部分建议都说不应该“推”私人分支机构,定期执行rebase。

    这里的问题是,在这种情况下,本地分支不会备份到服务器,保存工作的唯一方法是将其合并回“pushable”分支(即origin / master)

    在这种情况下,您对工作流程的建议是什么?

    谢谢!

    更新:我意识到我的原始要求之一(避免使用外部实用程序)是不必要的限制。

    我目前的解决方案是将所有存储库存储在云同步文件夹中 - 这样我就可以免费获得备份。

7 个答案:

答案 0 :(得分:48)

我使用--mirror选项并推送到个人备份存储库:

将其添加为遥控器:

git remote add bak server:/path/to/backup/repo

进行备份:

git push --mirror bak

这将自动使您的备份存储库看起来像您的活动存储库 - 将根据需要创建,删除,更新(甚至强制/非快速)分支。您也可以为此创建别名:

git config alias.bak "push --mirror bak"

然后,当你想做一个备份时,只需要运行“git bak”。你也可以把它扔进一个cron工作。

答案 1 :(得分:4)

另一种选择是将“local_branch”推送到“origin”仓库,但将其推送到该仓库中的自有分支(不是“主”),即:

git push origin local_branch:local_backup

然后,当您准备好进行另一次备份时(以及在进行了一些工作和重新定位之后),只需从原始仓库中删除备份分支,然后再将其推出:

git push origin :local_backup< ===从原点删除分支

git push origin local_branch:local_backup

这样一来,在“origin / master”重新命名后,你就不会遇到“local_branch”的问题。

如果删除备份分支会让你感到紧张(直到你最终将你的工作提交给“master”),你总是可以继续使用新名称推送到新的分支(例如“local_backup1”,“local_backup2”)等等。)

答案 2 :(得分:4)

推动个人分支是没有错的。通常不鼓励这样做,因为人们可能会根据您的分支开始工作,而当您进行变基修时,他们的变化就会浮动。

我所做的是使用前缀来表示“这是我的分支,自行承担风险”,例如: fc-general-cleanup

答案 3 :(得分:2)

推送到相同的分支是没有错的。这些图表应说明为什么这样可行:

让我们说这是在你分支local_branch并对它做了几次提交(C和D)之后提交图的样子。因为你分支了local_branch:

,其他人已经对origin / master做了一次提交(E)
A -- B -- E  [origin/master]
      \
       \    
        \-- C -- D  [local_branch]

然后在运行“git rebase origin / master”之后,提交图将看起来像下一个图。 “origin / master”仍然是相同的,但“local_branch”已被重新定位:

A -- B -- E  [origin/master]
           \
            \
             \-- C -- D  [local_branch]

在这个阶段,如果你做“git push origin local_branch:master”,那么它将导致一个简单的快进。 “origin / master”和“local_branch”将完全相同:

A -- B -- E -- C -- D  [origin/master],[local_branch]

现在你可以自由地在“local_branch”上做更多的工作了。最终你可能得到这样的东西:

A -- B -- E -- C -- D -- G -- I [origin/master]
                     \
                      \
                       \-- F -- H [local_branch]

请注意,这看起来很像起始图。你可以一遍又一遍地重复这个过程。

你应该避免推送到一些其他分支,一个你没有退缩的分支。这就是你会遇到麻烦的地方(对于另一个分支,看起来你的“local_branch”历史突然被重写了,在你从“origin / master”重新定位之后)。

答案 4 :(得分:1)

您是否可以设置另一个远程存储库,将所有分支机构推送到?另一件需要考虑的事情就是备份本地机器上的所有内容(重要),包括git repo。

答案 5 :(得分:1)

Here's what I do。但是 - 这不是私密的。我这样做是为了让我可以与自己合作(可以这么说)。它允许我在两个或更多盒子上的同一分支上工作。如果其他人有权访问共享仓库,他们可以看到我在分行上所做的工作。当然,在我的房屋回购中,没有其他人可以访问,所以它仍然是私有的。在github上,全世界都可以看到我的东西。就像他们真的在乎。 ;)

答案 6 :(得分:1)

我宁愿使用 git bundle ,而不是依赖Dropbox来同步所有 git repo的文件,而只使用 {em> one < / em>文件(包括所有私有分支),并使用DropBox同步该文件 请参阅“Git with Dropbox

在“Backup a Local Git Repository”中,Yars提到与Dropbox存在同步错误。