以下资源描述了如何从git存储库中删除敏感数据.
之后,我如何仔细检查顽皮位是否真的消失了,即搜索存储库中的所有blob(被引用,垃圾,打包,松散还是其他)来验证违规模式是否已被完全破坏?
使用裸存储库与使用工作树的存储库时,答案是否会发生变化?
根据该GitHub页面,任何提交都可以通过SHA1引用,即使没有引用它,因此您必须删除存储库并重新创建它.我可以验证提交在取消引用后至少两周仍然可见.通常,一旦删除了敏感数据 - 这样就无法通过任何引用访问它们 - 修剪Git对象存储的最简单方法是克隆存储库并销毁旧存储库.如果您无法直接访问存储库(例如GitHub),则尤其如此.
(换句话说:如果垃圾SHA1已知,那么GitHub将很乐意通过网络提供服务.Git协议通常会拒绝为您提供未命名的提交,但可以通过daemon.uploadarch配置启用它.)
把引用的对象变成垃圾对象的方法是与司法适用rebase,filter-branch,reflog,update-ref等.清除垃圾对象的方法是与司法适用gc,fsck,prune,和repack.
示例查询:
列出悬空提交,您可以查找可能被垃圾收集的敏感数据:
git fsck --no-reflogs | awk '/dangling commit/{print $3}' | while read sha1;
do git grep foo $sha1; done
Run Code Online (Sandbox Code Playgroud)列出从ref可到达的每个对象(--walk-reflogs替换为reflogs 添加):
git rev-list --objects --all | while read sha path;
do git show $sha | grep baz; done
Run Code Online (Sandbox Code Playgroud)另一种方法是使用fast-export将整个存储库导出到基于文本的文件中,您可以使用任何所需的工具进行操作和操作,然后再fast-import使用新的存储库.这很好,因为它不带任何垃圾,你可以很容易地grep整个存档.
如果您没有工作树,则答案不会改变,但是filter-branch某些命令可能需要工作树来处理某些用例.
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |