Как мне экспортировать определенный коммит с помощью git-archive?
Я задавал подобный вопрос и раньше, но на него ответили неадекватно, поэтому я подумал, что задам еще раз здесь, но предоставлю больше информации. Мне нужно получить разные и более старые версии git-репозитория, и у меня возникли проблемы с этим. Что я пробовал
git checkout master~X
git archive --format zip --output /full/path/to/zipfile.zip master
git checkout master
git checkout master~Y
git archive --format zip --output /full/path/toDifferent/zipfile.zip master
git checkout master
После расстегивания молнии оба они оказываются точно такими же. Я не могу понять, почему или как это исправить.
2 ответа
Эта проблема
В обоих ваших примерах вы экспортируете наконечник мастера. Уберите свои флаги и аргументы, и вы получите:
git archive master
Другими словами, вы явно делаете это для себя, определяя все, что хранится в .git/refs/head /master, как свое дерево.
Решение
Вам нужно указать древовидную схему в соответствии с gitrevisions(7), если вы хотите экспортировать другой коммит. Например, чтобы экспортировать коммит 29435bc, вы можете указать:
git archive --format zip --output /full/path/to/zipfile.zip 29435bc
Разрешение
Это ожидаемое поведение для новейших версий Git. Удаленные репозитории Git не позволяют клиентам получать доступ к произвольным SHA1. Запрошенные объекты должны быть доступны по ссылке (то есть по имени файла).