Pytanie Jak sklonować konkretną gałąź Git? [duplikować]


To pytanie już zawiera odpowiedź:

Klon Git będzie zachowywał kopiowanie zdalnej działającej gałęzi do lokalnego.

Czy istnieje sposób na samodzielne klonowanie określonej gałęzi bez przełączania gałęzi na zdalne repozytorium?


2100
2017-12-15 23:06


pochodzenie


@domokun Jorge dodał swoją odpowiedź rok po Michaelu. Tak więc często występuje na SO, że najlepsza odpowiedź jest dodana po tym, jak inna odpowiedź została już zaakceptowana. (IOW, zawsze przynajmniej zeskanuj maksymalnie 3-4 odpowiedzi na każde pytanie.) - Ryan Ballantyne
@scud: jeśli wciąż jesteś w SO, czy chcesz poprawić zaakceptowaną odpowiedź, aby inni mogli ją łatwiej zobaczyć? - mikemaccana
dlaczego SO wymaga @Scud do edycji odpowiedzi? Po 5000 głosów, ogólna społeczność powinna mieć prawo głosu w tym, co jest oznaczone jako poprawna odpowiedź. - gdbj
Zmień zaakceptowaną odpowiedź SO moderatorzy. - user1271772
Głosuj na zaakceptowaną odpowiedź. Może SO zmieni ją ostatecznie, jeśli pójdzie negatywnie. - user1271772


Odpowiedzi:


Zobacz także inna odpowiedź które wolą wielu ludzi.

Możesz również chcieć upewnić się, że rozumiesz różnicę, w przeciwieństwie do większości złych komentatorów i spadkobierców. Różnica polega na tym, że wywołując git clone -b branch url przynosisz wszystko gałęzie i sprawdzanie jednej. Może to na przykład oznaczać, że twoje repozytorium ma dokumentację 5 kB lub gałąź wiki i gałąź danych 5 GB. I kiedy chcesz edytować swoją stronę główną, możesz skończyć klonując 5 GB danych.

Ponownie, to nie znaczy git clone -b nie jest sposobem, aby to osiągnąć, po prostu nie jest zawsze co chcesz osiągnąć, gdy pytasz o klonowanie konkretnej gałęzi.

Odpowiedź, którą napisałbym dzisiaj, z myślą o dzisiejszym draniu

git clone --single-branch -b branch host:/dir.git

w czasie pisania oryginalnej odpowiedzi poniżej, git nie miał --single-branch opcja, ale zachowajmy ją dla pełnej satysfakcji złych pszczół.

Odpowiedź tak bardzo nielubiana przez copypastersów była następująca:

git init
git remote add -t refspec remotename host:/dir.git
git fetch

240
2017-12-15 23:09



Dzięki. Zorientowałem się, używając poniższej metody. git clone <remote_repo> git checkout -b <wanted_branch> origin / <wanted_branch> git branch -D master - Scud
Tak myślę, a otrzymasz "zdalne" pochodzenie "] fetch = + refs / heads / (refspec): refs / remote / origin / (refspec) zamiast fetch = + refs / heads / *: refs / remote / origin / * - Scud
ten jest łatwiejszy i bardziej odpowiedni stackoverflow.com/a/4568323/636762 - Syed Rakib Al Hasan
Chłopaki, upewnij się, że zobaczysz prawdziwą odpowiedź poniżej. - BrainSlugs83
@Scud, czy możesz zaakceptować inną odpowiedź, jestem trochę zmęczony przyciąganiem błyskotliwych umysłów, każdy próbuje wnieść swój unikalny pogląd, podobnie jak miliony przed nimi. - Michael Krelin - hacker


git clone -b <branch> <remote_repo>

Przykład:

git clone -b my-branch git@github.com:user/myproject.git

Z Git 1.7.10 i nowszymi dodaj --single-branch aby zapobiec pobieraniu wszystkich oddziałów. Przykład, z odgałęzieniem OpenCV 2.4:

git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git

6683
2017-12-31 05:36



pierr: Nie jestem pewien, czy to odpowiada opisowi problemu podanego powyżej, ale to robi odpowiedz na pytanie - jak sklonować konkretną gałąź repozytorium. Głosowałem za tym, ponieważ jest to odpowiedź, której szukałem, gdy do niej doszedłem. - Jaime Bellmyer
To działa. Wskazuje nową HEAD w określonej gałęzi, a nie na HEAD-branch w myproject. Nadal jednak pobiera wszystko gałęzie. Zobacz odpowiedź @ edmar-miyake. - cdunn2001
Zobacz tę odpowiedź, aby uzyskać wiadomości: stackoverflow.com/a/14930421/755257 - cbeleites
Odpowiada opisowi problemu, jeśli dodasz -depth X do polecenia. Jeśli to zrobisz, sklonuje tylko określoną gałąź i jej ostatnią zawartość. - ramsvidor
thx dla --single-branch; git 2.5 jest w momencie pisania tego. Nie troszcz się o starsze wersje. - Bernhard Döbler


