我刚刚开始使用git,我有一个问题.我的应用程序有10个其他开发人员在使用它,每个开发人员都有自己的分支,如dev_XXXXX.因此,如果我对存储库进行克隆,那么他们的所有代码都会被复制到我的机器上吗?在那种情况下,我不想要那样.假设我的分支是dev_swamy,那么如何克隆稳定分支和dev_swamy呢?谢谢.
Jak*_*ski 26
默认情况下,git clone将获取所有分支,但这些分支将存储为远程跟踪分支:例如,分支"dev_XXXXX"将存储为"origin/dev_XXXXX"(以"refs/remotes/origin/dev_XXXXX"作为全名).那些远程跟踪分支在git branch输出中不可见:您需要git branch -r列出远程跟踪分支(或git branch -a列出所有分支).如果这些分支与主线没有太大分歧,则它们不会在存储库中占用太多磁盘空间.因此,我不明白为什么要只克隆选定的分支.
但是,如果您想要只有两个选定分支的克隆,您可以这样做:
首先,创建新的空存储库
$ mkdir repoclone
$ cd repoclone/
$ git init
Initialized empty Git repository in /home/user/repoclone/.git/
Run Code Online (Sandbox Code Playgroud)然后以名称'origin'添加您的存储库(就像"git clone"将其命名),请求仅使用" git remote "命令跟踪两个分支:'master'和'dev_swamy' .检查它是否已正确添加.
$ 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)
Run Code Online (Sandbox Code Playgroud)
如果稳定分支被称为"稳定"而不是"主",那么您当然可以修改上面的示例.-m <branch>如果您希望指定的分支在远程中是默认分支,也有选项.
从'origin'获取(您也可以通过使用-f上面的"git remote add"选项来执行此操作):
$ git fetch
remote: Counting objects: 282, done.
remote: Compressing objects: 100% (193/193), done.
remote: Total 282 (delta 82), reused 0 (delta 0)
Receiving objects: 100% (282/282), 81.30 KiB | 135 KiB/s, done.
Resolving deltas: 100% (82/82), done.
From user@example.com:repo.git
* [new branch] master -> origin/master
* [new branch] dev_swamy -> origin/dev_swamy
From user@example.com:repo.git
* [new tag] v1.0 -> v1.0
* [new tag] v1.0.1 -> v1.0.1
* [new tag] v1.1 -> v1.1
Run Code Online (Sandbox Code Playgroud)设置本地分支'master'(你将在哪里工作)跟随'origin/master'(将'origin/master'作为上游),就像"git clone"一样:
$ git checkout -t origin/master
Branch master set up to track remote branch master from origin.
Already on 'master'
Run Code Online (Sandbox Code Playgroud)
您可以对分支'dev_swamy'重复此操作.
现在您可以看到配置文件的外观. 您可以通过编辑.git/config文件来获得完全相同的结果,如下所示,然后执行"git fetch".
$ cat .git/config # or just open this file in your editor
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = user@example.com:repo.git
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/dev_swamy:refs/remotes/origin/dev_swamy
[branch "master"]
remote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)在开始使用存储库之前,不要忘记向Git介绍自己(即设置'user.name'和'user.email'配置变量;通常在每用户配置文件中)!
如果你克隆,所有分支中的所有修订都会被克隆,但默认情况下,克隆的存储库将检出 master。
只是采用选定的分支比较棘手,因为 git 并不真的认为你应该那样工作。您必须手动拉下分支:
mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
git fetch origin master:master
git fetch origin dev_XXX:dev_XXX
Run Code Online (Sandbox Code Playgroud)
以上是我所知道的工作。但是,如果您想设置一个正常工作的 git repo,只是对其远程分支有更狭窄的看法?你可以很容易地做到这一点:
Run Code Online (Sandbox Code Playgroud)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
| 归档时间: |
|
| 查看次数: |
8544 次 |
| 最近记录: |