Я пытаюсь выяснить, как я могу загрузить определенный тег репозитория Git - это одна версия позади текущей версии.
На веб-странице git я увидел тег для предыдущей версии, в котором имя объекта было длинным шестнадцатеричным числом.
Но название версии " Tagged release 1.1.5
" согласно сайту.
Я попробовал команду как это (с измененными именами):
git clone http://git.abc.net/git/abc.git my_abc
И я кое-что получил - каталог, куча подкаталогов и т. Д.
Если это весь репозиторий, как мне найти нужную версию? Если нет, как я могу скачать эту конкретную версию?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Это будет работать только в том случае, если у вас нет ветки с таким же именем, конечно (в зависимости от вашей методологии это может никогда не произойти).git checkout -b new-branch tag-name
, Теперь клонируйте вашу новую ветку. Когда мы захотим, мы можем удалить новую ветку.Ответы:
даст вам весь репозиторий.
После клонирования вы можете перечислить теги с помощью,
$ git tag -l
а затем извлечь конкретный тег:Более того, извлеките и создайте ветку (в противном случае вы попадете на ветку, названную в честь номера версии тега):
источник
-b
флаг, указывающий git, чтобы создать новую ветку, и укажите имя ветви:git checkout <tag_name> -b <branch_name>
1.8.3.5
и новее она--branch <tag ref>
должна позволять вам загружать репозиторий, начиная с вашего<tag ref>
как репозитория HEAD; в сочетании с--depth 1
будет делать поверхностную проверку тегов. См stackoverflow.com/a/21699307/1695680Клонируем репо и оставим вас на интересующем вас теге.
Документация для 1.8.0 состояний git clone .
источник
--depth 1
чтобы не загружать любые текущие коммиты.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
качество - это название отрасли, которую мы хотим.Для проверки только данного тега для развертывания я использую, например:
Это кажется самым быстрым способом извлечения кода из удаленного репозитория, если его интересует только самый последний код, а не полный репозиторий. Таким образом, это напоминает команду 'svn co'.
Примечание: согласно руководству по Git , пропуск
--depth
флага подразумевает--single-branch
по умолчанию.источник
--depth n
подразумевает--single-branch
. Вам не нужны оба.Я не эксперт по git, но я думаю, что это должно работать:
ИЛИ
Второй вариант устанавливает новую ветвь на основе тега, что позволяет вам избежать «отсоединенного HEAD». (руководство по git-checkout)
Каждый репозиторий git содержит всю историю ревизий, поэтому клонирование репозитория дает вам доступ к последнему коммиту, а также ко всему, что было до этого, включая тег, который вы ищете.
источник
git checkout -b b1.5.0 v1.5.0
при проверке версии в ветке «gh-pages», чтобы успешно перейти на Github Pages. Этот Gist, который я написал, мог бы помочь другим: разветвлять / тегировать / подмодули ... gist.github.com/1064750cd
войти в систему,abc/
прежде чем сможете оформить отделениеcd
.Вы можете использовать архив git для загрузки tar-шара для данного тега или идентификатора коммита:
Вы также можете экспортировать zip-архив тега.
Список тегов:
Экспорт тега:
Ноты:
источник
git archive
спрашивает у меня пароль, когда все, что я хочу сделать, это загрузить из публичного репо. Как я могу заставить его использовать http вместо ssh?fatal: Operation not supported by protocol.
иUnexpected end of command stream
ошибок. Кроме того, он также может вернутьfatal: The remote end hung up unexpectedly
ошибку.Используйте
--single-branch
переключатель (доступен с Git 1.7.10) . Синтаксис:Например:
Преимущество: Git будет получать объекты и (нужно) разрешать дельты только для указанной ветви / тега - при проверке одинакового количества файлов! В зависимости от исходного хранилища это сэкономит вам много места на диске. (Плюс, это будет намного быстрее.)
источник
сначала получить все теги в этом конкретном пульте
или просто введите
Затем проверьте наличие тегов
затем переключитесь на этот конкретный тег, используя команду ниже
Надеюсь, это поможет вам!
источник
git tag
добавит тег, в то время какgit tag -l
перечисляет доступные тегиЕсли ваши теги можно сортировать с помощью команды linux
sort
, используйте это:например. если
git tag
возвращается:git tag | sort -n | tail -1
будет выводить:git tag | sort -n | tail -2 | head -1
будет выводить:(потому что вы попросили второй самый последний тег)
чтобы оформить заказ, сначала клонируйте репозиторий, затем введите:
... или любой тег, который вам нужен.
источник
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
вместоsort -n
. Первый правильно обрабатывает версии, которые не обязательно являются числовыми, например, «1.2.3». Он также понимает, что «0.4.10» идет после «0.4.1», а не после «0.4.2», что-n
даст вам.Я проверил документацию git checkout , она обнаружила одну интересную вещь:
Таким образом, мы можем упомянуть имя тега (так как тег - это не что иное, как имя коммита) как, скажем:
PS: В Git вы не можете напрямую обновить тег (так как тег - это просто метка для коммита), вам нужно извлечь тот же тег в виде ветви, а затем зафиксировать его и затем создать отдельный тег.
источник
===================================
Я только что сделал это. Сначала я убедился, что знаю правописание имени тега.
Это дало мне список тегов на моем git-сервере на выбор. Оригинальный постер уже знал имя своего тега, поэтому этот шаг не нужен для всех. Вывод выглядел так, хотя реальный список был длиннее.
Я выбрал метку, которую хотел, и получил ее, и ничего больше, как указано ниже.
Затем я отметил это на своем локальном компьютере, присвоив этому тегу то же имя.
Я не хотел клонировать удаленный репозиторий, как предлагали другие люди, так как проект, над которым я работаю, большой, и я хочу развиваться в хорошей чистой среде. Я чувствую, что это ближе к первоначальным вопросам «Я пытаюсь выяснить, как загрузить A PARTICULAR TAG», чем к решению, которое предполагает клонирование всего хранилища. Я не понимаю, почему кто-то должен иметь копию исходного кода Windows NT и Windows 8.1, если он хочет взглянуть на исходный код DOS 0.1 (например).
Я также не хотел использовать CHECKOUT, как предлагали другие. Я проверил ветку и не хотел влиять на это. Мое намерение состояло в том, чтобы получить программное обеспечение, которое я хотел, чтобы я мог что-то выбрать и добавить это в свою разработку.
Вероятно, есть способ получить сам тег, а не просто копию коммита, который был помечен. Мне пришлось пометить извлеченный коммит сам. РЕДАКТИРОВАТЬ: Ах да, я нашел это сейчас.
Там, где вы видите двоеточие, это remote-name: local-name, а здесь это имена тегов. Это работает без нарушения рабочего дерева и т. Д. Просто кажется, что вы копируете данные с удаленного на локальный компьютер, чтобы у вас была собственная копия.
с добавленной опцией --dry-run вы сможете посмотреть, что будет делать команда, если вы хотите проверить, что вы хотите. Так что я думаю, простой
это реальный ответ.
знак равно
Отдельное примечание о тегах ... Когда я запускаю что-то новое, я обычно отмечаю пустой репозиторий после git init, так как
требует фиксации, и возникает вопрос: «Как вы перебазируете изменения, которые включают ваше первое изменение программного обеспечения?» Поэтому, когда я начинаю работать, я делаю
т.е. создать коммит до моего первого реального изменения, а затем использовать позже
если я хочу перебазировать всю свою работу, включая первое изменение .
источник
Отрабатывая ответ Питера Джонсона, я создал для себя симпатичный маленький псевдоним:
ака 'Git Checkout последний тег'.
Это зависит от GNU-версии sort, которая соответствующим образом обрабатывает ситуации, подобные той, на которую указал lOranger:
Если вы на Mac,
brew install coreutils
а затем вместо этого вызовите gsort.источник
пытаться:
источник
Проверка тегов
Если вы хотите просмотреть версии файлов, на которые указывает тег, вы можете выполнить git checkout, хотя это переводит ваш репозиторий в состояние «detached HEAD», что имеет некоторые неприятные побочные эффекты:
В состоянии «отсоединенный HEAD», если вы вносите изменения, а затем создаете коммит, тег останется прежним, но ваш новый коммит не будет принадлежать какой-либо ветви и будет недоступен, за исключением точного хэша коммита. Таким образом, если вам нужно внести изменения - например, вы исправляете ошибку в более старой версии - вы, как правило, захотите создать ветку:
Если вы сделаете это и сделаете коммит, ваша ветка version2 будет немного отличаться от вашего тега v2.0.0, поскольку она будет продвигаться вперед с вашими новыми изменениями, поэтому будьте осторожны.
источник
Я делаю это через API GitHub:
источник