同步GIT仓库的操作 -- remote命令

git remote 命令是用于同步变更的命令组中的一个。与其配合使用的其他命令包括git fetch git push git pull

Git remote

git remote命令用来创建、查看和删除本地仓库与其他代码仓库之间的连接。remote链接更像是一种书签标记而不是与其他仓库之间的硬连接。这种标记通过一种简单的命名来代替不便使用的完整URL,而不是提供一种与仓库之间的实时通道。

举例来说,下图就显示了一个中心仓库和另一个开发者的仓库与你本地仓库的关联关系。设置remote之后你就可以使用缩略名表示其他仓库了,而不需要每次都输入完整的URL。

image.png

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命令中使用。

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 fetchgit pull都可以被用来读取远端仓库。这两者之间的具体差异会在相应章节进一步解释。

对Git远端的push操作

git push命令用于向远端仓库进行写入操作。

git push  

上面的例子会向名为的远端仓库推送本地名为的分支。

对于远端链接的重命名以及删除

git remote rename  

git remote rename 命令的含义即是其字面意思。执行结果即是将原本名为的远端仓库链接修改为。这一变更也会更新./.git/config文件中与之对应的配置。

git remote rm 

git remote rm用来删除名为的远端仓库的链接。如果你根据本文一路执行下来,那么在示例开头的git remote add命令执行之后,本地应该已经建立了与remote_test的关联,现在我们尝试执行git remote rm remote_test命令。命令执行之后,会看到./.git/config文件中关于remote_test的配置信息不复存在。

你可能感兴趣的:(同步GIT仓库的操作 -- remote命令)