Jak sklonować określony tag

191

Ze strony podręcznika git-clone (1)

--branch może również pobierać tagi i odłącza HEAD przy tym zatwierdzeniu w wynikowym repozytorium.

próbowałem

git clone --branch <tag_name> <repo_url>

Ale to nie działa. Zwraca:

warning: Remote branch 2.13.0 not found in upstream origin, using HEAD instead

Jak korzystać z tego parametru?

Jiang Jun
źródło
możliwy duplikat Pobierz konkretny tag z Git
Victor Sergienko
2
Masz rację, ale mała różnica. Kiedy zadaję to pytanie, w mojej sytuacji musiałem to zrobić w jednym wierszu i muszę użyć clone, i utknąłem na „dlaczego - oddział nie działa”. Użyto najlepszej odpowiedzi z tego adresu URL clone-> checkout, która nie może rozwiązać mojego pytania. :)
Jiang Jun

Odpowiedzi:

322
git clone --branch <tag_name> <repo_url>

To polecenie nie jest obsługiwane w git 1.7.9.5.

Używam git 1.8.3.5 i działa

Erik Saunier
źródło
92
FYI: Określ także, --depth 1aby uniknąć pobierania jakichkolwiek zatwierdzeń długoterminowych.
Acumenus
1
Działa dobrze w git 1.8.4.1
taco
To nie działa Po sklonowaniu, jeśli to zrobisz, git tagnie wyświetla tagu
użytkownik bez kapelusza
Zauważ, że jeśli odwołanie jest niejednoznaczne i masz gałąź i znacznik o tej samej nazwie, to preferuje gałąź.
Keith Smiley
1
Co to jest zatwierdzenie długoterminowe?
d512
74

Użyj --single-branchopcji, aby sklonować tylko historię prowadzącą do końcówki znacznika . To oszczędza wiele niepotrzebnego kodu przed klonowaniem.

git clone <repo_url> --branch <tag_name> --single-branch
Sahil kalra
źródło
3
Jest --single-branchrównoważne --depth 1?
igracia
14
Nie, to nie jest równoważne. - single-branch klonuje historię dla całej gałęzi. Przy opcji --depth 1 żadna historia w ogóle nie jest klonowana.
Martin Krung,
2
Zakłada się również --single-branch, gdy --depthjest używany. Z instrukcjiWhen creating a shallow clone with the --depth option, this is the default
koda
33
git clone -b 13.1rc1-Gotham  --depth 1  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Counting objects: 17977, done.
remote: Compressing objects: 100% (13473/13473), done.
Receiving objects:  36% (6554/17977), 19.21 MiB | 469 KiB/s    

Będzie szybszy niż:

git clone https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  14% (40643/282238), 55.46 MiB | 578 KiB/s

Lub

git clone -b 13.1rc1-Gotham  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  12% (34441/282238), 20.25 MiB | 461 KiB/s
RzR
źródło
6
--depth 1jest klejnotem, więc wiele osób pobiera całą historię git tylko po to, aby korzystać z HEAD.
MGP
2
--depth 1powinien zostać ustawiony jako domyślny; jeśli ktoś spróbuje wypróbować poprzednie zatwierdzenie, powinien zostać poproszony o pobranie reszty.
Jikku Jose
3

Użyj polecenia

git clone --help

aby sprawdzić, czy twój git obsługuje polecenie

git clone --branch tag_name

Jeśli nie, wykonaj następujące czynności:

git clone repo_url 
cd repo
git checkout tag_name
Mathsyouth
źródło
1

Klonowanie określonego znacznika może zwrócić stan „odłączony HEAD” .

Aby obejść ten problem, spróbuj najpierw sklonować repozytorium, a następnie sprawdź konkretny tag. Na przykład:

repo_url=https://github.com/owner/project.git
repo_dir=$(basename $repo_url .git)
repo_tag=0.5

git clone --single-branch $repo_url # using --depth 1 can show no tags
git --work-tree=$repo_dir --git-dir=$repo_dir/.git checkout tags/$repo_tag

Uwaga: Od wersji Git 1.8.5 możesz używać -C <path>zamiast --work-treei --git-dir.

Noam Manos
źródło