Почему режимы файлов 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 ответ
Git не хранит файловые режимы, он только сохраняет тип файла (символическая ссылка, каталог, исполняемый файл, а не исполняемый файл), используя что-то, что подозрительно похоже на режимы файлов Unix.
Хранение чего-то, что не является одним из этих жестко закодированных битов, например, 0777
не будет законным. Это будет поврежденный объект дерева и git fsck
пожаловался бы на это.
(Обратите внимание, что есть историческое исключение к этому - 0664
допускается в дереве и считается ошибкой, а не ошибкой.)