$ git remote add -t master -t dev_swamy origin user@example.com:repo.git
$ git remote
origin
$ git remote show origin
* remote origin
Fetch URL: user@example.com:repo.git
Push URL: user@example.com:repo.git
HEAD branch: master
Remote branches:
master new (next fetch will store in remotes/origin)
dev_swamy new (next fetch will store in remotes/origin)
mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
# now open .git/config for editing in your editor
# replace the following line (grab all remote branches)
fetch = +refs/heads/*:refs/remotes/origin/*
# replace with lines listing exactly which branches you want
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/dev_XXX:refs/remotes/origin/dev_XXX
# save the file, now run
git fetch
mkdir myclone
cd myclone
git init
git remote add origin url://origin.repo
# Add fetch rules for the branches that we want to track
git config remote.origin.fetch +refs/heads/master:+refs/remotes/origin/master
git config --add remote.origin.fetch +refs/heads/dev_swamy:+refs/remotes/origin/dev_swamy
# fetch now fetches just what we need, subsequently it will do incremental fetches
git fetch
# Creating local branches tracking the remote branches
git checkout -b master origin/master
git branch dev_swamy origin/dev/swamy
5条答案
按热度按时间k10s72fa1#
默认情况下,
git clone
将获取所有分支,但这些分支将存储为远程跟踪分支:例如,分支“dev_XXXXX”将存储为“origin/dev_XXXXX”(全名为“refs/remotes/origin/dev_XXXXX”)。这些远程跟踪分支在git branch
输出中不可见:你需要git branch -r
来列出远程跟踪分支(或者git branch -a
来列出所有分支)。如果那些分支不偏离主线太多,它们就不会占用仓库太多的磁盘空间。因此我不明白为什么你只想克隆选定的分支。不过,如果您希望克隆只包含两个选定分支,可以按如下方式操作:
1.首先,创建新的空存储库
1.然后将仓库命名为'origin'(就像“git clone”命名它一样),只需要跟踪两个分支:“master”和“dev_swmy”,使用“git remote“命令。请检查是否正确添加。
如果stable分支被称为“stable”而不是“master”,你当然要修改上面的例子。如果你想指定的分支成为remote中的默认分支,还有
-m <branch>
选项。1.从'origin'获取(您也可以使用
-f
选项来执行上述“git remote add”操作):1.设置本地分支'master'(在这里你可以工作)跟随'origin/master'(让'origin/master'作为上游),就像“git clone”所做的那样:
您可以对分支“dev_swmy”重复此操作。
1.现在你可以看到config文件是什么样子的。你可以通过编辑
.git/config
文件来得到完全相同的结果,然后执行“git fetch”。在开始使用仓库之前,不要忘记向Git做自我介绍(例如,设置'user.name'和'user.email'配置变量;通常在每个用户的配置文件中)!
vtwuwzda2#
如果您进行克隆,则所有分支中的所有修订都会沿着,但默认情况下,克隆的存储库将 checkout master。
只提取选中的分支比较麻烦,因为git并不认为你应该这样做,你必须手动下拉分支:
以上是我所知道的有效的方法。然而,如果你想建立一个正常工作的git repo,只想更窄地查看它的远程分支,你可以很容易地做到这一点:
brjng4g33#
另一种方法是避免直接克隆,而是手动添加一个具有自定义fetch refspecs集的远程。
例如:
mwg9r5ms4#
我认为这里更重要的问题是其他人会推什么,而不是你会克隆或拉什么。既然每个开发人员都在他自己的分支上工作,另一个问题是你如何最终拥有一个公共的代码库。开发人员是否将他们的分支合并到master?然后他们是否将他们更改后的master分支推到一个中央存储库?如果是这样的话,无论如何,你都没有办法拉其他开发人员的分支。
如果不是这样,我看不出你如何能组成一个有效的团队。
我最后想到:我很好奇为什么你不想把其他开发者的分支克隆到你的仓库中?
ev7lccsx5#
可能还有一种更现代的方法(使用网上找到的小型随机回购协议):
对特定的分支执行干净的 checkout ,并且只 checkout 该分支。
走进收银台:
显示已知的分支(确认仅1个所需分支已知):
获取另一个分支:
再次列出已知分支:
为了提高大型回购的性能,如果您计划在两个分支之间执行一些工作,并且您知道它们之间只有最近的偏差(深度的值由您决定),则可以在 checkout 中添加
--depth nnn
选项。如果您只打算操作repo中的特定文件,那么使用稀疏 checkout 是另一种选择(在执行提取之前,按照
git init
和config更改的方式进行设置--这是一种非常不同的方式)。希望这个有用。