如何在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
)调用也将下载所请求的分支。
上一篇: How to clone a single branch in git?
下一篇: Git: git push