Как клонировать одну ветвь в 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
--single-branch
- ваш друг во время клона
не забудьте использовать с --branch <branch name>
или будет клонирована только удаленная первичная головка (master по умолчанию)
всегда помните, чтобы делать Ctrl + Ф5 для чтения свежего источника, а не из кэша :-) (Я не так давно не знал об этом варианте.)
можно сделать в 2 шага
-
клонировать репозиторий
git clone <http url>
-
оформить заказ ветвь
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
- открыть оболочку Git Bash.
- создайте папку в вашей файловой системе, где вы хотите оформить заказ.
- $ команды mkdir Feature_develop_branch
- каталог Feature_develop_branch.
- компакт-диск$Feature_develop_branch
- клонировать репозиторий с помощью внешнего URL-адреса клонирования.
- $ git клон https://someurl.repositoryName.git
- после клонирования измените каталог на created repositoryName.
- $ cd / repositoryName
- Проверьте филиала.
- $ git checkout
<Branch Name>
- $ git checkout