在使用git
时,我有时会尝试一些东西,然后中止耗时太长的命令(例如,一些在网络问题期间挂起的git svn
命令)。这让我开始思考:
强制中止命令(Ctrl-C或kill
)总是安全的吗?如果命令崩溃(内存不足、bug、网络/文件系统问题)怎么办?在未完成的更改被“回滚”的意义上,存储库更改是“事务性的”吗(就像在版本控制文件系统中一样)?或者,在这种情况下,我要冒存储库损坏的风险吗?
我相信从事git工作的聪明人一定已经考虑到了这一点,但我在git手册或在线上找不到任何信息。
发布于 2011-12-05 11:06:51
存储库是完全事务性的,是的。
工作树几乎是事务性的,但是有一个很难处理的情况。Checkout执行所有必要的检查,并将新内容写入临时文件,在此期间,如果您中断它,则不会修改任何内容。但是,它会一个接一个地将文件重命名到树中,最后更新HEAD ref,在此阶段的中断可能会使您对树进行部分更改。没有允许以原子方式执行该操作的质量重命名。
https://stackoverflow.com/questions/8384101
复制