为什么git快速导入文件模式是硬编码的?

时间:2013-04-10 14:19:41

标签: git file-permissions git-fast-import

我正在尝试将我的CVS存储库转换为GIT,我遇到了一个奇怪的问题: git fast-import具有硬编码文件模式100755和100644,否则它会死亡。

源:

p = get_mode(p, &mode);
if (!p)
    die("Corrupt mode: %s", command_buf.buf);
switch (mode) {
    case 0644:
    case 0755:
    mode |= S_IFREG;
    case S_IFREG | 0644:
    case S_IFREG | 0755:
    case S_IFLNK:
    case S_IFDIR:
    case S_IFGITLINK:
        /* ok */
        break;
    default:
        die("Corrupt mode: %s", command_buf.buf);
}

// https://github.com/git/git/blob/master/fast-import.c 2272-2288

有人可以解释一下这种解决方案的原因吗?

1 个答案:

答案 0 :(得分:2)

Git不存储文件模式,它只使用看起来像unix文件模式的东西来存储文件类型(符号链接,目录,可执行文件,不可执行文件)。

存储不属于这些硬编码位的内容,例如,0777将不合法。这将是一个损坏的树对象,git fsck会抱怨它。

(请注意,对此进行了历史排除 - 树中允许0664,并且被视为警告而不是错误。)