Aby sklonować oddział bez pobieranie innych oddziałów:

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

222
2017-09-08 14:34



Dobre rozwiązanie. Na starszym git (mam 1.5.5.6) przed kasą może być potrzebna gałąź git - ścieżka $ BRANCH origin / $ BRANCH. - Johannes Thoma
Działa, a także pobiera tylko te znaczniki znajdujące się w oddziale, czego właśnie chciałem. (Właściwie to chciałem sprowadzić wielokrotność gałęzie, ale tylko wybrane; w tym celu wystarczało to wielokrotnie remote add i checkout jak tutaj, wtedy git remote rm origin posprzątać.) - Jesse Glick
Korzystanie z odpowiedzi Jorge Eduardo Cardona daje mi ogromne repozytoria, dzięki tej metodzie mam bardzo czyste repozytoria. Dzięki. - joshcomley
Idealne rozwiązanie do płytkiego włączania określonego tagu repozytorium git w innym projekcie. Polecam pominąć -f  z polecenia zdalnego git, a następnie używając git fetch --depth=1 $BRANCH $TAG, następnie git checkout FETCH_HEAD. Inicjacja jest nieszkodliwa, a zmiana znaczników automatycznie aktualizuje wyewidencjonowany kod. - taranaki


Oto naprawdę prosty sposób na zrobienie tego :)

Sklonuj repozytorium

git clone <repository_url>

Lista wszystkich oddziałów

git branch -a 

Sprawdź oddział, który chcesz

git checkout <name_of_branch>

204
2017-07-14 09:42



Zmieniło to katalog roboczy na prawidłową gałąź, ale nie jestem w stanie wprowadzić żadnych zmian, ponieważ nie jestem "obecnie w oddziale". - Seppo Enarvi
To było dla mnie rozwiązanie, odkąd sklonowałem już "mistrza". Nie wiedziałem, że mogę po prostu "sprawdzić" zdalny oddział. - yazzer
Jest to prawdopodobnie poprawny sposób na zrobienie tego; najlepsze praktyki - aaiezza
git checkout mybranchname następnie git fetch done - Shohanur Rahaman
W ten sposób nie klonuje tylko wybranej gałęzi. Ta odpowiedź wydaje się lepsza: stackoverflow.com/a/7349740/3075243. Na przykład, jeśli repozytorium ma wiele oddziałów, które są na tyle duże, że nie chcemy ich klonować. - Proustibat


git checkout -b <branch-name> <origin/branch_name>

na przykład w moim przypadku:

 git branch -a
* master
  origin/HEAD
  origin/enum-account-number
  origin/master
  origin/rel_table_play
  origin/sugarfield_customer_number_show_c

Tak więc, aby utworzyć nowy oddział w oparciu o moją gałąź konta enum-account-number:

git checkout -b enum-account-number origin/enum-account-number

Po naciśnięciu klawisza return następuje:

Branch enum-account-number set up to track remote branch refs/remotes/origin/enum-account-number.
Switched to a new branch "enum-account-number

"


69
2017-11-15 19:34



Zauważ, że może się przydać git pull origin najpierw tak git branch -a może wyświetlić wszystkie nowe (obecne) odległe gałęzie. - André Caron
Słuszna uwaga. Prawdopodobnie git fetch jest lepsze, ale automatyczne scalanie się nie dzieje. - dkinzer


Utwórz gałąź w systemie lokalnym o tej nazwie. na przykład powiedz, że chcesz otrzymać nazwę oddziału "branch-05142011"

git branch branch-05142011 origin/branch-05142011 

Otrzymasz komunikat podobny do "Branch branch-05142011 skonfigurowany do śledzenia odległej gałęzi oddziału-05142011 od początku."

Teraz po prostu sprawdź oddział jak poniżej i masz kod -
git checkout branch-05142011


20
2018-05-15 19:20



To też: git fetch origin [zdalna gałąź]: [nowa-lokalna gałąź] - PlanetUnknown
ma to rację. Miyake (poniżej) pokazuje, jak to zrobić po dodaniu pilota. - cdunn2001
To powinno brzmieć: "PlanetUnknown ma rację". - cdunn2001
@PlanetUnknown Dzięki za git fetch origin [remote-branch]:[new-local-branch], Uwielbiam to! - Jeaf Gilbert


git --branch <branchname> <url>

Ale uzupełnianie bash nie otrzymuje tego klucza: --branch

Cieszyć się.


11
2017-09-07 10:16