首页 > 解决方案 > Git 公共子存储库

问题描述

我有一个私人 git 存储库,其中有我自己的项目和一些 3rd 方项目。这是它的粗略结构:

Root
|- My Project
|  |-- myproject
|      |-- __init__.py
|      |-- __main__.py
|  |-- tests
|  |-- setup.py
|- Project1
|- Project2

但是,如果我想将它推送到公共存储库,我不能包含第 3 方项目。所以我必须将我的项目以不同的状态推送到公共存储库。

到目前为止,我已经想到了一些解决方案,但它们都有各自的缺点:

  1. 使用一个public分支,我只添加我自己的代码文件。然后我将分支推public送到公共仓库,并将master分支推送到我的私人仓库。但是,此解决方案会导致公共存储库包含一个文件夹,而不是看起来像一个常规的 Python 项目(例如参见numpy 的 git 存储库)。我想要一个My Project作为公共仓库根目录的解决方案。

  2. 检查public分支,然后移动My Project到根并删除其他所有内容。使用这种方法,我不确定如何从master分支合并开发。

  3. 使用 git 子树。但是,这似乎与使用单独的分支存在相同的问题。

  4. git init通过在内部运行来使用实际的子存储库MyProject。这解决了 repo root 的问题,但是当MyProject目录是 CWD 时,它使公共存储库成为默认存储库。因此git(以及我使用的依赖 git 的开发工具中的任何版本控制模块,例如 VSCode 的)将提交并推送到公共存储库而不是私有存储库。我希望将大部分开发推送到私人仓库,只偶尔(故意)推送到公共仓库。

  5. 使用子模块。但是,按照我的理解,子模块适用于您想要独立开发存储库的一部分时使用,这与我想要实现的目标相反(我想将我的存储库作为一个整体开发,并且只是偶尔将其中的一部分推送到公共回购)。此外,子模块将需要对私有仓库的后续克隆进行特定处理。最后,我读到子模块很少是一个好主意(例如参见https://www.atlassian.com/git/tutorials/git-subtree的第一句话)。

有没有一种解决方案可以让我将本地存储库连接到 2 个远程存储库(私有和公共),例如:

标签: gitgit-branchgit-submodulesgit-subtree

解决方案


推荐阅读