同步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 <name> <url>

上面的命令创建了一个与远端仓库的关联关系。在此之后,你就可以使用<name>作为这个仓库的别名在其他git命令中使用。

git remote rm <name>

删除别名为<name>的远端仓库的关联关系。

git remote rename <old-name> <new-name>

将别名为<old-name>的远端仓库的关联关系重命名为<new-name>。

关于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 <NAME> <URL>

在./.git/config文件中添加一条记录,代表新增了一个名字叫做<name>的远端仓库,它的地址为<url>。

这个子命令接受 -f 选项,添加了-f 选项的命令执行之后会立即对新增的远端仓库执行一次git fetch命令。

它还接受 --tags 选项,增加这个选项的命令执行时会同时执行git fetch命令,并从该远端仓库导入所有tag。

RENAME <OLD> <NEW>

该命令会将./.git/config 文件中的一条记录的命名从 <OLD> 更新为 <NEW>。通过这个命令更新了远端仓库的命名之后,与之相关的分支和配置都会进行相应更新。

REMOVE or RM <NAME>

该命令修改./.git/config 文件并从中删除一条命名为 <NAME> 的记录。通过此命令删除远端仓库会自动删除与之相关的分支以及配置。

GET-URL <NAME>

输出远端的URL。

此命令接受 --push 选项,输出push URLs而不是fetch URLs。

接受 --all 选项时,则输出所有与该远端仓库相关的URLs。

SHOW <NAME>

该命令输出与远端仓库<NAME>相关的高级信息。

PRUNE <NAME>

删除所有本地仓库中上游为<NAME>而在远端仓库中不存在的分支。

接受 --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  git@bitbucket.com:origin_user/reponame.git (fetch)
origin  git@bitbucket.com: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 <remote-name> <branch-name>

上面的例子会向名为<remote-name>的远端仓库推送本地名为<branch-name>的分支。

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

git remote rename <old-name> <new-name>

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

git remote rm <name>

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容