我参与的研究小组目前将所有代码托管在私有SVN存储库中。我们想打开我们的代码并将大部分代码移到Github上。问题是,一些代码是敏感的,不应该打开,但我们仍然希望它在版本控制下。目前,我们在Github上有开放代码,私有代码仍在私有SVN存储库中。有没有一种方法可以在单个Git存储库中执行此操作?
答案 0 :(得分:7)
使用单个git存储库,没有。你可以做的是使用git submodules,它允许你“组合”存储库。将您的公共代码保存在github上,为您的私有代码创建另一个私有托管的git存储库,该代码将公共代码作为子模块引用。在公共子模块中进行的更改可以推送到github,并且github上的更改可以被撤回,但子模块之外的更改不会暴露给公共社区。虽然代码树将合并为一个根,但您必须在单独的模块之间独立管理提交,推送和拉取,许多人发现这些模块很麻烦且有问题,因此您应该在广泛分发之前对工作流进行一些实验。 / p>
答案 1 :(得分:0)
不。
除非您想编写git hook来加密/解密源代码,否则您将需要使用两个repos。当有人克隆一个git repo时,他们确实克隆了它,所以如果没有加密就不可能把它的一部分私有化。
答案 2 :(得分:0)
Git子模块已移至此处:http://git-scm.com/book/en/Git-Tools-Submodules
这个想法是子模块是嵌入在私有git存储库中的公共git存储库。您可以单独管理它们,私有git存储库的优势是在目录结构中嵌入了公共存储库文件。
例如:
/private-repository /some (private) directory /public-repository /some (public) directory /some other (private) directory
另一种选择是使用git-crypt https://www.agwa.name/projects/git-crypt/
答案 3 :(得分:0)
是的,git子模块似乎也为我们解决了这个问题。我们曾经开发过开源CMS&我们私人存储库的同一分支中的高级扩展(付费)。现在我们决定将核心开发转换为github公共回购并拆分开发。
以下是我们的目标。
为了合并这些变化,我们只是从我们的分支开发中挑选开发,就是这样。在这种情况下,我们为公共存储库提供了一个干净的核心相关历史记录,并且很容易克隆一个存储库,然后递归更新子模块。花了一点时间让这个同步,无论如何它是值得的。
干杯
答案 4 :(得分:0)
这是我用于项目初始阶段的工作流程。
private-master
分支confidential-removed
顶部的private-master
分支已删除了私有内容-每件事只需要删除一次,而不是每个版本都删除public-master
基于非常早的提交,没有任何私有内容version-branch
在public-master
上方confidential-removed
来压缩合并新提交version-branch
到public-master
的合并请求已经过仔细审核,以确保所有贡献都可以公开,并且差异易于阅读public-master
也被推送到公共遥控器/ fork 或者,可以使用public-feature-branches
代替version-branches
,它们将首先在内部进行审核,然后在公共存储库中进行审核。
此工作流程的特征:
这是这种方法的缺点:
如果项目规模庞大,参与者数量增加,那么保密性就变得尤为重要。真正应该将项目分成两部分,并以公众作为共享后端作为私有库或插件使用
。