Pobierz konkretny tag za pomocą Git

Próbuję dowiedzieć się, jak mogę pobrać konkretny tag z repozytorium Git - jest to jedna wersja za bieżącą wersją.

Widziałem, że na stronie git był znacznik dla poprzedniej wersji, z nazwą obiektu o długim numerze hex.

Ale nazwa wersji to "Tagged release 1.1.5 " Według strony.

Próbowałem takiego polecenia (ze zmienionymi nazwami):

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

I dostałem coś-katalog, kilka podkatalogów itp.

Jeśli jest całe repozytorium, jak dostać się do wersji, której szukam? Jeśli nie, jak mogę pobrać tę konkretną wersję?

Author: Neil Graham, 2009-04-27

15 answers

$ git clone

Da ci całe repozytorium.

Po klonie możesz wyświetlić znaczniki z $ git tag -l, a następnie wypisać konkretny tag:

$ git checkout tags/<tag_name>

Jeszcze lepiej, Kasuj i utwórz gałąź (w przeciwnym razie będziesz na gałęzi nazwanej po numerze rewizji tagu):

$ git checkout tags/<tag_name> -b <branch_name>
 2597
Author: besen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 11:19:45
git clone --branch my_abc http://git.abc.net/git/abc.git

Sklonuje repo i pozostawi Cię na znaczniku, który Cię interesuje.

Dokumentacja dla 1.8.0 git clone stwierdza.

--branch może również pobierać znaczniki i odłączać głowicę od tego commita w wynikowym repozytorium.

 295
Author: Toni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-10 12:15:00

Nie jestem ekspertem od Gita, ale myślę, że to powinno zadziałać:

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

Lub

git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc

Druga odmiana ustanawia nową gałąź opartą na znaczniku, co pozwala uniknąć "odłączonej głowy". (Git-checkout manual)

Każdy repo git zawiera całą historię zmian, więc klonowanie repo daje Ci dostęp do najnowszego commita, oraz wszystkiego, co było wcześniej, łącznie z szukanym tagiem.

 94
Author: grossvogel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-20 15:07:01

Do sprawdzenia tylko danego tagu do wdrożenia używam np.:

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

Wydaje się, że jest to najszybszy sposób na Sprawdzenie kodu ze zdalnego repozytorium, jeśli interesuje go tylko najnowszy kod, a nie kompletne repozytorium. W ten sposób przypomina polecenie "svn co".

 93
Author: Yuan HOng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 02:35:15

Możesz użyć git archive aby pobrać tar ball dla danego tagu lub commit id:

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

Możesz również wyeksportować archiwum zip znacznika.

  1. Tagi Listy:

    git tag
    
    0.0.1
    0.1.0
    
  2. Eksportuj tag:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
    
  3. Uwagi:

    • nie musisz określać formatu. Zostanie odebrany przez nazwę pliku wyjściowego.
    • podanie prefiksu spowoduje eksport kodu do katalogu (jeśli dodasz slash).
 71
Author: Chris J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-06 00:45:02

Użyj przełącznika --single-branch ( dostępne od Git 1.7.10) . Składnia to:

git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>] 

Na przykład:

git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5

Korzyści: Git będzie odbierał obiekty i (musiał) rozwiązywać delty tylko dla określonej gałęzi / tagu-sprawdzając dokładnie taką samą ilość plików! W zależności od repozytorium źródłowego zaoszczędzi to dużo miejsca na dysku. (Plus, będzie znacznie szybciej.)

 41
Author: eyecatchUp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 06:28:00

Najpierw pobierz wszystkie znaczniki z tego konkretnego pilota

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

Lub po prostu wpisz

git fetch <remote>

Następnie sprawdź dostępne Tagi

git tag -l

Następnie przełącz się na ten konkretny znacznik używając poniższego polecenia

git checkout tags/<tag_name>

Mam nadzieję, że to ci pomoże!

 21
Author: tk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 18:03:10

Sprawdziłam dokumentację Git checkout , ujawniła ona jedną ciekawą rzecz:

Git checkout-b , gdzie jest nazwą commita w którym założyć nowy oddział; Domyślnie HEAD

Możemy więc podać nazwę znacznika (ponieważ znacznik jest niczym innym jak nazwą commita) jak np.:

> > git checkout-b 1.0. 2_branch 1.0.2
później zmodyfikuj niektóre pliki
> > git push -- tagi

P. S: w Git, nie możesz bezpośrednio zaktualizować znacznika(ponieważ tag jest tylko etykietą do zatwierdzenia), musisz wymeldować ten sam znacznik co gałąź, następnie zatwierdzić do niego, a następnie utworzyć osobny znacznik.

 14
Author: None-da,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-26 14:39:00

Jeśli Twoje tagi są sortowane za pomocą polecenia linux sort, Użyj tego:

git tag | sort -n | tail -1

Np. if git tag zwraca:

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

git tag | sort -n | tail -1 wyjście:

v1.0.5

git tag | sort -n | tail -2 | head -1 wyjście:

v1.0.4

(ponieważ poprosiłeś o drugi najnowszy tag)

Aby sprawdzić tag, najpierw Sklonuj repo, a następnie wpisz:

git checkout v1.0.4

..albo jakąkolwiek metkę potrzebujesz.

 14
