单个Git存储库中的公共和私有代码
我参加的一个研究小组目前将他们所有的代码托管在一个私有的SVN存储库中。我们希望打开我们的代码,并将大部分代码移到Github上。问题是,一些代码是敏感的,不应该被打开,但我们仍然希望它处于版本控制之下。目前,我们在Github上有开放代码,私有代码仍在私有SVN存储库中。在一个Git存储库中有没有一种很好的方法可以做到这一点单个Git存储库中的公共和私有代码,git,version-control,Git,Version Control,我参加的一个研究小组目前将他们所有的代码托管在一个私有的SVN存储库中。我们希望打开我们的代码,并将大部分代码移到Github上。问题是,一些代码是敏感的,不应该被打开,但我们仍然希望它处于版本控制之下。目前,我们在Github上有开放代码,私有代码仍在私有SVN存储库中。在一个Git存储库中有没有一种很好的方法可以做到这一点 除非您想编写git钩子来加密/解密源代码,否则您必须使用两个repo。当有人克隆一个git repo时,他们实际上是对它的克隆,因此不可能在没有加密的情况下将它的一部分变
除非您想编写git钩子来加密/解密源代码,否则您必须使用两个repo。当有人克隆一个git repo时,他们实际上是对它的克隆,因此不可能在没有加密的情况下将它的一部分变成私有的。对于一个git存储库,不可以。你可以做的是使用它,它允许你“组合”存储库。将您的公共代码保留在github上,为您的私有代码创建另一个私有托管的git存储库,该存储库将公共代码作为子模块引用。在公共子模块内所做的更改可以向上推送到github,在github上所做的更改可以向下拉,但子模块外的更改不会向公共社区公开。虽然代码树将合并到一个根目录中,但您必须在单独的模块之间独立管理提交、推送和拉送,许多人认为这很麻烦,因此在广泛分发之前,您应该对工作流进行一些实验。Git子模块已移至此处: 其思想是子模块是嵌入在私有git存储库中的公共git存储库。您可以单独管理它们,其优点是私有git存储库在目录结构中嵌入了publict存储库文件 例如:
另一个选择是使用git-crypt是的,git子模块似乎也为我们解决了这个问题。我们曾经在我们私有存储库的同一分支中开发开源CMS和高级扩展(付费)。现在,我们决定将核心开发转移到github公共回购,并拆分开发 我们就这样走
干杯这是我在项目初始阶段使用的工作流
专用主机
分支机密已删除
私人主机顶部的分支已删除私人内容-每个内容只需删除一次,而不是每次发布public master
基于早期提交,没有任何私人内容version分支
位于public master
机密删除的新提交来准备版本分支
版本分支
到公共主机
的合并请求,以确保所有贡献都可以公开,差异是人类可读的public master
也被推送到公共远程/分叉公共功能分支
代替版本分支
,它们将首先在内部进行审查,然后在公共存储库中进行审查
此工作流的功能:
- 同一文件的公共和私有版本可以不同
- 无需根据宣传级别对不同文件夹进行编码
- 不需要基于公开级别在多个存储库中编写代码
- 公共部门开发者的贡献可以合并到私有部门,但可能会出现一些冲突
- 需要专门的人员进行额外的工作,并且
- 也有点容易出错
- cherry picking可能会显示隐藏的依赖项(即,选取的代码可能会使用一些未选取的代码)
/private-repository
/some (private) directory
/public-repository
/some (public) directory
/some other (private) directory