Почему "git repack" иногда говорит "Ничего нового для упаковки". а в других случаях все перепаковывает (без изменений в репо)?
У меня большой репозиторий с 17-летней историей. После преобразования с помощью svn2git я обычно делаю 'git repack -a -d -f'. Это говорит: "Ничего нового для упаковки". Затем, если я перенесу его на сервер (в моем случае Bit Bucket), а затем найду репозиторий на сервере и сделаю переупаковку, он перепакует весь репозиторий. Я хотел бы иметь возможность всегда перепаковывать весь репо, если это возможно. Я не могу понять, какие изменения происходят между отправкой на сервер, что позволяет перепаковать. Обратите внимание, что в хранилище не вносятся изменения между клиентом и сервером.
1 ответ
Вывод, который вы видите, происходит из следующих строк:
if (!names.nr && !quiet)
printf("Nothing new to pack.\n");
Вот names.nr
количество строк идентификатора SHA-1, считанных из git pack-objects
команда, когда запускается с аргументами, предоставленными в argv и окружении, вычисленном ранее в этом же коде.
В этом случае происходит то, что svn2git
Утилита, которую вы используете, создает отдельный пакет, и по какой-либо причине, git pack-objects
выбирает оставить этот файл в покое.
Я не могу объяснить, почему -a -d -f
не заставлял перепаковывать, потому что должен. git pack-objects
Команда должна была сгенерировать новый файл пакета с новым сжатием. (Я полагаю, одна возможность git pack-objects
просто полностью не работает в вашей конкретной системе, но тогда вам также следует обратиться с жалобой.)