git 怎么为不同的 remote 维持两个不同的历史版本?

2018-02-15 13:07:26 +08:00
 cy97cool

考虑这种情景

私有项目用着 gitlab,现在想开源到 github

可是

但历史提交中存在不想泄露的敏感文件,虽然最新的 HEAD 已经删掉了文件,但一旦传到 github 也能通过历史提交找到这些文件

如果按删除敏感文件的操作,如 https://help.github.com/articles/removing-sensitive-data-from-a-repository/ ,就会重写所有历史,但项目的其他地方有对 git 历史 commit 的引用,不想修改历史提交

可能可以维护两个不同的 git 文件夹?

也许可以先备份一份.git 目录,执行 删除敏感文件的操作得到另一份修改后的.git ,这样就有了两个不同的 git 历史;原版本继续 push 给自己的 gitlab,清理过的可以 push 给 github

要提交新的 commit 的时候 对.git 目录操作 add commit push 一次后改名 对另一个.git 目录也同样操作一次 add commit push,两个 git 目录互不干扰

问题

这种为不同远程服务器维持两个不同版本,新加的修改同时提交给两个 git 历史,有啥最佳实践嘛?

或者有啥更好的方案嘛?也许从零开始一个分支 把历史提交一个个过滤好重新 commit,不同服务器传不同分支,但这样也还是要提交一次后切分支再提交一次

2144 次点击
所在节点    问与答
14 条回复
sagaxu
2018-02-15 14:00:04 +08:00
只维护一个 repo,把敏感文件剥离出来,不要提交进去
Cbdy
2018-02-15 14:12:40 +08:00
1. git 不要维护敏感信息,如密钥、证书
2. po 主的情况可能需要的是 git filter-branch 这个命令
cy97cool
2018-02-15 14:15:45 +08:00
@sagaxu
@Cbdy 知道怎么删 但不能改历史
想同时维护原版本和干净的版本
cy97cool
2018-02-15 14:19:21 +08:00
或者 git 可不可能删文件而不改变 commit id 的
Rheinmetal
2018-02-15 14:22:41 +08:00
sha-1 碰撞一个文件? (笑)
Cbdy
2018-02-15 14:26:08 +08:00
@cy97cool 可行的哦,Google 不是之前 sha1 碰撞成功了吗?哈哈😄
sagaxu
2018-02-15 14:44:45 +08:00
@cy97cool 其实就两个办法,要么维护干净版本,自己用的时候用脚本注入敏感文件。要么维护完整的版本,用脚本过滤掉敏感文件再提交到开源版本。从安全的角度看,维护干净版本不容易手潮出错。
msg7086
2018-02-15 14:54:19 +08:00
维护两个分支
oott123
2018-02-15 15:01:05 +08:00
老代码库存档,以后不用了
改了之后再用新的推两边…
不要那么纠结嘛
huiyifyj
2018-02-15 18:27:32 +08:00
你试试复制一份项目,把敏感的 commit 历史提交压缩下( git rebase )。
jameslan
2018-02-16 02:19:56 +08:00
submodule ?
jameslan
2018-02-16 03:26:21 +08:00
开源的不要带历史,gitlab 整理一下,把 GitHub 的作为 submodule 引入
HangoX
2018-02-16 18:29:48 +08:00
rebase 到一个新分支上,提交到开源库上
cy97cool
2018-06-17 12:55:10 +08:00
最后写了个同步 git commit 信息,但不提交文件内容的脚本 (为了刷 github 小绿图:

https://gist.github.com/zjuchenyuan/1711b2ba98940c4346f41ffd7f0ee350

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/430829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX