特别是,从理论上讲,是否可以对中央(裸;或不)git存储库进行更改(即对其所在的系统具有完全访问权限),以便不会出现更改(作为提交)/ do更新时不会导致冲突,但会出现在新克隆的存储库中吗?
或任何其他类似的“伪造”式改变。
答案 0 :(得分:2)
不,那是不可能的。 Git中的每个对象都由其内容的哈希值唯一标识。这也意味着在更改内容时,哈希值会发生变化,从而导致它成为与原始对象无关的新对象。
所以,即使你改变了一些内容,你也必须更新它的标识符(让Git接受它),然后你基本上会有与改变内容时相同的效果。其他人会在克隆时获取这些对象(例如,当分支指向它时),但这些新对象与导致冲突的原始对象不兼容。
Git在克隆时会检查对象的有效性,并会在对象丢失/损坏时通知您。您还可以使用git fsck
强制验证本地对象存储库。更改对象的输出如下所示:
error: sha1 mismatch a98bf3503443ea6a69779fef1f6204fdae913124
error: a98bf3503443ea6a69779fef1f6204fdae913124: object corrupt or missing
missing blob a98bf3503443ea6a69779fef1f6204fdae913124