私有项目用着 gitlab,现在想开源到 github
但历史提交中存在不想泄露的敏感文件,虽然最新的 HEAD 已经删掉了文件,但一旦传到 github 也能通过历史提交找到这些文件
如果按删除敏感文件的操作,如 https://help.github.com/articles/removing-sensitive-data-from-a-repository/ ,就会重写所有历史,但项目的其他地方有对 git 历史 commit 的引用,不想修改历史提交
也许可以先备份一份.git 目录,执行 删除敏感文件的操作得到另一份修改后的.git ,这样就有了两个不同的 git 历史;原版本继续 push 给自己的 gitlab,清理过的可以 push 给 github
要提交新的 commit 的时候 对.git 目录操作 add commit push 一次后改名 对另一个.git 目录也同样操作一次 add commit push,两个 git 目录互不干扰
这种为不同远程服务器维持两个不同版本,新加的修改同时提交给两个 git 历史,有啥最佳实践嘛?
或者有啥更好的方案嘛?也许从零开始一个分支 把历史提交一个个过滤好重新 commit,不同服务器传不同分支,但这样也还是要提交一次后切分支再提交一次
1
sagaxu 2018-02-15 14:00:04 +08:00 1
只维护一个 repo,把敏感文件剥离出来,不要提交进去
|
2
Cbdy 2018-02-15 14:12:40 +08:00 via Android 1
1. git 不要维护敏感信息,如密钥、证书
2. po 主的情况可能需要的是 git filter-branch 这个命令 |
4
cy97cool OP 或者 git 可不可能删文件而不改变 commit id 的
|
5
Rheinmetal 2018-02-15 14:22:41 +08:00
sha-1 碰撞一个文件? (笑)
|
7
sagaxu 2018-02-15 14:44:45 +08:00 1
@cy97cool 其实就两个办法,要么维护干净版本,自己用的时候用脚本注入敏感文件。要么维护完整的版本,用脚本过滤掉敏感文件再提交到开源版本。从安全的角度看,维护干净版本不容易手潮出错。
|
8
msg7086 2018-02-15 14:54:19 +08:00
维护两个分支
|
9
oott123 2018-02-15 15:01:05 +08:00 via Android 1
老代码库存档,以后不用了
改了之后再用新的推两边… 不要那么纠结嘛 |
10
huiyifyj 2018-02-15 18:27:32 +08:00 via Android 1
你试试复制一份项目,把敏感的 commit 历史提交压缩下( git rebase )。
|
11
jameslan 2018-02-16 02:19:56 +08:00 via Android
submodule ?
|
12
jameslan 2018-02-16 03:26:21 +08:00 via Android 1
开源的不要带历史,gitlab 整理一下,把 GitHub 的作为 submodule 引入
|
13
HangoX 2018-02-16 18:29:48 +08:00 via Android
rebase 到一个新分支上,提交到开源库上
|
14
cy97cool OP 最后写了个同步 git commit 信息,但不提交文件内容的脚本 (为了刷 github 小绿图:
https://gist.github.com/zjuchenyuan/1711b2ba98940c4346f41ffd7f0ee350 |