1

我正在尝试将我的 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

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

4

1 回答 1

2

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

例如,存储不是这些硬编码位之一的东西是不0777合法的。这将是一个损坏的树对象并且git fsck会抱怨它。

(请注意,历史排除了这一点 -0664在树中允许,并且被视为警告而不是错误。)

于 2013-04-10T14:36:02.887 回答