哪些信号可以安全地用于杀死Git进程,哪些不可以?

mst*_*rap 17 git process

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

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

  • 文件是用Git编写的某种"原子"操作吗?(工作树文件,.git/index,配置文件等...)

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

sle*_*ske 5

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

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

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