52

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

  1. 在 local_branch 上做事,提交
  2. 获取源/主
  3. 重新定位 local_branch 以赶上来自 origin/master 的新内容

这一切都很好,但是我遇到的大多数建议都说不应该“推送”私有分支,在这些分支上定期执行变基。

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

在这种情况下,您对工作流程有何建议?

谢谢!

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

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

4

7 回答 7

52

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

将其添加为遥控器:

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

做备份:

git push --mirror bak

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

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

然后,当您想要进行备份时,只需运行“git bak”即可。您也可以将其放入 cron 作业中。

于 2009-05-30T17:26:12.107 回答
6

推动个人分支机构并没有错。通常不鼓励这样做,因为人们可能会根据您的分支开始工作,并且当您重新设置基准时,他们的更改会保持浮动。

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

于 2009-05-29T23:11:49.447 回答
5

另一种选择是将“local_branch”推送到“origin”存储库,但推送到该存储库中它自己的分支(不是“master”),即:

git push origin local_branch:local_backup

然后,当您准备好进行另一次备份时(并且在您进行了一些工作和变基之后),只需从原始存储库中删除备份分支,然后再将其推出:

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

git push origin local_branch:local_backup

这样,在“local_branch”从“origin/master”重新定位后,您就不会在推送“local_branch”时遇到问题。

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

于 2009-05-29T02:13:44.167 回答
2

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

于 2009-05-29T01:09:00.443 回答
2

推送到您正在变基的同一个分支没有任何问题。这些图表应该说明为什么这可以正常工作:

可以说这是分支 local_branch 并对其进行几次提交(C 和 D)后提交图的样子。自从您分支 local_branch 以来,其他人已向 origin/master 提交了一次 (E):

A -- B -- E [起源/主人]
      \
       \    
        \-- C -- D [local_branch]

然后在运行“git rebase origin/master”之后,提交图将如下图所示。"origin/master" 仍然是一样的,但是 "local_branch" 已经重新设置:

A -- B -- E [起源/主人]
           \
            \
             \-- 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 [起源/主人]
                     \
                      \
                       \-- F -- H [local_branch]

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

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

于 2009-05-29T01:38:56.140 回答
1

这就是我所做的。但是 - 这不是私人的。我这样做是为了与自己合作(可以这么说)。它让我可以在两个或多个盒子上的同一个分支上工作。如果其他人可以访问共享存储库,他们可以看到我在分支上所做的工作。当然,在我的家庭回购中,没有其他人可以访问,所以它仍然是私有的。在 github 上,全世界都可以看到我的东西。就像他们真的很在乎一样。;)

于 2009-05-29T02:01:09.543 回答
1

与其依赖 Dropbox 来同步git repo 的所有文件,我更愿意使用git bundle. 它只生成一个文件(包括您所有的私有分支),然后将该文件与 DropBox 同步。
请参阅“带有 Dropbox 的 Git

在“备份本地 Git 存储库”中,Yars提到了与 Dropbox 的同步错误。

于 2012-09-05T07:50:09.837 回答