我将为一个项目招募一些开发人员。如果可能的话,我想继续使用 git repo,但我不想让部分历史可访问(通过加密),这样只有我可以访问它。原因是我在头脑中清除了历史记录中的某些专有信息,例如我在开发过程中硬编码到应用程序中的帐户密码。我不希望任何其他开发人员在没有某种形式的身份验证的情况下看到这一点。
显而易见的解决方案是在此基础上创建一个新的存储库,但如果可能的话,我想保留完整的历史记录,因为它有我可能想在以后使用的分支。
我将为一个项目招募一些开发人员。如果可能的话,我想继续使用 git repo,但我不想让部分历史可访问(通过加密),这样只有我可以访问它。原因是我在头脑中清除了历史记录中的某些专有信息,例如我在开发过程中硬编码到应用程序中的帐户密码。我不希望任何其他开发人员在没有某种形式的身份验证的情况下看到这一点。
显而易见的解决方案是在此基础上创建一个新的存储库,但如果可能的话,我想保留完整的历史记录,因为它有我可能想在以后使用的分支。
如果是 Git 存储库,您不能只隐藏部分历史记录;由于 Git 的工作方式,每次提交都包括先前提交的哈希,为了使用 Git 存储库,您需要拥有完整的历史记录。
但是,您确实有一些选择。一种方法是使用当前内容启动一个新存储库,并保留旧存储库。然后,您可以为需要访问旧历史记录的任何人提供旧存储库。您仍然可以查看两个存储库的完整历史记录。为此,您可以为每个新旧仓库添加遥控器,然后使用git replace
将旧仓库的最后一次提交附加到新仓库的第一次提交上。有关更多详细信息,请参阅此问题的答案。
另一种选择是过滤历史记录。您可以使用git filter-branch --tree-filter
在历史记录中的每次提交上运行脚本,该脚本将所有密码实例替换为“密码”之类的内容。这将保留完整的历史记录,尽管您的所有提交都会获得新的提交 ID。有关更多详细信息,请参阅此问题的答案。
Both of these options will allow you to keep your full history, while not revealing your passwords. One thing to keep in mind if that they will change the actual commit IDs so you will need to make sure all of your working repositories are checked out from the new ones, not the old, or you could accidentally push the old history to one of your new repos. I would recommend changing any passwords that are in the old repo just in case, since once they are there, it may be easy to accidentally reveal them.
由于 git 数据模型,这实际上是不可能的。但是,您可以尝试什么:
识别所有处理此类敏感数据的提交。
为这些提交做一个 git rebase -i (取决于你的仓库大小,这个交互式 rebase 可以像数千个提交一样深)并将这些提交放在 HEAD 之上
重置那些提交
用力推
(这会改变历史,但如果做得正确只会影响 sha 数字)
你需要对所有分支都这样做,这很快就会失控。这就是为什么我会接受 Gumbo 更改密码的建议。
我不确定这是最好的解决方案,但如果是我,我会创建一个新的 repo 并在它们之间进行集成。Github 已经在很大程度上使这变得更容易。