如果修改git存储库的命令崩溃或中止,存储库是否会损坏?

14
在玩弄git时,有时我会尝试一些操作,然后中止耗时过长的命令(例如某些在网络问题期间挂起的git svn命令)。这让我想到:
强制中止命令(Ctrl-C或kill)总是安全的吗?如果命令崩溃(由于内存、错误、网络/FS问题),怎么办?仓库更改是否“事务性”,即不完整的更改是否会“回滚”(就像版本控制文件系统中一样)?还是我冒着出现仓库损坏的风险?
我相信致力于git开发的聪明人肯定考虑过这个问题,但我在git手册或在线上没有找到任何信息。
1个回答

12

这个代码仓库是完全事务性的。

工作区几乎是事务性的,但有一种特殊情况很难处理。检出(Checkout)会执行所有必要的检查,并将新内容写入临时文件,此期间如果中断操作,则不会对任何内容进行修改。但是接下来它会逐个重命名文件到目标目录,并最终更新HEAD引用。如果在此过程中中断,可能会导致树的部分更改。没有批量重命名可供使用来实现原子性操作。


3
你有没有参考资料(如 git源码或文档),证明代码仓库和推送操作是事务性的? - not-a-user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接