Я пытаюсь преобразовать свой репозиторий 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
rush 10 Апр 2013 в 18:19

1 ответ

Лучший ответ

Git не хранит режимы файлов, он хранит только тип файла (символическая ссылка, каталог, исполняемый файл, не исполняемый файл), используя что-то, что подозрительно похоже на режимы файлов unix.

Хранение чего-то, что не является одним из этих жестко запрограммированных битов, например 0777, было бы незаконным. Это будет поврежденный объект дерева, и git fsck будет жаловаться на это.

(Обратите внимание, что для этого есть историческое исключение - 0664 разрешено в дереве и считается предупреждением вместо ошибки .)

2
Edward Thomson 10 Апр 2013 в 18:36