Невозможно клонировать непосредственно в тег git, используя -b <tagname> - PullRequest
6 голосов
/ 09 августа 2010

Я немного озадачен, почему я не могу извлечь тег непосредственно из команды git clone. Я пытаюсь сделать следующее:

git clone -b mytag <url>/foo.git

Я получаю ошибку:

warning: Remote branch mytag not found in upstream origin, using HEAD instead

Метка присутствует и, например,

cd foo && git checkout mytag 

... хорошо работает.

Если бы кто-нибудь мог немного рассказать о том, почему нельзя напрямую клонировать тег, я был бы признателен. Спасибо.

Ответы [ 4 ]

4 голосов
/ 09 августа 2010

Возможно, все, что вам действительно нужно / нужно сделать, это использовать git archive, чтобы извлечь тарбол из всего, что git rev-parse может понять.Вы можете использовать опцию --remote для извлечения архива из некоторого удаленного источника идентично значению <url>/foo.git, которое вы передаете клону.Теоретически, это будет намного быстрее, поскольку все, что вы будете захватывать, - это рабочее дерево, а не весь репозиторий.

Вот пример "работает для меня":

% git archive --prefix foo/ --remote <url>/foo.git my-tag | tar -xf -
0 голосов
/ 09 августа 2010

-b предназначен для извлечения ветки, а не тега.Вот почему говорится, что удаленный филиал не найден; -)

0 голосов
/ 09 августа 2010

Клонирование непосредственно в тег, побеждает меня намеренно.

Но команда, которую вы используете, на самом деле используется для клонирования ветви репозитория. Таким образом, вы фактически запрашиваете название ветки mytag из репозитория. mytag ветка явно не находится в вашем удаленном хранилище.

И я не думаю, что есть прямой способ клонировать новый тег. Вы должны клонировать, а затем применить теги или извлечь теги удаленного репозитория явно, используя git fetch --tags $URL.

Редактировать при ответе:

Хорошо, развертывание из тега - это распространенный стиль использования. Поскольку код, как правило, помечается один раз в значительном состоянии. Вы можете оформить заказ mytag, как только вы клонировали и получили теги из удаленных репозиториев.

git checkout mytag

или даже

git checkout -b mytagbranch mytag

и продолжить развертывание.

0 голосов
/ 09 августа 2010

Вы находитесь в отдельной голове после mytag git checkout?

Возможно, что mytag не находится в пространстве имен "refs/heads/" (для HEAD филиалов)foo.git, но все еще ссылается на действительный коммит.

Это объясняет предупреждение в git clone, тогда как git checkout работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...