1

假设我在 github/bitbucket 有一个集中的 git 存储库,我在笔记本电脑或大学的工作站上编写代码。在这两台机器上同步我当前的代码工作副本最轻松的方法是什么,以便我总是可以选择从我离开的地方继续?

我已经阅读了 SO 上的其他线程,它们主要涉及提交新分支和拉/使用 USB 密钥/保管箱。但是由于 Dropbox 可能会破坏 git repo,有没有一种方法可以让我始终无缝地从中断的地方恢复?(两台机器都可以访问互联网)。

这是我能想到的选项,请随时添加。

  1. 在集中式 repo 上有一个正在进行中的分支,并在您想要合并时进行 rebase。

    优点:

    • 吉特
    • 大多数冲突将由 git 自动处理。

      缺点:

    • 不是自动的。有时您可能会忘记执行此操作,并且无法访问您的最新更改
    • 如果许多开发人员都遵循这种做法,分支列表将过于混乱。
  2. 对于每个项目,都有一个私有 repo 来同步进行中的工作分支。也许设置 vim 挂钩以自动提交到该分支

    优点:

    • 吉特
    • 公共回购中没有混乱
    • 可以在每次保存时设置自动提交和推送,因为它是私有的并且没有人看到它。

    缺点:

    • 您最终将获得每个项目的一个私人仓库。(如果你有自己的 git 主机可能不是问题)
    • 如果您没有互联网并编辑文件,Dropbox 将创建两个副本,您必须手动解决冲突
  3. 为每个项目创建一个包,使用 Dropbox 同步包文件夹

    优点:

    • 可以设置自动提交 wip 分支,dropbox 同步捆绑文件夹。

    缺点:

    • 如果您没有互联网并编辑文件,请推送到捆绑包,保管箱将创建捆绑包的两个副本,您必须手动解决冲突
  4. 在 Dropbox 上存储项目文件夹

    优点:

    • 在最好的情况下,它是真正无缝的。
    • 只要您有互联网,您就可以开始以与您离开时相同的状态开始编辑您的代码。

    缺点:

    • Dropbox 可能会损坏 git 数据库。
    • 如果您没有互联网并编辑文件,Dropbox 将创建两个副本,您必须手动解决冲突
  5. 找到一种将多个存储库存储在 bitbucket 上的单个私有存储库中的方法,并具有类似于选项 2 的设置。

我认为这可能是最好的解决方案,有人对我如何做到这一点有建议吗?

4

3 回答 3

3

[是的,就是这么简单...] GitHub 上的共享位置将是您所有本地开发机器的“起源”。设置原点后,您的日常机器对机器工作流程基本上是:

== 机器-1

# edit
$ git commit ...
$ git push origin <branch>

== 机器 2

$ git pull origin <branch>
# edit
$ git commit ...
$ git push origin <branch>

== 机器-1

...

如果您在当天的机器上开始工作时忘记了“git pull origin”,那么当您推送时,您可能会看到您将解决的冲突。

如果您希望历史记录干净,则为每个功能创建一个分支,在您每天更换机器时在该功能分支上频繁更新,然后,当您将功能合并到主(或任何地方)rebase 以获得清白的历史。请注意,无论如何,您通常会在合并功能时重新设置基准;您只需处理“额外的”日常提交即可。

于 2013-03-12T03:55:47.830 回答
1

您可能可以编写一个为您调用 git 命令的脚本(可能是您选择的节点或脚本语言)。您可能想要使用的命令(我将其用于与您类似的工作流程)@see如何从远程 git 存储库中提取并覆盖本地存储库中的更改

于 2013-03-12T03:55:06.193 回答
1

我赞成其他线程的建议:git 能够很好地做到这一点,所以请使用它提供的设施。它可以非常轻量级:在分支上完成工作,并在需要切换机器时提交/推送到中央仓库。如果您在这些提交消息前加上“squash!”,那么您以后可以使用git rebase -i --autosquash将您的分支重新定位到其父级(也许是master),并且这些提交将自动标记为 squash(即消失),因此您不会有任何噪音。当然,如果您已经在使用 rebase 工作流程,这将最有效。

于 2013-03-12T03:48:58.570 回答