了解如何将一个 GIT 存储库插入另一个存储库

Understanding how to insert one GIT repo into another

我希望有人能够解释(尽可能使用简单明了的英语!)并在合并 GIT 存储库时为我指明正确的方向。我知道这是一个经常被问到的问题,但我完全迷失了这个问题。

我有一个 GIT 存储库(既有本地的也有远程的——远程版本在 Bitbucket 上)让我们称之为 Master,它使用四个常见的 Gitflow 分支。现在我有另外两个回购协议,一个处理普通文件,我正在处理(称为回购协议 A),另一个正在由同事处理和更新(回购协议 B)。回购 A 托管在 Bitbucket 上,而 B 托管在 Github.

这三个 Repo 的文件结构都略有不同。假设原始文件具有以下文件夹结构:

\app\controller
\app\assets
\app\models
\app\views

现在我需要获取 Repo B 的内容并将其添加到 \app\models 中的现有内容中,这样 \app\models 中的现有文件不会被替换,并且在那个 Repo B 仍然单独存在,以后对它的任何更新都可以轻松地拉入我的 Master Repo。 Repo B 也有 controller 和 views 文件夹,但这些都是空的。

第二个 repo (A) 需要拉入 \app\views\repoA 主文件夹中当前不存在的文件夹中。同样,Repo A 仍然需要单独存在,因为它是独立工作的,所以我需要将更改拉下来。目前 Repo A 中的文件夹结构很简单 \htmlfiles 其中包含需要在 \app\views\repoA

中结束的文件

在这两种情况下,为了保持审计试验和文档的正确性,理想情况下我需要尽可能完整地保持完整的评论和提交历史记录。对于这两个 Repos,我可能需要在 Master Repo 中进行修改,并将它们也推送回远程原始 Repos。

现在我收集到有关于分叉和子树的选项,但我完全不知道它们是如何工作的,并且很快就到了我不想到达的地步拉下 ZIP 文件并手动更新内容!

谁能帮我指明正确的方向,或者用简单的语言解释做某事的最佳方法?我假设可以用 GIT 完成所有这些,而且我要求的不多!

我想了解不同的 GIT 选项如何工作以及它们的作用,以便我将来能够充分使用它!

如有任何帮助,我们将不胜感激。

合并差异很大的代码库可能需要大量工作。

因为你的两个 repo 是独立构建的,在 structure/layout 上有所不同,而且你保留 repo B 的历史不一定是必要的,我建议如下:

  1. 让 Repo A 进入明智状态。
  2. 从存储库 A 创建功能分支
  3. 将 Repo B 中的代码手动合并到功能分支的代码库中,一次提交一个更改
  4. 合并后,构建并测试一切是否符合您的喜好
  5. 检查你的主分支
  6. Merge/squash 你的功能分支到 master

下一次:我建议让所有团队成员自己工作 branches/forks,但 RI/FI 定期与主仓库一起工作 - 至少每 2-3 天一次,如果代码更改则更频繁很快。以经常合并的小变化为目标,而不是跨越多天(或更长时间)的大的不同变化。