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