gpt4 book ai didi

git - 如何破坏 Git 存储库?

转载 作者:太空狗 更新时间:2023-10-29 13:10:22 24 4
gpt4 key购买 nike

创建损坏的 git 存储库的方法有哪些?有趣的是,有没有办法永久损坏 git 存储库?你能削弱一个 git 存储库,使其行为正常但做一些奇怪的事情吗?

我的兴趣来自于有人担心他们是否真的创造了一种不可恢复的状态。它通常很容易修复或至少可以拼凑起来。 git 中是否有 stash 的(邪恶的) gem ?

最佳答案

嗯,可能发生的最直接的损坏是 .git/objects 中的数据丢失或数据完整性丢失。目录。因为它被设计成一个不可变的、只写的存储机制,一旦你违反了这个假设,很多其他的东西就会分崩离析。最常见的情况是,这是由网络传输中损坏的包文件引起的。除非你非常(读作:天文数字)不幸,否则 git 会理所当然地检测到这一点并大声提示。要以这种方式获得静默故障,您需要以这样的方式破坏 blob,使其保留其 SHA1 哈希...在放气压缩下...具有准确的类型和大小 header 。

因此,git 非常擅长验证自己的数据完整性。我们还能做什么?要真正使状态不可恢复,您需要:

  1. 与该状态关联的提交和其他对象未被引用(即,.git/refs 下的任何命名引用或任何引用日志都无法访问);然后
  2. 垃圾收集实际上永远删除状态,或者获取新的克隆并删除原始状态。

否则,您将始终能够运行 git checkout <sha> && git branch recovered并收回你所有的工作,无论你做了什么。在正常的 git 使用过程中,当你 rebase 、挑选或过滤分支时,提交是孤立的,所有这些都基于旧的提交对象创建新的提交对象,或者如果你 git reset --hard周围的一个分支。默认情况下,您的宽限期为 about two weeks然后,在它们被删除之前,尽管您始终可以截断您的 reflog 并手动修剪以尽早消除某些内容。

更常见的是,当用户从一开始就没有将他们的数据添加到 git 时,我看到了数据丢失。例如,新用户有时不愿频繁提交,并尝试使用带有脏工作副本的命令。如果你从不在 git 中记录状态,git 就无法为你恢复它!

如果您接受可恢复难以注意到 诡计,您可以使用git replace 做些坏事或 graft points通过 merge 或过滤分支操作来欺骗 git 对虚假历史进行操作。不过,替换的提交仍然算作可到达,因此不会造成永久性损坏。

关于git - 如何破坏 Git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19759698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com