【问题标题】:How do you merge two Git repositories when one is a subdirectory of the other without losing commit history?当一个是另一个的子目录时,如何合并两个 Git 存储库而不丢失提交历史记录?
【发布时间】:2017-11-23 08:17:23
【问题描述】:

当前文件夹结构

  • /root: 服务器代码存在这里
  • /root/client:客户端代码存在于此处(服务器目录中的子目录)。

当前 git 跟踪

  • 1 个 repo 跟踪 /root 中的服务器代码,它 gitignores 整个客户端目录
  • 1 个 repo 仅在 /root/client 中跟踪客户端代码。

问题

我正在尝试合并这两个存储库同时将一个作为另一个的子目录,结合两者的历史提交(不丢失任何内容)。

目前的调查结果

我发现在互联网上解决了很多情况,其中两个 repos 要么具有 1) 相同的文件,要么 2) 最终将在同一文件夹级别合并在一起,但在合并两个 repos 的情况下并没有发现太多是另一个中的子目录。

任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: git merge commit subdirectory repo


【解决方案1】:

此步骤将合并两个master 分支:

  1. 将客户端项目文件夹移动到服务器文件夹之外的文件夹(例如,tmp_client
  2. 在新的客户端项目文件夹 (tmp_client) 中创建一个名为 client 的新文件夹。
  3. 将所有内容从tmp_client 移至新的client 文件夹
  4. 添加并提交更改:

    git add -A . 添加更改

    git commit -m "Move content to client folder"

  5. 为服务器添加一个新的远程分支:

    git remote add server git_server_repo_url

  6. 从服务器主分支拉取更改

    git pull server master这将合并更改

  7. 将更改推送到服务器 git 存储库

    git push server master

PD:如果您想确保服务器分支中一切正常,您可以创建一个新分支,而不是将其推送到服务器的工作分支,然后合并新分支。

【讨论】:

  • 感谢您的回答;似乎它可能工作。我接受了 Edmundo 的建议,这为我解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
相关资源
最近更新 更多