不知道有没有人这么做过,就是公司级别开源程序中,公司想同时维护一个 public repo 和一个 private repo:
.stub
示例那么在这种情况下如何更简单的维护这两个 repos 呢?
现在能想到的办法:
cp
cp
报错的话就不行了.gitignore
文件对应不同的 remote
还有没有什么别的办法?
1
Trim21 2019-04-10 04:04:29 +08:00 via Android
submodule ?
|
2
msg7086 2019-04-10 04:08:43 +08:00
程序文件做成 submodule,然后 private 和 public 里存放必须的文件,然后引入 submodule。
其实也很麻烦的。建议还是不要把秘密放在 repo 中。 |
3
stcheng 2019-04-10 04:15:48 +08:00 via iPhone
提供一个思路,在 public 和 private 分别有两个一样的 repository,private 的 repo 下的其中几个 commit 是 secret files 和 internal features。每次 public 和 private 的 pull request 分开 review,internal 的所有 commit 都 rebase 在 public 的 commit 上。每次 public 有更新,internal 就做一个 rebase update 然后再 force push 到 internal 的 branch 上。
|
4
SharkIng OP |
5
stcheng 2019-04-10 06:08:43 +08:00
一开始我也是考虑用 submodule 的,但是问题在于很多时候有超出 secret files 的 change,比如同一个文件 public 和 internal 会有区别,这样就无法使用 submodule 区分开来。我们现在在生产环境中这样做基本没有碰到太大的问题,相对来说 public 的 commit 更容易 maintain。
|
6
xiaket 2019-04-10 09:11:41 +08:00
即使是 private repo 也不应该用来放 secret.
|
7
SharkIng OP |
8
networm 2019-04-11 16:24:51 +08:00 via iPhone
可以考虑将密码、密钥、配置文件等放在构建流程里,这样仓库可以不用区分公开与私有。
|
9
stcheng 2019-04-12 02:37:35 +08:00 1
private 的 repository 像是一个 patching repository。大部分内容都在 public 开发和 review。但是需要专门对 private 的 repository 进行 rebase,没有 conflicts 的情况下再 force push,保证 private repository 的最顶端都是 up-to-date 的 patch commits sit on top of the current master of public branch。secrets file 基本上都是 Ansible secrets,不存在任何 repository 里面。private repository 存放无法开源的 feature 和 internal 的 system/lab environment setup。
因为一般来说大部分还是开源的,所以 maintain private repository 的 work load 不是特别重。 |