【问题标题】:Git How to make a master repo that tracks two other reposGit 如何制作一个跟踪其他两个 repo 的主 repo
【发布时间】:2017-08-19 10:48:45
【问题描述】:

我们正在开发一个应用程序并使用 Github 来保存和版本控制我们的代码。

目前,我们是 2 个人,每个人都在开发一个单独的 repo(RepoARepoB)。

我们决定最好有 1 个主存储库来保存完整的应用程序,但我们也希望继续自己处理单独的存储库。 我按照 this 教程将我们的两个存储库合并到一个新的主存储库 (RepoC)。

一切正常,但现在我们遇到了一个问题,即对 RepoARepoB 的更改不会反映在 RepoC 中,反之亦然。

所以我想知道...有什么方法可以告诉 RepoC 到“trackRepoA 和 RepoB 进行更改,并在需要时与它们同步。

如果上述方法不可行,是否至少有一种方法可以让我们为自己的 repos 做出贡献,然后执行类似“git fetch RepoA, git fetch RepoB " 在我们的主 RepoC 上,以便它可以反映我们所做的更改。

【问题讨论】:

  • 你走错了方向。您应该在一个存储库上工作,您的本地更改仍然是您自己的,但在推回远程时您应该经常集成彼此的更改。如果你真的愿意,你可以使用分支,但只有你们两个可能没有必要甚至没有帮助。

标签: git github synchronization git-remote


【解决方案1】:

理论上,一个 repo 可以通过不同的远程和分支跟踪无限数量的 repo。

假设 RepoA 的 url 是 git://host/repoa.git,而 RepoB 的 url 是 git://host/repob.git。每个都有三个分支,例如 masterfeaturerelease

在 RepoC 中,我们可以创建两个遥控器。

git add remote origina git://host/repoa.git
git add remote originb git://host/repob.git

然后

git fetch --all

可以跟踪两个 repos 中的所有分支。

但是,这种方法存在一些问题。

  1. 您只能签出其中一个分支,这意味着您不能在同一工作树中拥有 2 个 repos 代码。
  2. 当您从远程跟踪签出/创建本地分支时 分支,您需要仔细命名它们,以免混淆。
  3. 当 RepoA 和 RepoB 有同名标签时,只有其中一个 可以提取到 RepoC 中。

由于您已将它们合并到 RepoC,您可以创建两个遥控器并同时跟踪它们。但是为什么不使用两个 repo 来跟踪它们呢?

【讨论】:

  • 为什么不呢?.. 因为我对 git 没有那么丰富的经验,但仍在学习如何使用它。我尝试 git fetch 我的 repos,它确实获取了一些更改,但是我如何让它们保存在 Repo C 中(gitt add ./git commit /git push 都说我的 repo 没有新的更改)
【解决方案2】:

看看 git 子模块功能:https://git-scm.com/book/en/v2/Git-Tools-Submodules

问候

安多尼

【讨论】:

  • 我认为在使用子模块之前你应该三思而后行,因为这并不像我们想象的那么容易,尤其是当开发人员没有 git 经验时。在选择此解决方案之前,我强烈建议您考虑一下 monorepo 是否不是解决方案...
  • 感谢你们俩。我将阅读 git 子模块和 monorepo :)
猜你喜欢
  • 2013-06-05
  • 2020-11-18
  • 2011-06-07
  • 2018-10-13
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多