Я'пытаюсь понять, как можно загрузить определенный тег Git-репозитория - он на одну версию отстает от текущей версии.
Я видел, что на веб-странице git есть тег для предыдущей версии, с именем объекта в виде какого-то длинного шестнадцатеричного числа.
Но имя версии - "Tagged release 1.1.5
" согласно сайту.
Я попробовал выполнить команду следующим образом (имена изменены):
git clone http://git.abc.net/git/abc.git my_abc
И я действительно получил что-то - каталог, кучу подкаталогов и т.д.
Если это весь репозиторий, то как мне добраться до нужной мне версии? Если нет, то как мне скачать именно эту версию?
$ git clone
предоставит вам весь репозиторий.
После клонирования можно составить список тегов с помощью $ git tag -l
и затем проверить конкретный тег:
$ git checkout tags/<tag_name>
А ещё лучше - проверить и создать ветку (иначе вы окажетесь в ветке, названной по номеру ревизии тега):
$ git checkout tags/<tag_name> -b <branch_name>
git clone --branch my_abc http://git.abc.net/git/abc.git
Будут клонировать РЕПО и оставит вас на теге, который вас интересует.
Документация для 1.8.0 от клон git государства.
--отделение также может иметь теги и отрывает головы, которые совершают в результате репозитория.
Для проверки только определенного тега для развертывания, я использую, например:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
Это, кажется, самый быстрый способ, чтобы проверить код из удаленного репозитория, если только интерес в последнем коде, а не в полный репозиторий. Таким образом, это напоминает 'СВН со' команда.
Примечание: В в Git руководство, передавая флаг - глубина
подразумевает --один-филиал
по умолчанию.
--глубина <глубина>
создавайте мелких клонов с историей обрезается до указанного количества коммитов. Предполагает --один-ветку, если-нет-один-филиала выдается за историю возле кончики всех ветвей. Если вы хотите подмодулей клон неглубоко, также проходят --мелкое-подмодулей.
Я не специалист по git, но думаю, что это должно работать:
git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc
ИЛИ
git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc
Второй вариант создает новую ветку на основе тега, что позволяет избежать 'отсоединенного HEAD'. (git-checkout manual)
Каждое git-репо содержит всю историю ревизий, поэтому клонирование репо дает доступ к последнему коммиту, а также ко всем предыдущим, включая искомый тег.
Вы можете использовать git archive для загрузки tar-шара для заданного тега или идентификатора коммита:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
Вы также можете экспортировать zip-архив тега.
Вывести список тегов:
git tag
0.0.1
0.1.0
Экспортировать метку:
git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
Примечания:
Используйте --один-филиал
переключатель (доступно в ГИТ 1.7.10). Синтаксис:
git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]
Например:
git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5
Преимущество: git будет принимать объекты и (нужно) решить дельт для указанной ветке только/таг - при выезде точно такой же объем файлов! В зависимости от исходного хранилища, это позволит вам сэкономить много места на диске. (Плюс, это'll быть намного быстрее.)
сначала принеси все теги в этом конкретном дистанционного
git fetch <remote> 'refs/tags/*:refs/tags/*'
или просто тип
git fetch <remote>
Затем проверьте доступные теги
git tag -l
затем переключиться на что конкретного тега, используя следующую команду
git checkout tags/<tag_name>
Надеюсь это поможет вам!
Если теги сортируемых с помощью команды Линукс "сортировка", используйте это:
git tag | sort -n | tail -1
например. если возвращает ГИТ тегом
:
v1.0.1
v1.0.2
v1.0.5
v1.0.4
тег в Git | сортировка -Н | хвост -1` будет выводить:
v1.0.5
тег в Git | сортировка -Н | хвост -2 | руководитель -1` будет выводить:
v1.0.4
(потому что вы попросили для второго последнего тега)
чтобы оформить тег, впервые клонируете репозиторий, затем введите:
git checkout v1.0.4
..или какой тег нужен.
git fetch <gitserver> <remotetag>:<localtag>
===================================
Я просто сделал это. Сначала я убедился, что я знал имя тега орфографии.
git ls-remote --tags gitserver; : or origin, whatever your remote is called
Это дало мне список теги на моем сервере Git, чтобы выбрать из. Оригинальный плакат уже знал, что его тег's имя, так что этот шаг не является обязательным для всех. Вывод выглядел так, хотя реальный список был больше.
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110
Я выбрал тег я хотел и за уши, что и ничего как следует.
git fetch gitserver Fix_110
Я тогда записал на моей локальной машине, давая бирка с тем же именем.
git tag Fix_110 FETCH_HEAD
Я не'т хотим, чтобы клонировать удаленный репозиторий, как и другие люди предлагали делать, так как проект я работаю над большой и я хочу развиваться в хорошей чистой обстановке. Я считаю, что это ближе к оригиналу вопросов "Я'м пытаясь выяснить, как скачать определенным тегом" в чем решение, которое предлагает клонировать весь репозиторий целиком. Я не'т вижу, почему кто-либо должен иметь копию Windows NT и Windows 8.1 исходный код, если они хотят выглядеть в DOS 0.1 исходного кода (например).
Также Я'т хотите использовать checkout как другие предложили. У меня была ветка проверили, и я'т хотим, чтобы повлиять на это. Моим намерением было принести программного обеспечения я хотел, чтобы я мог выбрать что-то и добавить, что в моем развитии.
Вероятно, существует способ получить сам тег, а не просто копия коммитом, который был помечен. Мне пришлось пометить извлечена вверяюсь. Правка: Ах да, я нашел его сейчас.
git fetch gitserver Fix_110:Fix_110
Где вы видите двоеточие, то есть дистанционным название:локальное имя и вот они имена тегов. Это выполняется без нарушения рабочего дерева и т. д. Это только кажется, чтобы скопировать материал с удаленного на локальный компьютер, так что вы иметь свой собственный экземпляр.
git fetch gitserver --dry-run Fix_110:Fix_110
с опцией -- "сухой ход" добавили позволит вам взглянуть на то, что команда будет делать, если вы хотите, чтобы убедиться, что вы хотите. Так что я думаю простой
git fetch gitserver remotetag:localtag
это реальный ответ.
=
Отдельная заметка про теги ... когда я начинаю что-то новое я обычно тег пустой репозиторий после инициализации мерзавец, поскольку
git rebase -i XXXXX
требуется зафиксировать, и возникает вопрос "как вы перебазировать изменения, которые включают в свой первой смены программного обеспечения?" Так, когда я начну работать я
git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY
т. е. создать коммит перед моим первым реальным изменениям, а затем используют
git rebase -i EMPTY
если я хочу, чтобы перебазировать вся моя работа, включая первую смену.
Я проверил ГИТ документации по кассе, он показал одну интересную вещь:
ГИТ кассе -б &ЛТ;new_branch_name&ГТ; &ЛТ;start_point&ГТ; , где &ЛТ;start_point&ГТ; имя коммита > в которых, чтобы начать новую ветвь; по умолчанию в голове
Поэтому мы можем упомянуть имя тега( тег ничего, кроме имени коммита), как, скажем:
&ГТ;&ГТ; ГИТ кассе -б 1.0.2_branch 1.0.2 <БР/> позже, изменить некоторые файлы <БР/> &ГТ;&ГТ; ГИТ пуш-теги
P. S: в Git, вы можете'т обновить тег непосредственно(поскольку тег-это просто метка для фиксации), вам нужно оформить такой же тег как филиал, а затем фиксировать его, а затем создать отдельный тег.
Отработка Питер Джонсон'ы ответ, я создал маленький псевдоним для себя:
в
alias gcolt="git checkout $(git tag | sort -V | tail -1)"
он же 'Git в кассе последний тег'.
Это зависит от версии GNU sort, который правильно обрабатывает ситуации, как lOranger отметил:
v1.0.1
...
v1.0.9
v1.0.10
Если вы'вновь на Mac, зелье установите coreutils и тогда вместо вызова gsort.
попробуйте:
git clone -b <name_of_the_tag> <repository_url> <destination>
Если вы хотите посмотреть версии файлов тега указывает, вы можете сделать git в кассе, хотя это добавляет свой репозиторий в “отрезанная голова” государства, которое имеет ряд побочных эффектов:
$ git checkout 2.0.0
Note: checking out '2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image
В “отрезанная голова” государства, если вы вносите изменения, а затем создать коммит, тэг останется прежним, но ваш новый коммит не принадлежу ни к какой ветке и будет недоступен, кроме точной фиксации хэш. Таким образом, если вам нужно внести изменения—говорят, что вы исправляете баг на старой версии, например—вы, как хотите создайте ветку:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
Если вы делаете это, и делаете коммит, ваша ветка version2 будет немного отличаться от вашей версии v2.0.0 тега, поскольку она будет двигаться вперед с новыми изменениями, так что будьте осторожны.
Я делаю это через на GitHub API-интерфейс:
curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\
tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \