【发布时间】:2012-03-16 22:28:12
【问题描述】:
如何重写我们的提交历史以确保某些关键字永远不会出现?
背景:我们有三层存储库:
- 本地 - 我们的开发环境。
- 内部 - 我们团队的私有 GH 存储库
- 客户 - 生产/最终客户。我们所有的真实姓名、电子邮件等都不能在这里出现。
我已经发现git-filter-branch 可以帮助重写历史以去除名称,使用类似的东西...
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='safeusername'; GIT_AUTHOR_EMAIL='safe@email.com'; GIT_COMMITTER_NAME='safeusername'; GIT_COMMITTER_EMAIL='safe@email.com';" HEAD
这看起来效果很好。当我推到最后一个遥控器时,我们的名字都不存在。但是,在某些合并时,我不希望任何分支名称或其他 cmets 可能意外出现。
此外,我希望继续配置我们的实际电子邮件和用户名,以便我们的内部项目管理系统正常工作且透明。
如何确保关键字或名称列表永远不会出现在提交消息中?另外,还有什么其他方法可以解决这个问题吗?
谢谢!
【问题讨论】:
-
哎呀。要求在真实姓名/电子邮件不能存在的存储库与它们必须存在的存储库之间进行互操作……至少可以说是有风险的。
-
幸运的是,我将它们保存在单独的目录中,并将我可以使用的任何过滤器组合到推送脚本中。此外,这是一种方式。我永远不会从客户端存储库中提取代码 - 永远。希望这使它更简单(或不那么可怕)。
-
只是:您仍在向可能泄露信息的方向移动数据。您是否真的需要在客户端有一个 repository,包含您在内部 repos 中所做的所有(可能重写的)提交?
-
是的 - 客户希望看到即将发生的更改并执行他们自己的版本控制。另一种选择可能是从我的存储库构建一个包,并将它们应用到客户端存储库,并使用它自己的组合提交。我想避免这种情况,因为我们在这条路线上失去了很多宝贵的历史。
标签: git history privacy git-filter-branch