Ответ 1
Вы не можете получить только архив без предварительной обработки дерева - вы хотите получить, когда используете --remote
git archive --remote=ssh://[email protected]/username/reponame.git --format=tar --output="file.tar" master
Будет работать, указывая имя ветки.
Это тоже сработало бы с именем тега.
Однако, согласно этот поток, идентификатор фиксации не будет работать:
Есть ли причина, по которой
git-archive
требует идентификатор с именем, а не только идентификатор фиксации (или дерева)?Да; обычно хранилища git не позволяют клиентам получить доступ к произвольным шагам. Вместо этого они требуют, чтобы запрошенные объекты были доступны с помощью ссылки.
git-archive
не выполнял должным образом это действие и недавно был изменен, чтобы разрешить только refs по имени, а также поддеревы ref (например,HEAD:subdir/
).
Это означает, что мы запрещаем произвольную фиксацию или дерево sha1, даже если это доступно из рекламируемых ссылок.было бы сложно запланировать git -upload-archive, чтобы использовать идентификаторы?
Я мог бы использовать теги для ссылки, но в моем случае почти каждая фиксация будет тегом, который кажется расточительным.Выполнение этого права немного дорого, потому что в общем случае (кто-то запрашивал дерево sha1), нам нужно было бы пересекать каждое дерево каждой фиксации, чтобы увидеть, достижимо ли это.
Мы могли бы реализовать более ограниченный набор правил, позволяя "
<commit>:<subdir>
" и проверять доступность<commit>
.
Это будет запрещать произвольное дерево sha1, но я подозреваю, что это будет охватывать общее (т.е. вы хотите получить дерево или даже поддерево конкретной ревизии).