Próbuję dowiedzieć się, w jaki sposób mogę pobrać konkretny tag repozytorium Git - jest to jedna wersja za bieżącą wersją.
Widziałem, że na stronie internetowej git był tag poprzedniej wersji, z nazwą obiektu czegoś o długiej liczbie szesnastkowej.
Ale nazwa strony to „ Tagged release 1.1.5
” zgodnie z witryną.
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 to całe repozytorium, jak mogę uzyskać wersję, której szukam? Jeśli nie, jak mogę pobrać tę konkretną wersję?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Działa to tylko wtedy, gdy nie masz oddziału o tej samej nazwie (w zależności od metodologii może się to nigdy nie zdarzyć).git checkout -b new-branch tag-name
. Teraz sklonuj swoją nową gałąź. Kiedy tylko chcemy, możemy usunąć nowy oddział.Odpowiedzi:
da ci całe repozytorium.
Po sklonowaniu możesz wyświetlić tagi za pomocą,
$ git tag -l
a następnie pobrać konkretny tag:Co więcej, sprawdź i utwórz gałąź (w przeciwnym razie będziesz w gałęzi nazwanej na podstawie numeru zmiany znacznika):
źródło
-b
flagę git, aby utworzył nową gałąź i podaj nazwę gałęzi:git checkout <tag_name> -b <branch_name>
1.8.3.5
i nowszych--branch <tag ref>
powinno ono umożliwiać pobieranie repozytorium zaczynając<tag ref>
od HEAD repo; w połączeniu z--depth 1
wykona płytką kasę. Zobacz stackoverflow.com/a/21699307/1695680Sklonuje repozytorium i pozostawi Cię na tagu, który Cię interesuje.
Dokumentacja dla 1.8.0 stanów klonowania git .
źródło
--depth 1
aby uniknąć pobierania jakichkolwiek zatwierdzeń długoterminowych.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
jakość to nazwa branży, którą chcemy przy okazji.Do sprawdzenia tylko danego tagu do wdrożenia używam np .:
To wydaje się być najszybszym sposobem na sprawdzenie kodu ze zdalnego repozytorium, jeśli interesuje go tylko najnowszy kod zamiast pełnego repozytorium. W ten sposób przypomina polecenie „svn co”.
Uwaga: Zgodnie z instrukcją Git przekazanie
--depth
flagi--single-branch
domyślnie oznacza .źródło
--depth n
implikuje--single-branch
. Nie potrzebujesz obu.Nie jestem ekspertem od gitów, ale myślę, że to powinno działać:
LUB
Druga odmiana ustanawia nową gałąź opartą na znaczniku, co pozwala uniknąć „odłączonej HEAD”. (instrukcja git-checkout)
Każde repozytorium git zawiera całą historię zmian, więc klonowanie repozytorium daje dostęp do ostatniego zatwierdzenia, a także wszystkiego, co było wcześniej, w tym znacznika, którego szukasz.
źródło
git checkout -b b1.5.0 v1.5.0
podczas sprawdzania wersji w gałęzi „gh-pages”, aby pomyślnie przesłać na strony Github. Ta Istota pisałem up może pomóc inni re: Filia / tag / submodules ... gist.github.com/1064750cd
sięabc/
najpierw, zanim można kasie oddziałucd
.Możesz użyć archiwum git, aby pobrać tar tar dla danego znacznika lub zatwierdzić identyfikator:
Możesz także wyeksportować archiwum zip tagu.
Tagi listy:
Wyeksportuj tag:
Uwagi:
źródło
git archive
prosi mnie o hasło, gdy wszystko, co chcę zrobić, to pobrać z publicznego repozytorium. Jak sprawić, by używał http zamiast ssh?fatal: Operation not supported by protocol.
iUnexpected end of command stream
. Alternatywnie może również zwrócićfatal: The remote end hung up unexpectedly
błąd.Użyj
--single-branch
przełącznika (dostępny od Git 1.7.10) . Składnia jest następująca:Na przykład:
Korzyści: Git otrzyma obiekty i (musi) rozwiązać delty tylko dla określonej gałęzi / tagu - jednocześnie sprawdzając dokładnie taką samą liczbę plików! W zależności od repozytorium źródłowego pozwoli to zaoszczędzić dużo miejsca na dysku. (Plus będzie znacznie szybciej.)
źródło
najpierw pobierz wszystkie tagi z tego konkretnego pilota
lub po prostu wpisz
Następnie sprawdź dostępne tagi
następnie przełącz się na ten konkretny znacznik za pomocą polecenia poniżej
Mam nadzieję, że to ci pomoże!
źródło
git tag
doda tag, a jednocześniegit tag -l
wyświetli listę dostępnych tagówJeśli tagi można sortować za pomocą
sort
polecenia linux , użyj tego:na przykład. jeśli
git tag
zwraca:git tag | sort -n | tail -1
wyświetli:git tag | sort -n | tail -2 | head -1
wyświetli:(ponieważ poprosiłeś o drugi najnowszy tag)
aby pobrać tag, najpierw sklonuj repozytorium, a następnie wpisz:
... lub cokolwiek potrzebujesz.
źródło
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
zamiastsort -n
. Ten pierwszy poprawnie obsługuje wersje, które niekoniecznie są numeryczne, np. „1.2.3”. Rozumie również, że „0.4.10” następuje po „0.4.1”, a nie po „0.4.2”, co-n
da ci.Sprawdziłem dokumentację kasy git , ujawniła jedną interesującą rzecz:
Możemy więc wspomnieć o nazwie znacznika (ponieważ znacznik jest niczym innym jak nazwą zatwierdzenia), jak powiedzmy:
PS: W Git nie możesz aktualizować tagu bezpośrednio (ponieważ tag jest tylko etykietą do zatwierdzenia), musisz sprawdzić ten sam tag jako gałąź, a następnie zatwierdzić go, a następnie utworzyć osobny tag.
źródło
===================================
Właśnie to zrobiłem. Najpierw upewniłem się, że znam pisownię nazwy tagu.
To dało mi listę tagów na moim serwerze git do wyboru. Oryginalny plakat znał już jego tag, więc ten krok nie jest konieczny dla wszystkich. Dane wyjściowe wyglądały tak, chociaż rzeczywista lista była dłuższa.
Wybrałem tag, który chciałem, i przyniosłem to, i nic więcej, jak następuje.
Następnie oznaczyłem to tagiem na moim komputerze lokalnym, nadając tagowi tę samą nazwę.
Nie chciałem klonować zdalnego repozytorium, jak sugerowali inni, ponieważ projekt, nad którym pracuję, jest duży i chcę się rozwijać w ładnym, czystym środowisku. Wydaje mi się, że jest to bliższe oryginalnym pytaniom „Próbuję dowiedzieć się, jak pobrać SZCZEGÓŁOWY TAG” niż rozwiązanie sugerujące klonowanie całego repozytorium. Nie rozumiem, dlaczego ktoś powinien mieć kopię kodu źródłowego Windows NT i Windows 8.1, jeśli chce na przykład zobaczyć kod źródłowy DOS 0.1.
Nie chciałem też używać 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 wybrać coś i dodać to do mojego rozwoju.
Prawdopodobnie istnieje sposób, aby pobrać sam tag, a nie tylko kopię zatwierdzonego tagu. Sam musiałem oznaczyć pobrane zobowiązanie. EDYCJA: Ach tak, znalazłem to teraz.
Gdzie widzisz dwukropek, to jest nazwa-zdalna: nazwa-lokalna i tutaj są to nazwy znaczników. Działa to bez naruszania działającego drzewa itp. Wygląda na to, że kopiujesz rzeczy ze zdalnego na lokalny komputer, więc masz własną kopię.
z dodaną opcją --dry-run pozwoli ci zobaczyć, co zrobi polecenie, jeśli chcesz zweryfikować, co chcesz. Myślę więc, że prosty
to prawdziwa odpowiedź.
=
Oddzielna uwaga na temat tagów ... Kiedy zaczynam coś nowego, zwykle odtąd oznaczam puste repozytorium po git init
wymaga zatwierdzenia, a powstaje pytanie „w jaki sposób wyliczyć zmiany obejmujące pierwszą zmianę oprogramowania?” Kiedy zaczynam pracę, robię to
tzn. utwórz zatwierdzenie przed moją pierwszą prawdziwą zmianą, a następnie użyj
jeśli chcę zmienić podstawę całej mojej pracy, w tym pierwszej zmiany .
źródło
Opierając się na odpowiedzi Petera Johnsona, stworzyłem dla siebie ładny alias:
aka „git checkout latest tag”.
Zależy to od rodzaju GNU, która odpowiednio radzi sobie z sytuacjami takimi, jak wskazał LOranger:
Jeśli używasz komputera Mac,
brew install coreutils
zamiast tego zadzwoń do gsort.źródło
próbować:
źródło
Sprawdzanie tagów
Jeśli chcesz wyświetlić wersje plików, na które wskazuje znacznik, możesz zrobić kasę git, ale powoduje to, że repozytorium znajduje się w stanie „odłączonej HEAD”, co ma pewne niepożądane skutki uboczne:
W stanie „odłączony HEAD”, jeśli wprowadzisz zmiany, a następnie utworzysz zatwierdzenie, tag pozostanie taki sam, ale twój nowy zatwierdzenie nie będzie należeć do żadnej gałęzi i będzie nieosiągalny, z wyjątkiem dokładnego skrótu zatwierdzenia. Dlatego jeśli chcesz wprowadzić zmiany - na przykład naprawiasz błąd w starszej wersji - na ogół będziesz chciał utworzyć gałąź:
Jeśli to zrobisz i zatwierdzisz, twoja gałąź version2 będzie się nieznacznie różnić od tagu v2.0.0, ponieważ będzie postępować z nowymi zmianami, więc bądź ostrożny.
źródło
Robię to poprzez interfejs API github:
źródło