Как мне клонировать одну ветку в 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.

Ответ 1

Примечание: 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
'

Tobu комментарии, которые:

Это подразумевается при выполнении мелкого клонирования.
Это делает 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

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

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

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  

Ответ 2

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

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

Ответ 3

Используя Git версии 1.7.3.1 (в Windows), вот что я делаю ($BRANCH - это название ветки, которую я хочу $REMOTE_REPO а $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) также просто загружают запрошенную ветку.

Ответ 4

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

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-репозиторий.
  • Добавляет исходный репозиторий в качестве удаленного источника.
  • Выбирает только ту ветвь, которая вам требуется от удаленного источника.
  • Создает и извлекает новую ветку, которая настроена на отслеживание только что клонированной исходной ветки.

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

Ответ 5

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

git clone -b branch_name --single-branch project_url local_folder_to_clone_in

Ответ 6

Из справочной страницы git-clone:

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

git clone --branch yourBranchName [email protected]

Ответ 11

После завершения клонирования мне пришлось ввести git submodule update --init --recursive, чтобы загрузить все подмодули

Ответ 12

Может быть сделано за 2 шага

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

    • git clone <http url>
  • Оформить требуемую ветку

    • git checkout $BranchName

Ответ 13

Откройте cmd.

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

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

git clone url_of_projecturltoclone -b branch_name

Ответ 14

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

Просто введите URL и название ветки

Ответ 16

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

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

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

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

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

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

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

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

Ответ 17

  1. Откройте оболочку Git Bash.
  2. Создайте каталог в вашей файловой системе, где вы хотите оформить заказ.
    • $ mkdir Feature_develop_branch
  3. Перейдите в папку Feature_develop_branch.
    • $ cd Feature_develop_branch
  4. Клонируйте репозиторий, используя внешний URL-адрес клонирования.
  5. После клонирования измените каталог на созданное имя репозитория.
    • $ cd/repositoryName
  6. Проверьте ветку.
    • $ git checkout <Branch Name>