如何将 2 台机器上的 2 个本地 git 存储库合并为一个?

Posted

技术标签:

【中文标题】如何将 2 台机器上的 2 个本地 git 存储库合并为一个?【英文标题】:How to merge 2 LOCAL git repositories on 2 machines into one? 【发布时间】:2016-07-20 23:11:48 【问题描述】:

我一直在分别开发一个项目的两个部分,我想将它们合并。我没有将它们中的任何一个推送到远程服务器,但我想要。

要合并的 2 个本地仓库:

Linux PC (SW) 上的软件 Windows PC (FW) 上的微控制器固件

我如何最终得到具有这种结构的单个存储库?

项目
|
+----fw
|
+----sw

如果可能,保留 SW 和 FW 的历史记录?

This article 解释了类似的情况。但我想知道我是否可以这样做,只设置一个遥控器,例如:

    从 Linux 推送 SW 到远程 将 SW 从 Windows 克隆到新目录中 创建一个名为 merge-fw 的分支 从本地目录拉FW → 语法是什么 对于git-pull 中的 repository 参数??? 将merge-fw 合并到master

谢谢。

【问题讨论】:

【参考方案1】:

让我们假设 Windows 存储库暂时成为主存储库。

在 Linux 存储库中

确保您的所有源都位于sw 目录下,如果需要move files 和git commit 这些更改。新建分支merge-to-windows

    mkdir sw
    mv !(sw) sw # needs extglob set (shopt -s extglob)
    git add . && git commit -m "move all sources to sw"
    git checkout -b merge-to-windows

在 Windows 存储库中

    确保所有源都位于fw 目录下,如果需要移动文件和git commit 这些更改

    将新远程添加到指向您的 Linux 存储库的 Windows 存储库

    git remote add linux <path to your linux machine>
    

    使用

    获取您的 Linux 存储库的当前状态
    git fetch linux
    

    合并你的 linux repo 的 merge-to-windows 分支

    git merge linux/merge-to-windows
    

    现在您在 Windows 上的 master 分支保存了 swfw 的历史记录。我们可以将这个状态推回到 Linux 上的master 分支

    git push linux master:master
    

完成

【讨论】:

太好了,我工作了!虽然有点离题,但这个related post on git remote add 语法可能会帮助像我这样的菜鸟。

以上是关于如何将 2 台机器上的 2 个本地 git 存储库合并为一个?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 2 台机器上使用相同的 ssh 私钥/公钥对来访问 git 存储库?

如何设置公共 git 存储库?

如何将不同机器上的 2 个不相关的 svn 存储库合并到一个存储库中?

如何将本地git存储库推送到svn

如何将远程仓库分支添加到本地仓库

如何将多个 Git 提交(已推送)还原到已发布的存储库?