it-swarm.com.ru

Как мне клонировать одну ветку в Git?

У меня есть локальный репозиторий Git под названием 'skeleton', который я использую для хранения скелетов проекта. Имеет несколько филиалов для разных видов проектов:

[email protected] [~/Projects/skeleton] git branch
* master
  Rails
  c
  c++

Если я хочу проверить основную ветку для нового проекта, я могу сделать

[email protected] [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

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

Что не работает, однако, если я хочу клонировать другую ветку. Я не могу получить его так, чтобы я извлекал только нужную мне ветку, например ветку Rails, а затем новый репозиторий имеет ветку master, которая по умолчанию выталкивает и извлекает ветвь Rails хранилища скелетов.

Есть ли хороший способ сделать это? Или, возможно, это не тот способ, которым Git хочет, чтобы я структурировал вещи, и я, конечно, открыт для этого. Возможно, у меня должно быть несколько репозиториев, а скелет Ruby on Rails отслеживает главный репозиторий скелетов? И любой отдельный проект, клонирующий Ruby on Rails хранилище скелетов.

701
Casey Rodarmor

Примечание: git1.7.10 (апрель 2012) фактически позволяет вам клонировать только одну ветку:

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

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

Вы можете увидеть это в t5500-fetch-pack.sh :

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

Тобукомментарии что:

Это подразумевается при выполнении мелкого клона.
Это делает git clone --depth 1 самым простым способом экономии пропускной способности.

А начиная с Git 1.9.0 (февраль 2014 г.), мелкие клоны поддерживают передачу данных (Push/pull), поэтому эта опция стала еще более полезной.
Подробнее на " Является ли git clone --depth 1 (неглубокий клон) более полезным, чем это кажется? ".


"Отмена" мелкого клона подробно описана в " Конвертировать мелкий клон в полный клон " (git 1.8.3+)

# 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

Как Крис комментарии:

волшебная линия для получения недостающих ветвей для обращения --single-branch (git v2.1.4):

git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow  
700
VonC

Одним из способов является выполнение следующего.

git clone [email protected]:project_name.git -b branch_name /your/folder

Где branch_name - это ветка по вашему выбору, а "/ your/folder" - папка назначения для этой ветки. Это правда, что это принесет другие ветви, дающие вам возможность сливаться взад и вперед. Теперь, начиная с Git 1.7.10, теперь вы можете сделать это

git clone [email protected]:project_name.git -b branch_name --single-branch /your/folder
648
Alex Nolasco

Используя Git версии 1.7.3.1 (в Windows), вот что я делаю ($BRANCH - это название ветви, которую я хочу оформить, а $REMOTE_REPO - это URL-адрес удаленного репозитория, из которого я хочу клонировать):

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

Преимущество этого подхода заключается в том, что последующие вызовы git pull (или git fetch) также просто загружают запрошенную ветку.

105
Frerich Raabe

Вы можете попробовать долгий путь:

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

Что это делает:

  • Создайте и запустите пустой Git-репозиторий.
  • Добавляет исходный репозиторий как удаленный с именем Origin .
  • Выбирает только ту ветвь, которая вам требуется от пульта, называемого Origin .
  • Создает и извлекает новую ветку, которая настроена на отслеживание только что клонированной исходной ветки.

Надеюсь, это будет что-то вроде того, что вы после.

26
jkp

Вы можете сделать это с помощью следующей команды:

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
18
nosaiba darwish

От страница руководства git-clone :

--single-branch ваш друг во время клонирования, не забудьте использовать с --branch <branch name>, или будет клонирован только удаленный первичный HEAD (master по умолчанию)

Всегда не забывайте делать Ctrl + F5 читать из первоисточника, а не из кеша :-) (я давно не знал об этом варианте).

15
Casey
git clone <url> --branch <branch> --single-branch

Просто введите URL и название филиала.

7
jsroyal

Для клонирования ветки Git, к которой у вас нет открытого ключа, используйте это:

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
2
Prem S

Клонировать только одну ветку. Это самый простой способ:

$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
2
Cubiczx

Откройте cmd.

cd folder_name (введите путь клонирования ветки)

Всего одна команда:

git clone url_of_projecturltoclone -b branch_name
1
dhS

Можно сделать в 2 этапа

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

    • git clone <http url>
  2. Оформите нужную ветку

    • git checkout $BranchName
1
Pramod Setlur

Немного поздно, но я хотел добавить решение, которое использовал для решения этой проблемы. Я нашел решение здесь .

Во всяком случае, кажется, что возникает вопрос: "Как начать новый проект из ветки другого репо?"

Для этого я решил создать новое репо в github или где-либо еще. Это послужит репо вашему новому проекту.

На локальном компьютере перейдите к проекту, в котором есть ветвь, которую вы хотите использовать в качестве шаблона для вашего нового проекта.

Запустите команду:

git Push https://github.com/accountname/new-repo.git +old_branch:master

Что это будет делать - это перевести old_branch в new-repo и сделать его главной веткой нового репо.

Затем вам просто нужно клонировать новое хранилище в локальный каталог вашего нового проекта, и у вас есть новый проект, запущенный в старой ветке.

1
Aaron Pennington

Для клонирования конкретной ветки вы можете сделать:

git clone --branch yourBranchName [email protected]

0
nPcomp