哪些信号是安全的,哪些不是?
对于那些不安全的信号,杀死Git进程可能造成哪些损害?工作树可能处于未定义状态吗?可能.git / index甚至.git / objects-database都被破坏了?
Git是用某种“原子”操作写的吗? (工作树文件,.git / index,配置文件等等)
更新:有关信号的更精确问题
答案 0 :(得分:3)
实际上,git很难完全成为事务性的 - 即它试图永远不会使存储库处于不一致状态,无论操作何时或如何中断 - 请参阅此问题: Can a git repository be corrupted if a command modifying it crashes or is aborted?
因此,如果使用SIGTERM,SIGKILL或红色电源按钮,如何终止git进程无关紧要。如上面的答案所述,例外情况是工作目录中的文件可能是来自不同分支的文件的混合,因为这些文件不能一次全部替换。
那就是说,交易安全很难测试(因为有很多极端情况),所以在这种情况下我不会100%依赖git是安全的。你通常应该没问题,但你可能会不时地点击一个bug并弄乱存储库。
答案 1 :(得分:2)
这取决于当你试图杀死它时GIT正在做什么。
如果你在克隆期间杀了它,确定它会处于某种部分不完整的状态,但很容易从中恢复:删除凌乱的部分克隆并再次克隆。
根据我的经验,GIT不会在它失败时屠杀它正在管理的文件。我已经在推送过程中将其杀死,而对我更改的文件没有太大的损害。当然,消息日志可能会变得有点棘手。
没有比你提供的细节更多的细节,很难说。