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