git remote
命令是用于同步变更的命令组中的一个。与其配合使用的其他命令包括git fetch
git push
git pull
。
Git remote
git remote
命令用来创建、查看和删除本地仓库与其他代码仓库之间的连接。remote链接更像是一种书签标记而不是与其他仓库之间的硬连接。这种标记通过一种简单的命名来代替不便使用的完整URL,而不是提供一种与仓库之间的实时通道。
举例来说,下图就显示了一个中心仓库和另一个开发者的仓库与你本地仓库的关联关系。设置remote之后你就可以使用缩略名表示其他仓库了,而不需要每次都输入完整的URL。
Git remote使用概览
git remote
本质上是用来管理远端仓库列表的命令,这些远端仓库的信息都被保存在./git/config 文件中。下面这个命令可用来查看远端仓库列表的信息。
查看git remote配置信息
git remote
展示当前关联的其他仓库列表
git remote -v
与上面的命令一样,但是输出会包含每一个仓库的URL
创建和修改git remote配置
git remote
命令也可当作一个用于修改./.git/config 文件的帮助命令。该命令用于管理与其他仓库的关联关系。比如下面的命令就会修改 ./.git/config 文件。当然也可以直接修改 ./.git/config 文件达成同样的结果。
git remote add
上面的命令创建了一个与远端仓库的关联关系。在此之后,你就可以使用
git remote rm
删除别名为
git remote rename
将别名为
关于Git remote
Git被设计成为有能力为每个开发者提供一套完全独立的开发环境。这就意味着在仓库之间信息不会自动来回传递。相反,需要开发者手动将上游的提交pull回本地仓库,以及手动将本地提交push回远程的中心仓库。这么看来,git remote
命令真的就只是一个便于指向这些仓库的别名。
Origin Remote
每当你使用git clone
命令clone一个远端的仓库,都会自动创建一个remote链接叫做origin,并指回被clone的远端仓库。由于这一操作为获取上游变更或者提交本地变更提供了快捷方式,于是通过此命令在本地创建中心仓库的副本成为开发者的常见操作。这种默认创建origin上游的行为也是很多托管在git上的项目称自己的中心仓库为origin的原因。
仓库URLs
Git支持通过很多方式来访问远端仓库。其中最简单的两种方式是通过HTTP和SSH协议。HTTP协议通常用于允许匿名只读访问仓库。比如:
http://host/path/to/repo.git
但是,通常来说通过HTTP地址的访问都无法进行push操作(应该不会有人愿意让匿名用户进行push操作)。对于可读可写的操作,应该使用SSH协议:
ssh://user@host/path/to/repo.git
通过SSH协议访问时,Git托管主机上应该有你的一个合法SSH账号,除此之外你无需进行其他任何配置,Git的具名SSH访问能力是开箱即用的。通常第三方托管平台,会提供你的Git项目的URL。
Git remote命令
很多Git命令都可以接受后续的命令作为“子命令”,git remote
也不例外。下面就是一个git remote
子命令的一个例子
ADD
在./.git/config文件中添加一条记录,代表新增了一个名字叫做
这个子命令接受 -f 选项,添加了-f 选项的命令执行之后会立即对新增的远端仓库执行一次git fetch
命令。
它还接受 --tags 选项,增加这个选项的命令执行时会同时执行git fetch
命令,并从该远端仓库导入所有tag。
RENAME
该命令会将./.git/config 文件中的一条记录的命名从
REMOVE or RM
该命令修改./.git/config 文件并从中删除一条命名为
GET-URL
输出远端的URL。
此命令接受 --push 选项,输出push URLs而不是fetch URLs。
接受 --all 选项时,则输出所有与该远端仓库相关的URLs。
SHOW
该命令输出与远端仓库
PRUNE
删除所有本地仓库中上游为
接受 --dry-run 选项,带有此选项的命令会列出所有会被删除的分支名,但并不会真正删除他们。
Git remote 命令举例
除了origin作为远端仓库以外,你也许会需要通过该命令设置与其他团队成员的仓库链接。比如你的同事,John在 dev.example.com/john.git
上维护了一个可被访问的git仓库,那么可以通过下面的命令与其建立链接。
git remote add john http://dev.example.com/john.git
使用这种方式访问其他个人的仓库,可以让你与他人之间的协作在不影响中心仓库的前提下安全进行。这对于多个小团队共同向一个大项目提交代码的场景会很有用。
显示远端仓库
默认执行git remote
命令后会列出之前设置过的所有远端仓库的别名。就像下面这样:
$ git remote
origin
upstream
other_users_repo
执行git remote
命令时在其后添加 -v 选项会列出更多信息,除了远端仓库的别名之外,还有与之相对应的仓库URL。-v 选项就是 "verbose"的简写。下面即是其执行结果输出举例:
git remote -v
origin [email protected]:origin_user/reponame.git (fetch)
origin [email protected]:origin_user/reponame.git (push)
upstream https://bitbucket.com/upstream_user/reponame.git (fetch)
upstream https://bitbucket.com/upstream_user/reponame.git (push)
other_users_repo https://bitbucket.com/other_users_repo/reponame (fetch)
other_users_repo https://bitbucket.com/other_users_repo/reponame (push)
添加远端仓库
git remote add
命令用来添加与某个远端仓库的链接。添加之后,你就可以在其他git命令中使用其别名。执行之后,./.git/config 文件也会发生变更,可以通过文本编辑器查看这一变化。下面是其举例:
$ git remote add fake_test https://bitbucket.com/upstream_user/reponame.git; [remote "remote_test"]
url = https://bitbucket.com/upstream_user/reponame.git
fetch = +refs/heads/*:refs/remotes/remote_test/*
检视远端信息
git remote
命令后跟 show 子命令会输出对应远端的详细信息。其中包括该远端上游相关的分支,以及其本身的push和fetch URLs。
git remote show upstream
* remote upstream
Fetch URL: https://bitbucket.com/upstream_user/reponame.git
Push URL: https://bitbucket.com/upstream_user/reponame.git
HEAD branch: main
Remote branches:
main tracked
simd-deprecated tracked
tutorial tracked
Local ref configured for 'git push':
main pushes to main (fast-forwardable)
对Git远端的fetch和pull操作
一旦通过git remote add
命令向本地添加了某个远端仓库的链接,远端仓库的别名即可在其他Git命令中作为参数使用,以便与其远端仓库进行通信。git fetch
和git pull
都可以被用来读取远端仓库。这两者之间的具体差异会在相应章节进一步解释。
对Git远端的push操作
git push
命令用于向远端仓库进行写入操作。
git push
上面的例子会向名为
对于远端链接的重命名以及删除
git remote rename
git remote rename
命令的含义即是其字面意思。执行结果即是将原本名为
git remote rm
git remote rm
用来删除名为git remote add
命令执行之后,本地应该已经建立了与remote_test的关联,现在我们尝试执行git remote rm remote_test
命令。命令执行之后,会看到./.git/config文件中关于remote_test的配置信息不复存在。