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

у меня есть локальный репозиторий Git под названием "скелет", который я использую для хранения скелетов проектов. Он имеет несколько филиалов, для различных видов проектов:

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

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

casey@agave [~/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.

14 ответов


Примечание: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), так что этот вариант еще более полезен сейчас.
Подробнее см. В разделе" Is 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

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

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

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

один из способов-выполнить следующее.

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

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

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

используя 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) вызовы также будут просто загружать запрошенную ветку.


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

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

надеюсь, что будет что-то вроде того, что вам нужно.


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

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

С git-clone man page:

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

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


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

просто введите URL и имя ветви.


можно сделать в 2 шага

  1. клонировать репозиторий

    • git clone <http url>
  2. оформить заказ ветвь

    • git checkout $BranchName

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


откройте cmd.

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

только одна команда:

git clone url_of_projecturltoclone -b branch_name

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

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

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

git clone --branch yourBranchName git@yourRepository.git


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

$ git clone -b BRANCH_NAME --single-branch git@bitbucket.org:___/PROJECTNAME.git

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