Ham*_*aya 31 git version-control sha1
最近我用于开发的主机开始过热.我开始每天获得4或5次锁定.一切都冻结了.我的所有项目都使用git进行版本控制.
我记得看过Linus在谷歌的谈话时说git会确保文件没有损坏.在我的情况下,可以安全地假设git会在其中一个源文件损坏时警告我.
OS是Mac OS X 10.4文件系统是HFS +.
Esk*_*ola 37
您可以强制Git检查整个存储库git fsck.如果Git存储库损坏,您应该从未损坏的存储库中获取新的克隆.
在正常操作下,Git应该在读取时检查存储库的某些部分,因此可能需要更长时间才能注意到某些损坏,但是第一次尝试访问损坏的数据时会注意到它.
当Linus说Git确保文件没有被破坏时,Linus的意思是,他指的是当你引用一个特定的提交(由其哈希标识)时,你可以保证它总是引用完全相同的存储库状态.如果你从Linus的树中拉出linux内核,并且他引用了一些提交ae6bcd1 ......,你就无法做任何事情(甚至在你的本地存储库中)来提交ae6bcd1 ...看起来与Linus正在考虑他何时提到它.
此外,因为提交对象包含对其(所有)其父提交的引用,所以当您引用提交时,您也可以保证其在DAG中的完整历史记录.
文件腐败,这是一个独立的问题; 但如果您的某个工作树文件损坏,则不会破坏实际的blob对象(即.git/objects/ob/ject_hashname),您将能够从先前的提交状态或索引/缓存状态进行恢复.
在这种情况下,除非您正在进行强制推送(覆盖遥控器上的历史记录),否则您永远无法破坏遥控器,因为推送确保提交对象形成连续的历史图表.
最近我不得不在崩溃的服务器上验证repos,我使用了以下命令:
for gitdir in $(sudo find / -name ".git" -type d -printf "%h "); do
cd $gitdir && ( git fsck && echo "${gitdir} - "'HAPPY !' ) \
|| echo "${gitdir} - "'ERROR !';
done
Run Code Online (Sandbox Code Playgroud)