Почему режимы файлов 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 допускается в дереве и считается ошибкой, а не ошибкой.)

Другие вопросы по тегам