2010-02-01 224 views
8

起初:这是(希望)没有重复的thisthisGit:从存储库中删除凭证

当前状态:我将一个内部数据库凭证提交给我的Git存储库。这很好,因为我只用它一个人。然后,我的团队开始克隆,推动并推进这个项目。我们现在有几个Git仓库(一个中心和一些开发人员)。

问题:我们现在想要公开访问源代码,并访问Git存储库或至少让Git管理其他人对代码作出贡献的细节。

问题:这将是一个很好的策略,以

a)将成立一个新的Git仓库与来自中央或从所有仓库的凭证文件,或

B)到外部世界的一种'界面'?

如果选择(b),我们如何轻松地将更改传回主存储库?

由于已经广泛分布,我们真的不想在每个当前的存储库上执行git rebasegit filter-branch

回答

9

对不起,但如果您想要从主存储库中删除证书,则您将一直在运行git filter-branch。请参阅GitHub编写的Removing sensitive data

由于git的设计,没有办法迫使现有的克隆从它们各自的历史中删除文件。

你可以清理一个分支,使其成为未来发展的基础:

$ git checkout -b old-master master 
$ git filter-branch ... master 

现在你需要消毒的主推到只包含清理大师一个新的回购:

$ git push new-central master 

如果需要,现有回购站可以将新的远程和git cherry-pick更改从旧分支添加到新的清洁主数据库。

对于新的存储库,请采取某种屏障来防止有人推送敏感数据,以免再次出现同样的问题。这种障碍可能是控制新中央存储库并审查所有修补程序以决定进入的人的障碍。

2

没有使用rebase或filter-branch,您无法做到a)。但我想说,现在这样做可能会更好,而不是要永远隐藏历史。我猜b)可以通过在删除凭证的提交之后拆分历史记录来完成。结果几乎是两个历史,放在两个不同的回购站;一个在清理之前,一个在之后“重新启动”。这两个回购的历史可以通过graft-points在需要达到旧历史的人的回购中联系起来。

无论哪种方式,你将不得不处理整个负载sh * t,并且我建议去a)和filter-branch,即使它是很多工作。

+0

对不起,不接受你的答案,但gbacon的答案中的GitHub链接是值得黄金重量。 – Boldewyn 2010-02-05 14:00:06

7

只需更改您的内部数据库和任何其他具有相同密码的服务的密码。 (对于历史中某处存在的任何其他密码也是如此)。

+0

好奇,我忘了upvote这个答案。在我们的特殊情况下,这并不适用,但在一般情况下,这是一个广泛的存储库格局,而且当我发布一个我的宠物项目时,我甚至曾这样做过。 (好像我应该在将来仔细检查,我正在做什么......) – Boldewyn 2012-04-18 13:16:48

1

所以,我们已经通过了,我想分享我们最终如何做到的。

我们处于幸运的位置,没有人在某个特定的时刻拥有自定义分支。所以我们基本上做的是,所有人都把他们的最后一次推到中央存储库。

然后我们使用filter-branch就像GitHub船员所描述的那样。那时我们有一个清晰的中央存储库。

最后(并且因为没有人提供本地分支而工作),我们删除了本地存储库并从现在清洁的中央存储库中克隆了新的存储库。

简而言之:通过这种方式,这是一个相当快速和无痛的过程。不优雅,但它的工作。