我有一个本地的名为 “skeleton” 的 Git 存储库,用于存储项目框架。它有几个分支,分别用于不同类型的项目:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
如果我想签出新项目的 master 分支,我可以做
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
一切都是我想要的。具体来说,新的 master 分支指向骨架 master 分支,我可以推动和拉动以移动对基本项目设置的更改。
但是,如果我要克隆另一个分支,那是行不通的。我无法理解它,所以我只拉了我想要的分支,例如rails
分支,然后默认情况下,新存储库有一个master
分支,该master
分支可推入和拉出骨架存储库的rails
分支。
有一个好的方法去做吗?或者,也许这不是 Git 想要我构造事物的方式,我当然对此持开放态度。也许我应该有多个存储库,而 Ruby on Rails 框架存储库跟踪主框架存储库?以及任何克隆 Ruby on Rails 骨架存储库的项目。
注意: 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
克里斯评论道:
使缺少的分支反转的神奇方法是
--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
)调用也将只下载所请求的分支。