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