Вопрос: Загрузите конкретный тег с Git


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

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

Но имя версии - Tagged release 1.1.5"согласно сайту.

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

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

И я получил что-то - каталог, кучу подкаталогов и т. Д.

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


1639


источник


Ответы:


$ git clone

предоставит вам весь репозиторий.

После клона вы можете перечислить теги с помощью $ git tag -lа затем проверить конкретный тег:

$ git checkout tags/<tag_name>

Еще лучше, проверить и создать ветку (иначе вы будете в ветви, названной после номера версии тега):

$ git checkout tags/<tag_name> -b <branch_name>

2530



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

Будет клонировать репо и оставить вас на теге, который вас интересует.

Документация для 1.8.0 git clone состояния.

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


247



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


94



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

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

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


79



Вы можете использовать git-архив для загрузки tar-шара для данного тега или фиксации 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. Заметки:

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

70



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


40



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

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

или просто введите тип

git fetch <remote>

Затем проверьте доступные теги

git tag -l

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

git checkout tags/<tag_name>

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


21



I checked the git checkout documentation, it revealed one interesting thing:

git checkout -b <new_branch_name> <start_point> , where the <start_point> is the name of a commit at which to start the new branch; Defaults to HEAD

So we can mention the tag name( as tag is nothing but a name of a commit) as, say:

>> git checkout -b 1.0.2_branch 1.0.2
later, modify some files
>> git push --tags

P.S: In Git, you can't update a tag directly(since tag is just a label to a commit), you need to checkout the same tag as a branch and then commit to it and then create a separate tag.


14



If your tags are sortable using the linux sort command, use this:

git tag | sort -n | tail -1

eg. if git tag returns:

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

git tag | sort -n | tail -1 will output:

v1.0.5

git tag | sort -n | tail -2 | head -1 will output:

v1.0.4

(because you asked for the second most recent tag)

to checkout the tag, first clone the repo, then type:

git checkout v1.0.4

..or whatever tag you need.


14



git fetch <gitserver> <remotetag>:<localtag>

===================================

I just did this. First I made sure I knew the tag name spelling.

git ls-remote --tags gitserver; : or origin, whatever your remote is called

This gave me a list of tags on my git server to choose from. The original poster already knew his tag's name so this step is not necessary for everyone. The output looked like this, though the real list was longer.

8acb6864d10caa9baf25cc1e4857371efb01f7cd    refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2    refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518    refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3    refs/tags/Fix_110

I picked the tag I wanted and fetched that and nothing more as follows.

git fetch gitserver Fix_110

I then tagged this on my local machine, giving my tag the same name.

git tag Fix_110 FETCH_HEAD

I didn't want to clone the remote repository as other people have suggested doing, as the project I am working on is large and I want to develop in a nice clean environment. I feel this is closer to the original questions "I'm trying to figure out how do download A PARTICULAR TAG" than the solution which suggests cloning the whole repository. I don't see why anyone should have to have a copy of Windows NT and Windows 8.1 source code if they want to look at DOS 0.1 source code (for example).

I also didn't want to use CHECKOUT as others have suggested. I had a branch checked out and didn't want to affect that. My intention was to fetch the software I wanted so that I could cherry-pick something and add that to my development.

There is probably a way to fetch the tag itself rather than just a copy of the commit that was tagged. I had to tag the fetched commit myself. EDIT: Ah yes, I have found it now.

git fetch gitserver Fix_110:Fix_110

Where you see the colon, that is remote-name:local-name and here they are the tag names. This runs without upsetting the working tree etc. It just seems to copy stuff from the remote to the local machine so you have your own copy.

git fetch gitserver --dry-run Fix_110:Fix_110

with the --dry-run option added will let you have a look at what the command would do, if you want to verify its what you want. So I guess a simple

git fetch gitserver remotetag:localtag

is the real answer.

=

A separate note about tags ... When I start something new I usually tag the empty repository after git init, since

git rebase -i XXXXX 

requires a commit, and the question arises "how do you rebase changes that include your first software change?" So when I start working I do

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

i.e. create a commit before my first real change and then later use

git rebase -i EMPTY 

if I want to rebase all my work, including the first change.


13



Working off of Peter Johnson's answer, I created a nice little alias for myself:

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

aka 'git checkout latest tag'.

This relies on the GNU version of sort, which appropriately handles situations like the one lOranger pointed out:

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

If you're on a mac, brew install coreutils and then call gsort instead.


7



try:

git clone -b <name_of_the_tag> <repository_url> <destination>

5