git - Git 公共子存储库
问题描述
我有一个私人 git 存储库,其中有我自己的项目和一些 3rd 方项目。这是它的粗略结构:
Root
|- My Project
| |-- myproject
| |-- __init__.py
| |-- __main__.py
| |-- tests
| |-- setup.py
|- Project1
|- Project2
但是,如果我想将它推送到公共存储库,我不能包含第 3 方项目。所以我必须将我的项目以不同的状态推送到公共存储库。
到目前为止,我已经想到了一些解决方案,但它们都有各自的缺点:
使用一个
public
分支,我只添加我自己的代码文件。然后我将分支推public
送到公共仓库,并将master
分支推送到我的私人仓库。但是,此解决方案会导致公共存储库包含一个文件夹,而不是看起来像一个常规的 Python 项目(例如参见numpy 的 git 存储库)。我想要一个My Project
作为公共仓库根目录的解决方案。检查
public
分支,然后移动My Project
到根并删除其他所有内容。使用这种方法,我不确定如何从master
分支合并开发。使用 git 子树。但是,这似乎与使用单独的分支存在相同的问题。
git init
通过在内部运行来使用实际的子存储库MyProject
。这解决了 repo root 的问题,但是当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
); - 克隆私有 repo
git clone path-to-remote-private-repo
将克隆整个项目(包括 的内容My Project
); - 我将能够无缝地将代码更改合并到
My Project
公共发行版中; - (可选)我将能够逐个文件地从公共发行版中添加某些文件,
Project1
并将Project2
其作为额外文件添加到公共发行版中。我可能可以使用符号链接轻松地做到这一点,但也许有更好的方法。
解决方案
推荐阅读
- javascript - Jquery focusout 事件在输入文本字段上触发了两次
- c# - 修复返回的号码
- c# - 在 asp.net 中使用 ajax 工具包扩展创建动态条形图
- vb.net - 需要帮助将表格放在页面的开头
- ios - 隐藏子视图时调整 UIStackView 的大小?
- javascript - 将 ES6 类从节点打包到浏览器
- gradle - 如何从 sourceSet 中的一个 srcDir 中排除文件?
- excel - 从晨星提取特定的表格单元格,然后循环到下一个晨星页面
- java - 如何根据存储在另一个集合中的数组过滤 Firestore 中的文档?
- html - 有没有办法在 HTML 表单上创建一个选项,以允许用户从 n 个选项中准确选择 2 个?