Как экспортировать конкретную фиксацию с помощью 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
После распаковки обоих, они заканчиваются точно такими же. Я не могу понять, почему и как это исправить.
Ответы
Ответ 1
Проблема
В обоих примерах вы экспортируете кончик мастера. Выньте свои флаги и аргументы, и у вас есть:
git archive master
Другими словами, вы явно делаете это для себя, указав все, что хранится в .git/refs/heads/master, как ваш tree-ish.
Решение
Вам нужно предоставить древовидную структуру в соответствии с gitrevisions (7), если вы хотите экспортировать другую фиксацию. Например, чтобы экспортировать commit 29435bc, вы можете указать:
git archive --format zip --output /full/path/to/zipfile.zip 29435bc
Ответ 2
Разрешение
Это ожидаемое поведение для новейших версий Git. Удаленные хранилища Git не позволяют клиентам получать доступ к произвольным SHA1. Запрошенные объекты должны быть доступны с помощью ссылки (то есть имя файла).
git-upload-archive-archiver-died-with-error