18
  • 哪些信号是安全的,哪些不是?

  • 对于那些不安全的信号,杀死一个 Git 进程会造成哪些损害?工作树可能处于未定义状态吗?.git/index 甚至 .git/objects-database 可能会损坏吗?

  • 文件是由 Git 以某种“原子”操作编写的吗?(工作树文件、.git/index、配置文件等等......)

更新:关于信号的更精确的问题

4

2 回答 2

4

实际上,git 非常努力地尝试完全事务性 - 即它试图永远不会使存储库处于不一致的状态,无论何时或如何中断操作 - 请参阅这个问题: 如果修改它的命令崩溃,git 存储库是否会损坏还是被中止了?

因此,如果使用 SIGTERM、SIGKILL 或红色电源按钮,如何终止 git 进程并不重要。如上面的答案所述,例外情况是工作目录中的文件可能是来自不同分支的文件的混合,因为这些文件不能一次全部替换。

也就是说,交易安全性很难测试(因为有很多极端情况),所以我不会 100% 依赖 git 在这种情况下是安全的。您通常应该没问题,但是您可能会不时遇到错误并弄乱存储库。

于 2014-01-21T14:14:58.927 回答
2

这取决于当你试图杀死它时 GIT 正在做什么。

如果你在克隆过程中杀死它,它肯定会处于部分不完整的状态,但很容易从中恢复:删除凌乱的部分克隆并再次克隆。

以我的经验,GIT 在失败时不会杀死它正在管理的文件。我之前在推送过程中将其杀死,而对我更改的文件没有太大损坏。当然,消息日志可能会有些混乱。

没有比你提供的更多的细节,很难说。

于 2012-05-07T18:52:04.870 回答