Git公共子存储库

时间:2020-04-02 14:07:00

标签: git git-branch git-submodules git-subtree

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

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

但是,如果我要将其推送到公共存储库,则不能包含第三方项目。因此,我必须将项目以其他状态推送到公共存储库。

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

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

  2. 检出public分支,然后将My Project移至根目录并删除其他所有内容。通过这种方法,我不确定master分支中的合并开发如何工作。

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

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

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

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

  • 公共仓库仅包含我自己的My Project中的代码;
  • 公共存储库的根源为My Project
  • 默认情况下,我所做的任何开发都将添加,提交并推送到私有存储库(例如,如果使用确切的命令git add -A; git commit -m "msg"; git push);
  • 使用git clone path-to-remote-private-repo克隆私人仓库将克隆整个项目(包括My Project的内容);
  • 我将能够将My Project中对代码的更改无缝合并到公共发行版;
  • (可选),我将能够逐个文件地将Project1Project2中的某些文件作为额外文件添加到公共发行版中。我也许可以使用符号链接轻松地做到这一点,但也许有更好的方法。

0 个答案:

没有答案