我有2个分支,B
(私人)和G
(公共)。
分支B
(私有)已经成为我的主要开发分支一段时间了,并包含各种提交,包括私有代码,专有算法和其他一些无法公开的东西。
当我创建分支G
(公共)时,我不能简单地从B
(私有)分支,因为这会使它的历史包含我之前列出的所有那些不能公开的东西,所以我从头开始创建了一个新的分支(也就是说,没有父母)。然后我简单地将所有文件从分支B
(私有)导入(复制)到分支G
(公共),这是它的第一次提交。
从那时起,我一直在开发分支B
(私人),每当新的提交,我把它挑选到G
(公共)。
所有这一切都是在我开始git的时候完成的,所以,我知道我可能已经做得更好了,但是这艘船长期航行。
由于我已经学习了更多关于git如何工作(以及它应该如何使用),我想将B
合并到G
(反之亦然),所以我可以停止挑选每一次提交。所以这就是我尝试过的:
B
合并到G
:这将B
的所有(私有)提交历史记录导入G
,这是无法辨认的,因为浏览G
的提交历史记录的任何人都可以访问私有/敏感数据/算法。G
到B
:这复制了所有在G
(私人)上挑选的樱桃,这很烦人但不是什么大不了的事。但这还不够,因为在此之后将B
合并到G
仍然将所有B
的(私人)提交历史导入G
(不可接受)。我认为这将为那些git将用作未来从B
到G
合并的起点的2个分支创建一个“共同的父”,事实并非如此。G
重新排列B
:与1相同的问题。B
重新排列G
:对于G
的每次提交,都会产生冲突,所以这被证明是可以撤销的。TL; DR:我有2个分支B
是私有的,包含私有提交和G
是公共的。这是他们看起来的样子:
`B` (private): a -- b -- c -- d -- m -- n -- o -- p `G` (public): w -- x -- y -- z -/
m
是从G
到B
的合并提交。
我想“导入”,“合并”或“带来”提交n
,o
,p
(以及任何其他提交到B
的提交)到G
,而不是逐个挑选它们(一个合并提交将所有这些更改带到G
是可以接受的,只要它没有带来所有B
以前的历史)。
我不确定是否有我的问题的解决方案,但任何帮助表示赞赏。
如上所述,真正的机密信息不应该在Git仓库中,而是在某个金库中(通过Git内容过滤器驱动程序,even though that can be challenging)。
拥有一个单独的Git仓库是最小的,私人仓库引用公共one as a submodule。
这些私人提交的性质是什么?它们是否自包含在自己的文件中?我假设这是真的,因为你一直在挑选你的提交,我希望你不是经常处理公共算法/数据与私有算法/数据的性质的合并冲突。
我可以建议不要使用分支,而是有单独的存储库吗?如果您关心保护您的数据和算法,请考虑如果另一个团队成员错误地重组/合并某些内容会发生什么?此外,如果您有单独的repos,审计和访问控制会变得更加容易,因为大多数git服务器都在repo级别而不是分支级别上运行。
如果您决定单独进行回购,那么您的专有信息隐藏有两种可能的解决方案:
git public-push
或其他东西。这给了我们很大的灵活性,因为我们可以以编程方式决定什么构成私有文件,不应该被推送到公共回购。或者,如果您对此有偏执,您仍然可以审核并挑选您的提交。TL; DR - 有一个单独的repo而不是一个单独的分支,也许是一个自定义的git插件。这将允许您使用单个git push
(或自定义插件git public-push
或其他东西),如果/当它成名时,也可能允许外部贡献者到您的公共回购:)