Как клонировать конкретную ветку Git? [Дубликат]

2143

Git клон будет вести копирование удаленной текущей рабочей ветки в локальную.

Можно ли каким-либо образом клонировать конкретную ветку без переключения ветвей в удаленном репозитории?

Теги:
git-branch
git-clone

7 ответов

415
Лучший ответ

Пожалуйста, смотрите также другой ответ, который предпочитают многие люди.

Вы также можете убедиться, что вы понимаете разницу, в отличие от большинства злых комментаторов и downvoters. И разница в следующем: вызывая git clone --branch <branchname> url вы git clone --branch <branchname> url все ветки и проверяете одну. Это может, например, означать, что ваш репозиторий имеет документацию 5 КБ или ветку вики и ветку данных 5 ГБ. И когда бы вы ни захотели отредактировать свою главную страницу, вы можете клонировать 5 ГБ данных.

Опять же, это не значит, что git clone --branch - это не способ сделать это, просто это не всегда то, чего вы хотите достичь, когда вы спрашиваете о клонировании определенной ветки.

Ответ, который я написал бы сегодня, с сегодняшним мерзавцем, будет:

git clone --single-branch --branch <branchname> host:/dir.git

на момент написания оригинального ответа ниже, у git не было опции --single-branch, но давайте сохраним его для полного удовлетворения злых пчел.

Коппастеры так сильно не любили ответ:

git init
git remote add -t refspec remotename host:/dir.git
git fetch
  • 64
    Благодарю. Я понял, используя метод ниже. git clone <remote_repo> git checkout -b <wanted_branch> origin / <wanted_branch> git branch -D master
  • 0
    Это потрясающе - я не знал, что вы могли бы указать только одну ссылку. Но вы имели в виду "git remote add origin -t refspec etc ..."?
Показать ещё 33 комментария
6921
git clone -b <branch> <remote_repo>

Пример:

git clone -b my-branch [email protected]:user/myproject.git

В Git 1.7.10 и более поздних версиях добавьте --single-branch чтобы предотвратить выборку всех ветвей. Пример с веткой OpenCV 2.4:

git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git
  • 497
    pierr: Я не уверен , если это отвечает на описание проблемы , приведенной выше, но это не ответ на актуальный вопрос - как клонировать конкретную ветвь хранилища. Я проголосовал за это, потому что это ответ, за который я гуглял, когда пришел на эту страницу.
  • 24
    Это работает. Он указывает новый HEAD на указанную ветку, а не на ветку HEAD в myproject. Тем не менее, он по-прежнему выбирает все ветви. Смотрите ответ @ edmar-miyake.
Показать ещё 8 комментариев
236

Чтобы клонировать ветвь без извлечения других ветвей:

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH
  • 0
    Хорошее решение В более старом git (у меня 1.5.5.6) перед извлечением может потребоваться git branch --track $ BRANCH origin / $ BRANCH.
  • 2
    Работает, а также выбирает только те теги, которые присутствуют на ветке, что я и хотел. (Я на самом деле хотел получить несколько веток, но только выбранные; для этого достаточно было многократно remote add и checkout как здесь, а затем git remote rm origin для очистки.)
Показать ещё 3 комментария
213

Вот простой способ сделать это:)

Клонировать хранилище

git clone <repository_url>

Список всех ветвей

git branch -a 

Оформить требуемую ветку

git checkout <name_of_branch>
  • 1
    Это переключило рабочую директорию на правильную ветку, но я не могу выдвинуть любые изменения, которые я делаю, потому что я не "в настоящее время на ветке".
  • 1
    Это было решением для меня, так как я уже клонировал «мастера». Я не знал, что могу просто «оформить» удаленную ветку.
Показать ещё 5 комментариев
71
git checkout -b <branch-name> <origin/branch_name>

, например, в моем случае:

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

Итак, чтобы создать новую ветку, основанную на моей ветке enum-account-number, я делаю:

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

После того, как вы нажмете return, произойдет следующее:

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

"

  • 4
    Обратите внимание, что может быть полезно сначала выполнить git pull origin чтобы git branch -a могла перечислить все новые (текущие) удаленные ветви.
  • 0
    Хорошая точка зрения. Вероятно, git fetch лучше, чтобы автоматическое слияние не происходило.
20

Создайте ветвь в локальной системе с этим именем. например скажем, вы хотите получить ветвь с именем "branch-05142011"

git branch branch-05142011 origin/branch-05142011

Он даст вам сообщение типа "Филиал ветки 05142011, настроенный для отслеживания удаленной ветки ветки 05142011 от источника".

Теперь просто просмотрите ветку, как показано ниже, и у вас есть код -
git checkout branch-05142011

  • 5
    Это тоже будет делать: git fetch origin [remote-branch]: [new-local-branch]
  • 0
    имеет право. Мияке (ниже) показывает, как это сделать при добавлении пульта.
Показать ещё 2 комментария
14
git --branch <branchname> <url>

Но завершение bash не получает этот ключ: --branch

Enjoy.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню