如何将两个 git 存储库作为一个存储库进行管理,但又保持独立?

Posted

技术标签:

【中文标题】如何将两个 git 存储库作为一个存储库进行管理,但又保持独立?【英文标题】:How to manage two git repos as a single repo, yet stay separate? 【发布时间】:2021-12-01 07:40:03 【问题描述】:

我已经看到其他关于此的问题,但无法将它们与相同。

我有一个从GitHub 克隆的主题,它成为master 分支。

然后我在最初克隆的主题中为我的网页内容创建一个新的本地分支,并且我想将我的页面内容检查到我自己在 GitLab 上的存储库中,因此我为内容分支添加了远程存储库。此时主遥控器与分支遥控器不同。

通过不将我的内容分支合并到主控,我总是可以从更新网络主题的主控远程拉取,然后切换到内容分支并开发/更新我的内容。所以它们是分开的,没有合并的意图。

然后问题就变成了……为了运行GitLab Pages,站点是从主分支生成的。但是我无法将我的内容分支合并到主分支 1)因为主分支有指向其他地方的远程仓库(原始 GitHub 主题仓库),以及 2)如果我可以从主分支中提取更新,它将覆盖我的内容分支中的更改.

所以我的要求是:

1) I can keep the remote theme seperate from my own content.
2) Add my own content to the theme and develop.
2) Join the theme and the content into a repo on GitLab for Pages to work.
3) Later update just the theme, and then overlay my content on the new theme and continue to develop. 

有人想过如何正确组织这个吗?

【问题讨论】:

没有什么能阻止你的 GitLab 主分支与你的 GutHub 主分支不同。我认为您只需将GitHub/master 合并到GitLab/develop 中,就像在页面上工作一样,然后将GitLab/develop 合并到GitLab/master 以发布到GitLab Pages。 在您的沙箱中创建一个名为 publish 的本地分支,将 GitLab/master 作为其上游,然后合并到 publish 并推送它应该会更新您的 GitLab 页面。 【参考方案1】:

如果我正确理解您的情况,发布到您的 GitLab 页面需要将发布就绪版本推送到您的 GitLab 存储库中,名称为 master

为了实现这一点,您需要记住的是,您的 GitHub 和 GitLab 存储库上的 master 分支不需要相关,即使您有一个指向两个遥控器的沙箱,正如您所描述的那样.

要创建一个本地分支,我们将其命名为publish,它指向您GitLab 的master 分支,并将其与您的模板在GitHub 上的主分支区分开来,您可以这样做:

git checkout develop
git checkout -b publish
git branch -u gitlab/master

现在,当您在本地分支 publish 上并将所有内容合并到您希望发布的状态中时,运行 git push 它将使用您本地的 publish 分支更新 gitlab/master

假设:

您在 GitLab 上调用了您的第二个遥控器,gitlab,例如,通过运行:

git remote add gitlab URL_TO_YOUR_GITLAB_REPO

gitlab 遥控器上已经有一个 master 分支。

您之前已从 gitlab 获取,例如,通过运行 git fetch gitlab,以便您的沙盒具有对 gitlab/master 的引用。

【讨论】:

让我看看我是否理解正确。在这种情况下,我创建了一个空仓库,然后创建了三个分支(称为主题、开发和发布)。然后进入发布和1)合并主题,然后2)合并内容,然后推送到GitLab master? 是的,听起来不错。 theme 可能会跟踪 GitHub 主分支。我不确定您希望 content 分支住在哪里,但我在回答中称它为 develop。如果您希望主题、内容和发布回购都分开,它甚至可以在第三个回购中。我的回答中的publish 就像你说的那样,所有内容都合并发布。 问题:您是否曾经将theme 合并到content 中,或者两者完全独立,只组装到publish 中?无论哪种方式,我的答案应该仍然有效。 我只将内容(开发)合并(覆盖)到主题上。该主题位于 GitHub 上的远程仓库中。我抓住它,然后进行更改,但这些更改(开发)是独立的(因为它们在本地运行时需要与在 GitLab Pages 中运行时不同的设置)。否则,主题更新会覆盖我的开发。我正在处理它。

以上是关于如何将两个 git 存储库作为一个存储库进行管理,但又保持独立?的主要内容,如果未能解决你的问题,请参考以下文章

单个目录指向多个git存储库

如何合并两个 Git 存储库?

如何合并两个 Git 存储库?

如何将本地文件夹连接到 Git 存储库并开始对分支进行更改?

如何将不同的文件提交到两个不同的SVN(或git)存储库?

如何将 Git 存储库转换为嵌套在另一个(父)Git 存储库中的子模块?