Загрузите определенный тег с помощью Git



Я пытаюсь выяснить, как я могу загрузить конкретный тег репозитория Git - это одна версия за текущей версией.



Я видел, что на веб-странице git был тег для предыдущей версии, с именем объекта чего-то длинного шестнадцатеричного числа.



но имя версии "Tagged release 1.1.5" по Сайте.



я попробовал такую команду (с измененными именами):



git clone http://git.abc.net/git/abc.git my_abc


и я действительно получил что - то-каталог, кучу поддиректории и т. д.



Если это весь репозиторий, как мне получить версию, которую я ищу? Если нет, то как мне загрузить эту конкретную версию?

855   15  

15 ответов:

$ 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 clone государства.

--branch также может принимать теги и отсоединяет голову при этом фиксации в результирующем репозитории.

Я не эксперт 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

второй вариант устанавливает новую ветвь на основе тега, что позволяет избежать "отсоединенной головы". (git-checkout manual)

каждое РЕПО git содержит всю историю ревизий, поэтому клонирование РЕПО дает вам доступ к последней фиксации, а также ко всему, что было раньше, включая тег, который вы ищете.

для проверки только заданного тега для развертывания я использую, например:

git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

это, кажется, самый быстрый способ проверить код из удаленного репозитория, если у вас есть только интерес к самому последнему коду, а не в полном репозитории. Таким образом, он напоминает команду "svn co".

вы можете использовать git архив для загрузки tar ball для данного тега или фиксации id:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

вы также можете экспортировать zip-архив тега.

  1. список тэгов:

    git tag
    
    0.0.1
    0.1.0
    
  2. экспорт тег:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
    
  3. Примечания:

    • вам не нужно указывать формат. Он будет подобран по имени выходного файла.
    • указание префикса приведет к экспорту кода в a каталог (если вы включаете завершающий Слэш).

использовать --single-branch переключатель(доступно с Git 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 будет получать объекты и (нужно) разрешать дельты только для указанной ветви/тега - при проверке точно такого же количества файлов! В зависимости от исходного репозитория это сэкономит вам много места на диске. (Кроме того, это будет намного быстрее.)

сначала извлеките все теги в этом конкретном удаленном

git fetch <remote> 'refs/tags/*:refs/tags/*'

или просто типа

git fetch <remote>

затем проверьте наличие доступных тегов

git tag -l

затем переключитесь на этот конкретный тег, используя команду ниже

git checkout tags/<tag_name>

надеюсь, что это поможет вам!

Я проверил git checkout documentation, Он показал одну интересную вещь:

git checkout-b , где - это имя фиксации с чего начать новую ветку; По умолчанию HEAD

поэтому мы можем упомянуть имя тега( поскольку тег-это не что иное, как имя фиксации), например:

>> git checkout-b 1.0. 2_branch 1.0.2
позже, изменить некоторые файлы
> > git push --tags

P. S: в Git вы не можете обновить тег напрямую(поскольку тег-это просто метка для фиксации), вам нужно проверить тот же тег, что и ветвь, а затем зафиксировать его, а затем создать отдельный тег.

если ваши теги сортируются с помощью linux sort команда, используйте этот:

git tag | sort -n | tail -1

например. если git tag возвращает:

v1.0.1
v1.0.2
v1.0.5
v1.0.4

git tag | sort -n | tail -1 вывод:

v1.0.5

git tag | sort -n | tail -2 | head -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 на выбор. Оригинальный плакат уже знал имя своего тега, поэтому этот шаг не нужен для всех. Результат выглядел так, хотя реальный список был длиннее.

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, как другие предложили. Я проверил филиал и не хотел влиять на это. Мое намерение состояло в том, чтобы принести программное обеспечение, которое я хотел, чтобы я мог выбрать что-то и добавить это в свою разработку.

вероятно, есть способ получить сам тег, а не просто копию фиксации это было помечено. Я должен был пометить принесенное обязательство сам. EDIT: Ах да, я нашел его сейчас.

git fetch gitserver Fix_110:Fix_110

где вы видите двоеточие, то есть удаленное имя: локальное имя, и здесь они являются именами тегов. Это выполняется без нарушения рабочего дерева и т. д. Кажется, что он просто копирует материал с пульта дистанционного управления на локальную машину, чтобы у вас была своя копия.

git fetch gitserver --dry-run Fix_110:Fix_110

С добавленной опцией -- dry-run вы можете посмотреть, что будет делать команда, если вы хотите проверить ее, что вы хотите. Так что я думаю простой

git fetch gitserver remotetag:localtag

реальный ответ.

=

отдельная заметка о тегах ... Когда я начинаю что-то новое, я обычно помечаю пустой репозиторий после git init, так как

git rebase -i XXXXX 

требует фиксации, и возникает вопрос "как вы перебазировать изменения, которые включают в свой первой смены программного обеспечения?- Поэтому, когда я начинаю работать, я делаю

git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY

т. е. создать фиксацию до моего первого реального изменения, а затем позже используйте

git rebase -i EMPTY 

если я хочу перебазировать всю свою работу,в том числе в первую смену.

отрабатывая ответ Питера Джонсона, я создал себе симпатичный маленький псевдоним:

alias gcolt="git checkout \`git tag | sort -V | tail -1\`"

aka 'git checkout latest tag'.

Это зависит от версии GNU sort, которая соответствующим образом обрабатывает ситуации, подобные той, на которую указал Лорангер:

v1.0.1
...
v1.0.9
v1.0.10

Если вы находитесь на mac,brew install 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, так как он будет двигаться вперед с вашими новыми изменениями, поэтому будьте осторожны.

Я делаю это через API github:

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 ; \

клонирование с опцией-b также помогает: git clone https://git01.codeplex.com/aspnetwebstack.git - b v2. 0

в следующем сообщении используется приведенная выше опция для загрузки asp.net mvc: http://vijayt.com/Post/Setting-up-aspnet-mvc-for-debugging-in-your-system

Comments

    Ничего не найдено.