代码之家  ›  专栏  ›  技术社区  ›  MidnightLightning

从两台机器开发的Git存储库设置?

git
  •  5
  • MidnightLightning  · 技术社区  · 15 年前

    我刚开始使用Git,对与SVN的工作流差异印象深刻,但我遇到了一个结构/设置问题,文档似乎无法直观地解释如何设置,我想知道是否可能。

    我的设置是,我有几台从(台式机和笔记本电脑)开发的计算机,因此,为了更容易保持同步并为Git存储库提供备份,我在我的家庭Linux服务器上设置了一个“公共”的裸机存储库,我可以从台式机和笔记本电脑ssh进入。它不是真正公开的,因为它需要通过ssh访问该设备。

    当我在桌面上进行更改时,我的问题出现了,我可以轻松地将更改推送到服务器存储库(我有 mirror 为设置的标志 origin 远程存储库),并使用 gitx 我可以看到本地和远程状态看起来是相同的,并且我的每个提交都已记录到服务器上。

    问题是,当我切换到我的笔记本电脑(我很少使用它)时,Git存储库可能在服务器版本后面有几个提交,需要更新。我开始使用 git pull 为了在本地获取这些更改,而不是将服务器上的所有单个提交复制到本地存储库,它向本地存储库添加了一个新的“合并”提交,并且 吉特 显示此时在远程存储库分支中的合并。

    是否有命令/工作流允许我将本地存储库更新为远程存储库的确切状态(例如,如果我执行 git push --mirror 没有数据会丢失吗?我每次都要删除本地存储库吗? git clone 每次都是这样?

    目前没有其他人需要访问这个存储库,尽管在将来它可能成为供人们使用的公共存储库,所以不破坏这种可能性的答案将是值得赞赏的。

    编辑: 我的承诺确实包括重新调整主分支的分支;这是否就是触发 GIT拉力 要显示为合并的命令?是 --rebase 标记我需要什么?

    解决方案说明: 事实证明,我做了以下工作来建立我的存储库:

    • 使用笔记本电脑初始化Git存储库
    • 将笔记本电脑存储库推送到服务器(提交 )
    • 做了一个改变并在笔记本电脑上承诺 (笔记本电脑提交 B )
    • 桌面克隆服务器存储库(提交 A )
    • 在桌面上进行更改并提交(提交 C , D , e (包括再平衡分支)
    • 桌面推送至服务器(服务器快速转发至 e )
    • 当笔记本电脑从服务器拔出时,会导致合并(因为 无法快进到 e )
    • 笔记本电脑合并并将更改推送到服务器
    • 桌面现在也必须合并。

    因为一个额外的承诺是一个无意中的新手错误,它导致我认为这将永远是一个合并。在Xentac的建议下,我回去在笔记本电脑上发现,我进行了一次合并,但并没有被推到服务器上,这是罪魁祸首,一旦我把这三个都同步了, git pull --ff (仅强制快进合并)工作正常,并在执行合并之前警告我是否有不同步的内容。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Xentac    15 年前

    因为您在笔记本电脑的主分支中提交了不在服务器的主分支中的内容,所以每次服务器更改时,笔记本电脑都不能只更新主分支指针。这就是您创建合并提交的原因。

    如果要继续进行不存储在服务器上但只存储在笔记本上的更改,则需要 git fetch 然后 git rebase origin/master . fetch将从服务器下载提交,但不会更改本地分支,并且rebase将在服务器主分支(origin/master)的顶部重新创建膝上型计算机的主分支更改。

    不过,最好不要让这些承诺摇摆不定。难道不能将它们集成到整个代码库中,只拥有一个共同的历史吗?

        2
  •  1
  •   Ryann Graham    15 年前

    我打算建议使用 --ff 标志,但手册页上说这是默认行为。你可以试试 git pull --ff 看看有没有什么不同。

    如果您要进行合并提交,则建议您的笔记本电脑上有不在服务器上的提交。

    您的笔记本电脑是否像桌面一样设置为服务器的镜像?