2011-01-26 2 views
301

Я хотел бы знать, как я мог клонировать только одну ветвь вместо клонирования всего хранилища Git.Клонировать только одну ветвь

+3

Что пара другие отметили, очень верно: если нет больших файлов, совершенные в некоторых отраслях и не для других, это на самом деле не собирается сделать большую часть разницы. – Cascabel

+3

@Jefromi: Это действительно имеет значение, когда вы клонируете его. См. Эту ссылку: http://stackoverflow.com/questions/14682245/why-is-the-size-of-the-forked-repository-so-huge- on-github –

+6

@AmolMKulkarni Как я уже сказал два года назад, только если некоторые ветви содержат много данных, которых нет у других. Вопрос, на который вы ссылаетесь, на самом деле не говорит о том, что только одна ветвь меньше - если все эти огромные размеры находятся в общей истории всех ветвей, клонирование одной ветви будет такой же большой. – Cascabel

ответ

524

Из анонса Git 1.7.10 (апрель 2012):

  • git clone узнал --single-branch возможность ограничить клонирование в одной отрасли; (сюрприз!) теги, которые не указывают на историю ветки, не извлекаются.

Git фактически позволяет клонировать только одну ветвь, например:

git clone -b mybranch --single-branch git://sub.domain.com/repo.git 

Примечание: Также you can add another single branch or "undo" это действие.

+5

Спасибо ,! Если -single-branch дает вам ошибку, просто удалите ее и сохраните -b :) – Braunson

+13

@Brauson, если вы просто положили -b, тогда вы клонируете все ветви и после этого проверяете эту ветку. Это не ожидаемый результат. Поэтому я рекомендую вам, если возможно обновление git до lastest (или> = 1.7.10), и команда не даст ошибку. – shakaran

+5

Кто-нибудь знает, как клонировать две ветки - или добавить еще одну ветвь в единую ветвь клонированного репо? –

59

Вы можете создать новый репозиторий с

git init 

, а затем использовать

git fetch url-to-repo branchname:refs/remotes/origin/branchname 

принести только, что один филиал в местную удаленное отслеживании отрасли.

+3

Вы заменили «branchname» на название ветки, которую хотите? –

+0

Теперь у вас есть ветвь удаленного отслеживания, содержащая содержимое ветки из удаленного репо. Вы можете делать с ним все, что хотите, включая создание из него локальной ветви или сброс текущей ветки на нее или что-то еще. –

+0

Я бы посоветовал вам попробовать клонировать весь репозиторий и посмотреть, насколько он увеличивает ваш .dit-subdir. Мое предположение было бы в том, что он будет пренебрежимым в увеличении, даже в очень больших проектах. –

20

«--single-филиал» переключатель ваш ответа, но он работает только если у вас есть GIT версия 1.8.x и далее, первая проверка

#git --version 

Если у вас уже есть GIT версия 1.8 .X установлен, то просто использовать «-b ветвь и --single ветвь» клонировать одну ветвь

#git clone -b branch --single-branch git://github/repository.git 

по умолчанию в Ubuntu 12.04/12.10/13.10 и Debian 7 установка мерзавец по умолчанию вар ион 1,7.x, где - одновитн - неизвестный выключатель. В этом случае вам нужно установить новый git сначала из не-default ppa, как показано ниже.

sudo add-apt-repository ppa:pdoes/ppa 
sudo apt-get update 
sudo apt-get install git 
git --version 

После 1.8.x устанавливается теперь просто сделать:

git clone -b branch --single-branch git://github/repository.git 

Git теперь будет скачать одну ветвь с сервера.

+2

+1 для быстрых инструкций по обновлению git в более ранних версиях дистрибутивов Debian. –

+0

Небольшое дополнение. Чтобы получить команду add-apt-repository, установите пакет программных свойств - общий пакет, мне также пришлось установить свойства python-software. (Я знаю, что это старый ответ, но он по-прежнему актуальный, по крайней мере, это было для меня!). – Graftak

4

я сделал с ниже одной команды мерзавца:

git clone [url] -b [branch-name] --single-branch 
+0

меня тоже, будет использовать эту команду для клонирования одной ветви – yussan

Смежные вопросы