如何在git中克隆单个分支?

我有一个名为'skeleton'的本地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分支,然后新的repo默认情况下有一个'master'分支,它可以从骨架仓库的'rails'分支中推送和拉出。

这样做有没有好的方法? 或者,也许这不是git想让我去组织结构的方式,我当然可以接受。 也许我应该有多个回购,跟踪骨架回购跟踪主骨架回购? 还有任何单独的项目克隆轨道骨架回购。

任何想法和建议表示赞赏!


注意: git1.7.10(2012年4月)实际上允许您仅克隆一个分支

# 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年2月)以来,浅层克隆支持数据传输(推/拉),因此该选项现在更加有用。
请参阅“ 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  

一种方法是执行以下操作

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 )调用也将下载所请求的分支。

链接地址: http://www.djcxy.com/p/2627.html

上一篇: How to clone a single branch in git?

下一篇: Git: git push