分布式版本控制系统 Git | 五

分布式版本控制系统 Git | 五


Git 基础 | 远程仓库


远程仓库是指托管在网络中的项目版本库。这里介绍的平台是 Gitee,具体的链接:https://gitee.com/。可自行到网站注册账号。

本地 Git 仓库和 Gitee 仓库之间的传输是通过 SSH 加密的,所以需要先进行设置:

第一步:创建 SSH Key。在用户目录下,查看是否有 .ssh 目录。如果有,查看是否有 id_rsaid_rsa.pub 两个文件。若有,可以跳过这个步骤,否则,打开 Shell,创建 SSH Key

ssh-keygen -t rsa -C "youremail@example.com"

id_rsa 是私钥,不随意公开。id_rsa.pub 是公钥,可以公示。

第二步:登录 Gitee,打开 "Settings" - "SSH keys" 页面:

Add key 下方,填写 Title,在 Key 文本框中,将 id_rsa.pub 的内容复制粘贴进去,点击 Submit,在弹出的 Account security verification 窗口,输入当前账户的密码确认即可添加 Key。

查看远程仓库

假设查看已配置的远程仓库服务器,可以运行 git remote 命令,会列出服务器的简写。假设克隆自己的仓库,会看到 origin --这时 Git 给克隆仓库服务器默认的名字:

$ git clone git@gitee.com:damengsanqianqiu/python_learn.git
Cloning into 'python_learn'...
remote: Enumerating objects: 391, done.
remote: Counting objects: 100% (391/391), done.
remote: Compressing objects: 100% (318/318), done.
Receiremote: Total 391 (delta 143), reused 0 (delta 0)
Receiving objects: 100% (391/391), 160.78 KiB | 357.00 KiB/s, done.
Resolving deltas: 100% (143/143), done.

$ cd python_learn

$ git remote
origin

这里也可以使用选项 -v,显示需要读写远程仓库使用的 Git 保存的简写与对应的 URL。

$ git remote -v
origin  git@gitee.com:damengsanqianqiu/python_learn.git (fetch)
origin  git@gitee.com:damengsanqianqiu/python_learn.git (push)

若是远程仓库不止一个,这个命令会将它们全部列出。

添加远程仓库

登录 Gitee,点击 + 后,选择 New Repository 创建仓库。

创建完成后,页面中会有相应的提示告知如何操作。

这里我在远程仓库创建的仓库名与本地的仓库名一致,Gitee 创建的这个仓库还是空的,现在将本地已有的仓库与之相关联,然后,后续的修改将提交到 Gitee。

根据页面的提示,在本地仓库运行命令:

$ cd about_git

$ git remote add ag git@gitee.com:damengsanqianqiu/about_git.git

$ git remote -v
ag      git@gitee.com:damengsanqianqiu/about_git.git (fetch)
ag      git@gitee.com:damengsanqianqiu/about_git.git (push)

git remote add <shortname> <url> 这个命令即使用来添加一个新的远程 Git 仓库,利用 <shortname> 指定简写,方便后续引用。

现在在命令行操作时,即可使用 ag 代替整个 URL。

假设远程仓库的内容已经被协同者修改更新。而本地的仓库版本与远程仓库的版本不一致。现在想拉取远程仓库中有,但本地没有的信息,可以使用 git fetch ag:

$ git fetch ag
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (6/6), 631 bytes | 0 bytes/s, done.
From gitee.com:damengsanqianqiu/about_git
   34cec72..ebbd604  master     -> ag/master

现在远程的 master 分支可以在本地通过 ag/master 访问。

从远程仓库中抓取与拉取

上面使用的代码,就是从远程仓库中获得数据:

$ git fetch [remote-name]

这个命令会拉取本地中还没有的数据。执行完成后,会拥有远程仓库中所有分支的引用,可随时合并或查看。

前面也讲述了执行 git clone 命令的情况,会自动将其添加为远程仓库,并以默认的 origin 命名。所以,git fetch origin 会抓取克隆后新推送的所有工作。

但是 git fetch 命令抓取数据到本地,却并不会自动合并或修改当前的工作。这里必须手动合并。

假设本地有分支用以跟踪一个远程分支,可以使用 git pull 命令来自动的抓取然后合并分支到当前分支,这种是较为推荐的工作流程。

推送到远程仓库

当要分享项目时,这时必须推送到远程仓库。可以使用下面的命令:

$ git push ag master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 869 bytes | 869.00 KiB/s, done.
Total 7 (delta 3), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-3.8]
To gitee.com:damengsanqianqiu/about_git.git
   ebbd604..24c7079  master -> master

git push [remote-name] [branch-name] 这个命令就是将本地的项目推送到远程仓库。

若是同时间克隆,并且在协同者已经推送到远程仓库后,使用这个命令的时候,会失败。这个时候,应该先将协同者们的工作拉取下来,并且合并到自己的工作中,最终才推送。这部分会在 Git 分支 中进行讲解。

查看某个远程仓库

如果想要查看远程仓库的详细信息,可以使用 git remote show [remote-name] 的命令,例如:

$ git remote show ag
* remote ag
  Fetch URL: git@gitee.com:damengsanqianqiu/about_git.git
  Push  URL: git@gitee.com:damengsanqianqiu/about_git.git
  HEAD branch: master
  Remote branches:
    dev    tracked
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local refs configured for 'git push':
    dev    pushes to dev    (up to date)
    master pushes to master (up to date)

这个命令的输出结果会显示远程仓库的 URL 与跟踪分支的信息。上述的输出结果中,给出的信息显示当前处于 master 分支,如果运行 git pull,会将远程 master 分支合并到本地 master 分支上。

这些结果中也列出了,特定的分支上执行 git push 会自动推送到哪一个远程分支上。

远程仓库的重命名与移除

git remote rename <old> <new> 命令能够重新命名远程仓库的简写名。例如:

$ git remote
ag
origin
$ git remote rename ag aboutgit
$ git remote
aboutgit
origin

这里需要注意,这个操作重命名后,远程的所有跟踪分支和配置都会更新。官方文档也有给出相关提示:

Rename the remote named <old> to <new>. All remote-tracking branches and configuration settings for the remote are updated.

所以修改前引用 ag/master 的现在将引用 aboutgit/master

移除仓库的操作可以使用 git remote remove <name> 或者 git remote rm <name> 命令。例如:

$ git remote remove aboutgit
$ git remote
origin

这里 aboutgit 就已经被移除。这里的移除也是将所有跟踪分支和配置同步移除。


以上就是本篇的主要内容。


未完待续

欢迎关注微信公众号《书所集录》

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

推荐阅读更多精彩内容