Git文件完整性

时间:2009-06-08 10:54:42

标签: git version-control sha1

最近我用于开发的主机开始过热。我开始每天获得4或5次锁定。一切都冻结了。我的所有项目都使用git进行版本控制。

我记得看过Linus在谷歌的谈话,说git会确保文件没有损坏。在我的情况下,可以安全地假设git会在其中一个源文件损坏时发出警告。

操作系统是Mac OS X 10.4文件系统是HFS +。

3 个答案:

答案 0 :(得分:36)

您可以强制Git使用git fsck检查整个存储库。如果Git存储库损坏,您应该从未损坏的存储库中获取新的克隆。

在正常操作下,Git应该检查存储库中的部分内容,因此可能需要更长时间才能注意到某些损坏,但是第一次尝试访问损坏时会注意到 数据

答案 1 :(得分:9)

当Linus说Git确保文件没有损坏时,Linus的意思是,他指的是当你引用特定提交(由其哈希标识)时,你保证它将始终指向完全相同的存储库状态。如果你从Linus的树中拉出linux内核,并且他引用了一些提交ae6bcd1 ......,你就无法做任何事情(甚至在你的本地存储库中)来提交ae6bcd1 ...看起来与Linus正在考虑他何时提到它。

此外,由于提交对象包含对其父提交(全部)的引用,因此当您引用提交时,您也可以保证其在DAG中的完整历史记录。

就档案腐败而言,这是一个独立的问题;但如果您的某个工作树文件损坏,则不会损坏实际的blob对象(即.git / objects / ob / ject_hashname),您将能够从先前的提交状态或索引/缓存状态进行恢复。

除非您正在进行强制推送(覆盖遥控器上的历史记录),否则在这种情况下永远不会损坏遥控器,因为推送确保提交对象形成连续的历史图。

答案 2 :(得分:6)

最近我必须在崩溃的服务器上验证存储库,我使用了以下命令:

for gitdir in  $(sudo find / -name ".git" -type d -printf "%h "); do
  cd $gitdir && ( git fsck && echo "${gitdir} - "'HAPPY !' ) \
  || echo "${gitdir} - "'ERROR !';
done