Pobierz konkretną gałąź za pomocą git


19

Chcę pobrać kod źródłowy z gałęzi master-next przy użyciu git zgodnie z opisem na wiki Xilinx .

Próbowałem tego:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email support@github.com for help

Nawet to się nie udało:

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email support@github.com for help

Polecenie, które działa, to:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Ale skąd mam wiedzieć, że to rzeczywiście przyniesie gałąź master-next, a nie gałąź master ? Jak poprawnie pobrać konkretną gałąź za pomocą git?

Korzystam z RHEL 6, dostępnego za pośrednictwem PuTTY.

Odpowiedzi:


16

Tak jak mówi komunikat o błędzie, git cloneoczekuje repozytorium git. Nie można „dodać” nazwy gałęzi na takiej ścieżce. Zobacz oddziały w git .

Możesz sklonować pojedynczy oddział (i jego historię): git clone <url> --branch <branch> --single-branch

Zobaczyć git help clone.

Ale uruchomione polecenie klonowania dało ci kopię całego repozytorium, możesz zobaczyć istniejące gałęzie git branchi więcej szczegółów na ich temat git show-branch.

Przejdź do gałęzi, którą chcesz git checkout branch-name.

Pierwsze rozdziały książki Pro Git (dostępne online) zawierają więcej szczegółów na temat podstawowych poleceń.


„uruchomione polecenie klonowania dało ci kopię całego repozytorium”. całe repozytorium oznacza, że ​​obie gałęzie zostały połączone?
user2799508

Nie, nie są scalane. Gałąź w git nie jest kopią całego katalogu, jak wyjaśniono tutaj .
Leiaz

Zrobiłem to: „git clone -b master-next github.com/Xilinx/u-boot-xlnx.git ” czy to nie jest poprawne?
user2799508

Nie potrzebujesz już klonowania. Polecenie pokazane w pytaniu dało ci repozytorium ze wszystkimi gałęziami. Ale to też jest poprawne. Jest to równoważne z wykonywaniem git checkout master-nextpo klonowaniu.
Leiaz

13

To polecenie powinno działać:

$ git fetch origin [branch]

Powyższe polecenie pobiera tylko metadane ze zdalnego repozytorium, nie scala źródeł.

Jeśli chcesz pobrać i scalić źródła, polecenie powinno wyglądać następująco:

$ git pull origin [branch]

Uważaj na gałąź, w której wykonujesz polecenie scalania. Będzie to miejsce, w którym źródła zostaną połączone.


Twoja odpowiedź jest prawidłowa pod względem technicznym, ale myślę, że może skorzystać z gramatycznego sprawdzania / ponownego pisania.
Sami Laine

to działa ładnie dzięki
nwgat

4

repozytoria git zawierają wszystkie gałęzie (ale skompresowane i tylko różnice stąd rzadko występują problemy z rozmiarem).

Dlatego możesz sklonować cały projekt po pomyślnym zakończeniu. Jest to standardowy sposób na uzyskanie repozytorium, nawet jeśli interesuje Cię tylko jeden oddział.

Struktura .git obejmie wtedy wszystkie gałęzie wykonane w tym repozytorium.

Aby użyć określonej gałęzi, wykonaj git checkout [branch_name] Jeśli gałąź istnieje, pliki zostaną udostępnione lokalnie (jako takie, bieżące pliki w katalogach projektu).

git status pokaże następnie, która gałąź jest bieżącą gałęzią, na przykład:

Według Leiaza można sklonować określoną gałąź. W praktyce nigdy tego nie robiłem ani nie widziałem, żeby inni go używali. Po dalszych badaniach widzę, że jest stosunkowo nowy, dodany w git 1.7.10 (kwiecień 2012): opcja „git clone learn - single-branch”, aby ograniczyć klonowanie do jednej gałęzi (niespodzianka!); tagi, które nie wskazują historii oddziału, nie są pobierane. Na przykład:

git clone -b master-next --single-branch git://github.com/Xilinx/

wprowadź opis zdjęcia tutaj Tutaj, dla mojej aplikacji „linker” sprawdzam oddział v3.0.10


1
Nigdy tego nie zrobiłem, przypomniałem sobie opcję. Sądzę, że rzadko jest stosowany, ponieważ dodatkowe gałęzie są „tanie”.
Leiaz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.