14

在玩 . 时git,我有时会尝试一些东西,然后中止花费太长时间的命令(例如,一些git svn在网络问题期间挂起的命令)。这让我想到:

强制中止命令(Ctrl-C 或kill)总是安全的吗?如果命令崩溃(内存不足、错误、网络/FS 问题)怎么办?从“回滚”不完整的更改(例如在版本控制文件系统中)的意义上说,存储库更改是“事务性的”吗?或者在这种情况下我会冒存储库损坏的风险吗?

我敢肯定从事 git 工作的聪明人一定已经考虑到这一点,但我在 git 手册或在线上找不到任何信息。

4

1 回答 1

12

存储库是完全事务性的,是的。

工作树几乎是事务性的,但有一个不能轻易处理的极端情况。Checkout 会进行所有必要的检查并将新内容写入临时文件,在此期间,如果您中断它,则不会进行任何修改。但是随后它将文件一个一个地重命名为树,最后更新 HEAD ref 并在该阶段中断可能会使您对树进行部分更改。没有大规模重命名允许以原子方式执行此操作。

于 2011-12-05T11:06:50.850 回答