Author: Peter Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 05:58:04
git fetch <gitserver> <remotetag>:<localtag>

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

Właśnie to zrobiłem. Najpierw upewniłem się, że znam pisownię nazwy tagu.
git ls-remote --tags gitserver; : or origin, whatever your remote is called

To dało mi listę tagów na moim serwerze git do wyboru. Oryginalny plakat znał już Nazwę jego tagu, więc ten krok nie jest konieczny dla wszystkich. Wyjście wyglądało tak, choć prawdziwa lista była dłuższa.

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

Wybrałem metkę, którą chciałem i ściągnąłem to i nic więcej w następujący sposób.

git fetch gitserver Fix_110

Otagowałem to na moja lokalna maszyna, nadająca metce tę samą nazwę.

git tag Fix_110 FETCH_HEAD

Nie chciałem sklonować zdalnego repozytorium, jak sugerowali inni, ponieważ projekt, nad którym pracuję, jest duży i chcę rozwijać się w ładnym, czystym środowisku. Wydaje mi się, że jest to bliższe oryginalnym pytaniom "próbuję dowiedzieć się, jak pobrać konkretny TAG" niż rozwiązaniu, które sugeruje klonowanie całego repozytorium. Nie rozumiem po co komu Kopia Windows NT i Windows 8.1 source Kod, jeśli chcą spojrzeć na kod źródłowy DOS 0.1 (na przykład).

Nie chciałem również korzystać z CHECKOUT, jak sugerowali inni. Sprawdziłem oddział i nie chciałem na to wpływać. Moim zamiarem było pobranie oprogramowania, które chciałem, aby móc coś wybrać i dodać to do mojego rozwoju.

Prawdopodobnie istnieje sposób na pobranie samego znacznika,a nie tylko kopii commita, który został oznaczony. Sam musiałem oznaczyć pobrane zobowiązanie. EDIT: Ach tak, znalazłem teraz.

git fetch gitserver Fix_110:Fix_110

Gdzie widzisz dwukropek, to jest remote-name:local-name I tutaj są to nazwy znaczników. Działa to bez zakłócania pracującego drzewa itp. Wydaje się, że kopiuje rzeczy z pilota do lokalnej maszyny, więc masz własną kopię.

git fetch gitserver --dry-run Fix_110:Fix_110

Z dodaną opcją --dry-run pozwoli Ci przyjrzeć się temu, co polecenie zrobi, jeśli chcesz zweryfikować to, co chcesz. Więc chyba proste

git fetch gitserver remotetag:localtag

To prawdziwa odpowiedź.

=

A osobna notka o tagach ... Kiedy uruchamiam coś nowego, Zwykle oznaczam puste repozytorium po Git init, ponieważ

git rebase -i XXXXX 

Wymaga commita i pojawia się pytanie " w jaki sposób można zmienić dane, które zawierają pierwszą zmianę oprogramowania?"Więc kiedy zaczynam pracę, robię

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

Tzn. Utwórz commit przed moją pierwszą prawdziwą zmianą, a następnie użyj

git rebase -i EMPTY 

Jeśli chcę zmienić wszystkie moje prace, łącznie z pierwszą zmianą .

 13
Author: user3070485,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 10:06:31

Na podstawie odpowiedzi Petera Johnsona stworzyłem sobie fajny pseudonim: {]}

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

Aka 'Git checkout latest tag'.

Opiera się to na wersji GNU sort, która odpowiednio radzi sobie z sytuacjami, jak wskazał lOranger:

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

Jeśli jesteś na komputerze mac, brew install coreutils i zamiast tego zadzwoń do gsort.

 7
Author: billwanjohi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-08 23:58:38

Try:

git clone -b <name_of_the_tag> <repository_url> <destination>
 5
Author: Kamil Zając,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 13:25:06

Sprawdzanie tagów

Jeśli chcesz zobaczyć wersje plików, na które wskazuje znacznik, możesz wykonać polecenie Git, choć spowoduje to, że Twoje repozytorium stanie się "odłączone", co ma złe skutki uboczne:

$ 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

W stanie "odłączona Głowa", jeśli wprowadzisz zmiany, a następnie utworzysz commit, znacznik pozostanie taki sam, ale twój nowy commit nie będzie należał do żadnej gałęzi i będzie nieosiągalny, z wyjątkiem dokładnego skrótu commita. Tak więc, jeśli chcesz wprowadzić zmiany-powiedz naprawiasz błąd w starszej wersji, na przykład-ogólnie będziesz chciał utworzyć gałąź:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

Jeśli zrobisz to i stworzysz commit, twoja gałąź version2 będzie nieco inna niż twój tag v2. 0.0, ponieważ będzie się rozwijała wraz z nowymi zmianami, więc bądź ostrożny.

 4
Author: artamonovdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-30 12:19:41

Robię to poprzez 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 ; \
 3
Author: J0hnG4lt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-01 00:08:53

Clone z opcją-b pomaga również: git clone https://git01.codeplex.com/aspnetwebstack.git - b v2. 0

Poniższy post wykorzystuje powyższą opcję do pobrania asp.net mvc: http://vijayt.com/Post/Setting-up-aspnet-mvc-for-debugging-in-your-system

 2
Author: vijayst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-01 04:40:46