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

标签 git crash transactional

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

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

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

最佳答案

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

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

关于git - 如果修改它的命令崩溃或中止,git 存储库是否会损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384101/

相关文章:

crash - 简单的 linux 设备驱动程序打开调用崩溃

spring - @Transactional on Spring shutdown 正确关闭 Hsqldb

java - Spring @Transactional 继承规则

c++ - 如何在 C++ 中创建事务流?

git - 通过命令行调用TortoiseGit“显示日志”

git - 安装后删除 fail2ban.git 是否安全?

git - 公共(public)仓库中的私有(private)文件夹(子模块)

java - Adapter.getItem(position) 使应用程序崩溃

git - 为什么不能通过未暂存的更改来完成功能?

如果我更改 <uses-sdk> 详细信息,Android 应用程序会崩溃