Kyl*_*ley 6 git corrupt corruption
有什么方法可以创建一个损坏的git存储库?有没有办法有趣地永久损坏git存储库?你可以削弱一个git存储库,使它在某种程度上正常运行,但做些奇怪的事情吗?
我的兴趣来自于有人担心他们是否真的创造了一个不可恢复的状态.它通常被证明是易于修复或至少拼凑在一起的东西.git中有隐藏(邪恶)的宝石吗?
好吧,可能发生的最直接的腐败是.git/objects目录内的数据丢失或数据完整性.因为它被设计成一个不可变的只写存储机制,一旦你违反了这个假设,许多其他的东西就会崩溃.最常见的是,这可能是由网络传输中损坏的打包文件造成的.但是,除非你非常(阅读:天文学上)不幸,否则git会将此视为理所当然并且大声抱怨.要以这种方式获得静默失败,您需要以这样的方式来破坏blob,以便在deflate压缩下保留其SHA1哈希值......使用精确的类型和大小的头.
所以,git非常擅长验证自己的数据完整性.我们还能做什么?要真正使状态无法恢复,您需要:
.git/refs或任何reflog都无法访问); 然后否则,git checkout <sha> && git branch recovered无论你做了什么,你总能运行并完成所有工作.在你正常的git使用期间,当你使用rebase,cherry-pick或filter-branch时,提交会像这样孤立,所有这些都会根据旧的提交对象创建新的提交对象,或者如果你git reset --hard是一个分支.默认情况下,在删除之前,您有大约两周的宽限期,然后,尽管您可以随时截断您的reflog并手动修剪以尽早核对.
更常见的是,当用户从未将数据添加到git时,我看到数据丢失.例如,新用户有时会经常犹豫不决,并尝试使用带有脏工作副本的命令.如果你从未在git中记录状态,git就无法为你带回来!
如果你对可恢复但难以察觉的诡计没什么好处的话,你可以用git替换或贪污点做一些邪恶来欺骗git,使用合并或过滤分支操作来伪造历史记录.但是,替换的提交仍然可以计算,因此不会造成永久性损坏.
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |