Chcę pobrać kod źródłowy z master-next branch używając gita, jak opisano w 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 [email protected] 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 [email protected] 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 spowoduje pobranie gałęzi master-next , a nie główna gałąź ? Jak poprawnie pobrać konkretną gałąź za pomocą git?

Używam RHEL 6 dostępnego przez PuTTY.

Odpowiedź

Tak jak mówi komunikat o błędzie, git clone oczekuje repozytorium git. Możesz dodać „t” nazwę gałęzi w ścieżce w ten sposób. Zobacz gałęzie w git .

Możesz sklonować pojedyncza gałąź (i jej historia): git clone <url> --branch <branch> --single-branch

Zobacz git help clone.

Ale polecenie klonowania, które uruchomiłeś, dało ci kopię całego repozytorium, możesz zobaczyć istniejące gałęzie za pomocą git branch i więcej szczegółów na ich temat za pomocą git show-branch.

Przejdź do wybranej gałęzi za pomocą git checkout branch-name.

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

Komentarze

  • " polecenie clone, które uruchomiłeś, dało ci kopię całego repozytorium " .Całe repozytorium oznacza, że obie gałęzie zostały połączone?
  • Nie, są nie połączone. Gałąź w git nie jest kopią całego katalogu, jak wyjaśniono tutaj .
  • Oto co zrobiłem: " git clone -b master-next github.com/Xilinx/u-boot-xlnx.git " czy to nie jest poprawne?
  • Nie ' nie potrzebowałeś już klonowania. Polecenie, które pokazałeś w swoim pytaniu, dało ci repozytorium ze wszystkimi gałęziami. Ale to też jest poprawne. Jest to ' równoważne wykonaniu git checkout master-next po sklonowaniu.

Odpowiedź

To polecenie powinno działać:

$ git fetch origin [branch] 

Powyższe polecenie pobiera metadane tylko ze zdalnego repozytorium, nie działa scal źródła.

Jeśli chcesz pobrać i scalić źródła, polecenie wyglądałoby tak:

$ git pull origin [branch] 

Uważaj na gałąź, w której wykonujesz polecenie scalania. To będzie miejsce, w którym zostaną scalone źródła.

Komentarze

  • Twoja odpowiedź jest poprawna technicznie, ale myślę, że może przydać się pewne sprawdzenie gramatyczne / ponowne pisanie.
  • to ładnie działa thx

Odpowiedź

repozytoria git zawierają wszystkie gałęzie ( ale skompresowany i tylko różnice, stąd rzadko problem z rozmiarem).

Dlatego możesz sklonować cały projekt tak, jak zrobiłeś to pomyślnie. Jest to standardowy sposób na uzyskanie repozytorium, nawet jeśli interesuje Cię tylko jedna gałąź.

Struktura .git będzie wtedy zawierać wszystkie gałęzie utworzone w tym repozytorium.

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

git status pokaże wtedy, która gałąź jest aktualną gałęzią, na przykład:

Według Leiaza można sklonować konkretną gałąź. W praktyce nigdy tego nie robiłem ani nie widziałem, aby inni go używali. Po dalszych badaniach widzę, że jest to stosunkowo nowe, dodane w git 1.7.10 (kwiecień 2012): opcja „git clone learn –single-branch” w celu ograniczenia klonowania do jednej gałęzi (niespodzianka!); tagi, które nie wskazują na historię tej gałęzi, nie są pobierane. Na przykład:

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

tutaj wprowadź opis obrazu Tutaj, dla mojej aplikacji „łączącej”, sprawdzam gałąź v3.0.10

Komentarze

  • Ja ' też tego nie robiłem, przypomniałem sobie, że widziałem opcję. Myślę, że ' Rzadko używane jako dodatkowe gałęzie są " tanie " w rozmiarze.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *