【问题标题】:Can a git repository be corrupted if a command modifying it crashes or is aborted?如果修改它的命令崩溃或中止,git 存储库会损坏吗?
【发布时间】:2012-01-13 02:55:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: git crash transactional


    【解决方案1】:

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

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

    【讨论】:

    • 您是否有参考(git 源或文档)表明 repo 和推送操作是事务性的?
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2013-09-11
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多