19.3 远程版本库
名为origin的远程版本库是在版本库克隆时注册的,那么如何注册新的远程版本库呢?
1.注册远程版本库
下面将版本库file:///path/to/repos/hello-user1.git以new-remote为名进行注册。
$git remote add new-remote file:///path/to/repos/hello-user1.git
如果再打开版本库的配置文件.git/config会看到新的配置。
12 [remote"new-remote"]
13 url=file:///path/to/repos/hello-user1.git
14 fetch=+refs/heads/:refs/remotes/new-remote/
执行git remote命令,可以更为方便地显示已经注册的远程版本库。
$git remote-v
new-remote file:///path/to/repos/hello-user1.git(fetch)
new-remote file:///path/to/repos/hello-user1.git(push)
origin file:///path/to/repos/hello-world.git(fetch)
origin file:///path/to/repos/hello-world.git(push)
现在执行git fetch并不会从新注册的new-remote远程版本库中获取,因为当前分支设置的默认远程版本库为origin。要想从new-remote远程版本库中获取,需要为git fetch命令增加一个参数new-remote。
$git fetch new-remote
From file:///path/to/repos/hello-user1
*[new branch]hello-1.x->new-remote/hello-1.x
*[new branch]helper/master->new-remote/helper/master
*[new branch]helper/v1.x->new-remote/helper/v1.x
*[new branch]master->new-remote/master
从上面的命令输出中可以看出,远程版本库的分支复制到本地版本库前缀为new-remote的远程分支中去了。用git branch-r命令可以看到新增了几个远程分支。
$git branch-r
new-remote/hello-1.x
new-remote/helper/master
new-remote/helper/v1.x
new-remote/master
origin/HEAD->origin/master
origin/hello-1.x
origin/helper/master
origin/helper/v1.x
origin/master
2.更改远程版本库的地址
如果远程版本库的URL地址改变,需要更换,该如何处理呢?手工修改.git/config文件是一种方法,用git config命令进行更改是第二种方法,还有一种方法是用git remote命令,如下:
$git remote set-url new-remote file:///path/to/repos/hello-user2.git
可以看到注册的远程版本库的URL地址已经更改。
$git remote-v
new-remote file:///path/to/repos/hello-user2.git(fetch)
new-remote file:///path/to/repos/hello-user2.git(push)
origin file:///path/to/repos/hello-world.git(fetch)
origin file:///path/to/repos/hello-world.git(push)
从上面的输出中可以发现每一个远程版本库都显示两个URL地址,分别是执行git fetch和git push命令时用到的URL地址。既然有两个地址,就意味着这两个地址可以不同,用下面的命令可以为推送操作设置单独的URL地址。
$git remote set-url—push new-remote/path/to/repos/hello-user2.git
$git remote-v
new-remote file:///path/to/repos/hello-user2.git(fetch)
new-remote/path/to/repos/hello-user2.git(push)
origin file:///path/to/repos/hello-world.git(fetch)
origin file:///path/to/repos/hello-world.git(push)
当单独为推送设置了URL后,配置文件.git/config的对应[remote]小节也会增加一条新的名为pushurl的配置。如下:
12 [remote "new-remote"]
13 url=file:///path/to/repos/hello-user2.git
14 fetch=+refs/heads/:refs/remotes/new-remote/
15 pushurl=/path/to/repos/hello-user2.git
3.更改远程版本库的名称
如果对远程版本库的注册名称不满意,也可以进行修改。例如将new-remote名称修改为user2,使用下面的命令:
$git remote rename new-remote user2
完成改名后,不但远程版本库的注册名称更改过来了,就连远程分支的名称都会自动进行相应的更改。可以通过执行git remote和git branch-r命令查看。
$git remote
origin
user2
$git branch-r
origin/HEAD->origin/master
origin/hello-1.x
origin/helper/master
origin/helper/v1.x
origin/master
user2/hello-1.x
user2/helper/master
user2/helper/v1.x
user2/master
4.远程版本库更新
当注册了多个远程版本库并希望获取所有远程版本库的更新时,Git提供了一个简单的命令。
$git remote update
Fetching origin
Fetching user2
如果某个远程版本库不想在执行git remote update时获得更新,可以通过参数关闭自动更新。例如下面的命令关闭远程版本库user2的自动更新。
$git config remote.user2.skipDefaultUpdate true
$git remote update
Fetching origin
5.删除远程版本库
如果想要删除注册的远程版本库,用git remote的rm子命令可以实现。例如删除注册的user2版本库。
$git remote rm user2