我有一个私人的git仓库,其中有我自己的项目和一些第三方项目。这是它的粗略结构:
Root
|- My Project
| |-- myproject
| |-- __init__.py
| |-- __main__.py
| |-- tests
| |-- setup.py
|- Project1
|- Project2
但是,如果我要将其推送到公共存储库,则不能包含第三方项目。因此,我必须将项目以其他状态推送到公共存储库。
到目前为止,我已经想到了一些解决方案,但是它们都有各自的缺点:
使用public
分支,我仅将自己的代码文件添加到其中。然后,我将public
分支推到公共仓库,并将master
分支推到我的私人仓库。但是,此解决方案导致公共存储库中包含单个文件夹,而不是看起来像常规的Python项目(例如,参见numpy's git repository)。我想要一个以My Project
作为公共仓库根目录的解决方案。
检出public
分支,然后将My Project
移至根目录并删除其他所有内容。通过这种方法,我不确定master
分支中的合并开发如何工作。
使用git子树。但是,这似乎与使用单独的分支有相同的问题。
通过在git init
内部运行MyProject
使用实际的子存储库。这解决了存储库根目录的问题,但是当MyProject
目录为CWD时,它使公共存储库成为默认存储库。因此git
(以及我使用的依赖git的开发工具中使用的任何版本控制模块,例如VSCode)都将提交并推送到公共存储库,而不是私有存储库。我希望将大部分开发内容推送到私有仓库,而只是偶尔(故意)推送到公共仓库。
使用子模块。但是,按照我的理解,子模块适用于想要独立开发存储库的一部分的情况,这与我要实现的目标相反(我想整体开发存储库,只是偶尔将其一部分推送到公共仓库)。另外,子模块将需要在随后的私有仓库克隆中进行特定处理。最后,我读到子模块很少是一个好主意(例如,参见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
中对代码的更改无缝合并到公共发行版; Project1
和Project2
中的某些文件作为额外文件添加到公共发行版中。我也许可以使用符号链接轻松地做到这一点,但也许有更好的方法。