Я пытаюсь преобразовать свой репозиторий 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
разрешено в дереве и считается предупреждением вместо ошибки .)
Похожие вопросы
Новые вопросы
git
Git — это распределенная система контроля версий с открытым исходным кодом (DVCS). Используйте этот тег для вопросов об использовании Git и рабочих процессах. Не используйте этот тег для общих вопросов по программированию, связанных с репозиторием Git. Не используйте этот тег для вопросов GitHub/GitHub Actions, не связанных с использованием git; вместо этого используйте [github] или [github-actions]. Не используйте тег [github] для проблем, связанных с Git, только потому, что репозиторий размещен на GitHub.