Jak sklonować pojedynczą gałąź w Git?

Mam lokalne repozytorium Git o nazwie 'skeleton' , którego używam do przechowywania szkieletów projektu. Ma kilka gałęzi, dla różnych rodzajów projektów:

casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

Jeśli chcę sprawdzić gałąź master dla nowego projektu, mogę zrobić

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
I wszystko jest takie, jakie chcę. W szczególności, nowa gałąź master wskazuje na szkielet gałąź master i mogę naciskać i ciągnąć, aby poruszać się po zmianach w podstawowej konfiguracji projektu.

To, co nie działa, jednak, jeśli chcę Sklonuj kolejną gałąź. Nie mogę tego uzyskać, aby wyciągnąć tylko gałąź, którą chcę, na przykład gałąź rails, a następnie nowe repozytorium ma gałąź master, która domyślnie pcha się do i ciągnie z gałęzi rails repozytorium szkieletu.

Czy jest dobry sposób, aby to zrobić? Albo, może to nie jest sposób, w jaki Git chce, żebym wszystko uporządkował i jestem na to otwarty. Być może powinienem mieć wiele repozytoriów, a szkielet Ruby on Rails śledzi master szkielet repozytorium? Oraz każdy indywidualny projekt klonujący repozytorium szkielet Ruby on Rails.

Author: Casey Rodarmor, 2009-11-22

14 answers

Uwaga: git1.7.10 (kwiecień 2012) faktycznie pozwala sklonować tylko jedną gałąź :

# clone only the remote primary HEAD (default: origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

Widać to w t5500-fetch-pack.sh:

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

Tobu komentarze, że:

Jest to niejawne podczas wykonywania płytkiego klonu.
To sprawia, że git clone --depth 1 jest najprostszym sposobem na zapisanie przepustowości.

I od Git 1.9.0 (luty 2014), płytkie klony obsługują transfer danych (push/pull) , więc opcja teraz jest jeszcze bardziej przydatny.
Zobacz więcej w " Czy git clone --depth 1 (shallow clone) jest bardziej przydatny niż się wydaje?".


Jeśli chcesz, aby twój klon był w pełni zgodny z Twoimi wymaganiami, skontaktuj się z nami, aby uzyskać więcej informacji na ten temat.]}
# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow

Jako Chris komentarze:

Magiczna linia do usuwania brakujących gałęzi do odwrócenia --single-branch to (git v2. 1. 4):

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  
 650
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:47

Jednym ze sposobów jest wykonanie następujących czynności.

git clone user@git-server:project_name.git -b branch_name /your/folder

Gdzie branch_name jest wybraną gałęzią, A"/your / folder " jest folderem docelowym dla tej gałęzi. To prawda, że przyniesie to inne gałęzie dające możliwość łączenia się tam iz powrotem. Teraz, począwszy od Git 1.7.10, możesz teraz zrobić to

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder
 638
Author: Alex Nolasco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:53:29

Używając Git w wersji 1.7.3.1 (w systemie Windows), oto co robię ({[1] } to nazwa gałęzi, z której chcę dokonać zakupu, a {[2] } To Adres URL zdalnego repozytorium, z którego chcę sklonować):

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

Zaletą tego podejścia jest to, że kolejne wywołania git pull (lub git fetch) również pobierają żądaną gałąź.

 102
Author: Frerich Raabe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:52:35

Możesz spróbować dłuższej drogi:

mkdir newrepo.git
cd newrepo.git
git init
git remote add origin file:///path/to/original
git fetch origin branchiwant:refs/remotes/origin/branchiwant
git checkout -b branchiwant --track origin/branchiwant

To co robi to:

  • Utwórz i init puste repozytorium Git.
  • dodaje oryginalne repozytorium jako zdalne o nazwie origin.
  • pobiera tylko gałąź, której potrzebujesz z pilota o nazwie origin.
  • tworzy i sprawdza nową gałąź, która jest skonfigurowana do śledzenia gałęzi źródłowej, którą właśnie sklonowałeś.
Mam nadzieję, że to będzie coś takiego,czego szukasz.
 22
Author: jkp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:51:58

Możesz to zrobić używając poniższego polecenia:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
 15
Author: nosaiba darwish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-06 06:46:19

From git-clone man page :

--single-branch jest twoim przyjacielem podczas klonowania pamiętaj, aby używać z --branch <branch name> lub tylko zdalna Głowica główna zostanie sklonowana (domyślnie master)

Zawsze pamiętaj aby wykonać Ctrl + F5 do odczytu świeżego źródła, a nie tego z cache :-) (Nie wiedziałem więc o tej opcji przez długi czas.)

 13
Author: Casey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:54:37
git clone <url> --branch <branch> --single-branch

Wystarczy wpisać adres URL i nazwę gałęzi.

 5
Author: jsroyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:56:30

Można wykonać w 2 krokach

  1. Klon repozytorium

    • git clone <http url>
  2. Sprawdź wybraną gałąź

    • git checkout $BranchName
 2
Author: Pramod Setlur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-21 02:55:32

Po zakończeniu klonowania musiałem wpisać git submodule update --init --recursive, aby pobrać wszystkie podmoduły

 1
Author: Jan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 00:08:15

Otwórz cmd.

cd folder_name (wprowadź ścieżkę, gdzie należy sklonować gałąź)

Tylko jedno polecenie:

git clone url_of_projecturltoclone -b branch_name
 1
Author: dhS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:57:20

Do klonowania gałęzi Gita, do której nie masz klucza publicznego, użyj tego:

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
 1
Author: Prem S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:58:07

Do klonowania określonej gałęzi można wykonać:

git clone --branch yourBranchName [email protected]

 0
Author: sony vizio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 16:27:27

Klonuj tylko jedną gałąź. Jest to najprostszy sposób:

$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
 0
Author: Cubiczx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:58:32
  1. Open Git Bash shell.
  2. Utwórz katalog w systemie plików, w którym chcesz dokonać zakupu.
    • $ mkdir Feature_develop_branch
  3. zmień katalog na feature_develop_branch.
    • $ cd Feature_develop_branch
  4. Sklonuj repozytorium używając zewnętrznego adresu URL.
  5. po klonowaniu Zmień katalog do utworzonego repozytorium.
    • $ cd / repositoryName
  6. Zobacz też
  • $ Git checkout <Branch Name>
 -3
Author: Ajay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 19:55:51