我正在尝试将我的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
有人可以解释一下这种解决方案的原因吗?
答案 0 :(得分:2)
Git不存储文件模式,它只使用看起来像unix文件模式的东西来存储文件类型(符号链接,目录,可执行文件,不可执行文件)。
存储不属于这些硬编码位的内容,例如,0777
将不合法。这将是一个损坏的树对象,git fsck
会抱怨它。
(请注意,对此进行了历史排除 - 树中允许0664
,并且被视为警告而不是错误。)