当玩弄 git
时,我有时会尝试一些东西,然后中止花费太长时间的命令(例如,一些 git svn
命令在网络问题期间挂起)。这让我想到:
强制中止命令(Ctrl-C 或 kill
)总是安全的吗?如果命令崩溃(内存不足、错误、网络/文件系统问题)怎么办?在不完整的更改被“回滚”(如在版本控制文件系统中)的意义上,存储库更改是否“事务性”?还是在那种情况下我会冒存储库损坏的风险?
我敢肯定从事 git 工作的聪明人一定已经考虑到了这一点,但我在 git 手册或网上找不到任何信息。
最佳答案
存储库是完全事务性的,是的。
工作树几乎是事务性的,但有一个角落情况不容易处理。 Checkout 执行所有必要的检查并将新内容写入临时文件,在此期间,如果您中断它,则不会修改任何内容。但随后它会将文件一个一个地重命名为树,并最终更新 HEAD ref 并在该阶段中断可能会使您对树进行部分更改。没有批量重命名允许以原子方式执行此操作。
关于git - 如果修改它的命令崩溃或中止,git 存储库是否会损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384101/