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