Git实用教程-第六篇:远程仓库

       到目前为止,我们已经学习了如何添加文件至版本库、如何回退及如何查看各阶段的内容,这些操作都是对本地仓库操作的,Git作为分布式控制系统,如何完成与其他成员间的协作呢。本篇将会介绍远程版本库想着的操作。


操作远程版本库,首先需要搭建一个远程服务器的版本库,这里,我们先使用github网站作为我们的远程服务器。GitHub是一个面向开源及私有软件项目的托管平台,我们只需要注册一个账号,即可免费创建远程Git仓库。当然,也可以使用国内的Git项目托管平台-码云。

Tips:在GitHub或码云上托管的代码是公共的,大家都是可以访问的(码云的私有库功能有5个成员的上限限制),如果不想被所有人访问,私有自己的代码,可以使用他们的收费功能,或者自己搭建一个GitLab服务器。
本地仓库与远程仓库的传输有两种方式,一种是ssh,一种是https,若选择ssh传输,需要先设置ssh key,若选择https传输,在传输时需要输入用户名和密码。


一、设置SSH key

1、创建SSH key

在用户主目录下,看看有没有.ssh目录(.ssh目录是隐藏目录,linux环境使用命令 cd ~/.ssh 即可打开),如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2、在GitHub上设置ssh key

登录GitHub,依次点开:"Settings" -> "SSH and GPG keys" -> "New SSH key",
Title任意填写,在Key文本框里粘贴id_rsa.pub文件的内容,最后点击"Add SSH key",即可看到已经添加的Key。


二、关联远程仓库

使用远程仓库时有两种情况:一种是将本地的项目做最开始的项目推送到远程供大家在此基础上开发;另一种是从远程仓库上拉取代码到本地,进行开发。下面将分别介绍。

1、推送本地版本库

首先在远程服务器上创建项目,登录GitHub后,点击页面中间的“Start a project”按钮, 然后在“Repository name”下面填上项目名称:gitdemo,最后点击最下方的"Create repository"按钮,创建项目。


第6篇_1.png

当项目创建完成后,会有提示,可以创建一个新项目推送到远程仓库,或将已经存在的项目推送到远程仓库。


第6篇-2.png

这里我们使用之前已经创建好的项目,推送到远程仓库。将下面命令中的地址替换为你自己的GitHub项目地址

$ git remote add origin https://github.com/****/gitdemo.git
$ git push -u origin master
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 535 bytes | 535.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/****/gitdemo.git
 * [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

第一条命令,是将本地创建与远程服务器上创建的项目进行关联。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。
第二条命令,是将本地仓库的所有版本推送到远程仓库中。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,刷新GitHub页面,发现远程库的内容与本地一模一样。
从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!


第6篇-3.png

2、克隆远程版本库

如果已经有了远程仓库,我们只需要将远程仓库克隆到本地,即可操作远程库。
首先,登录GitHub,创建一个新仓库,名字叫gitproject。勾选“Initialize this repository with a README”选择框,这样GitHub会自动为我们创建一个README.md文件。


第6篇-4.png

项目创建成功后,点击“Clone or download”按钮,复制项目地址。


第6篇-5.png

在本地选择合适的项目工作空间,使用git clone命令克隆项目

$ git clone https://github.com/dudan57/gitproject.git
Cloning into 'gitproject'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.


三、拉取、推送代码

不同于SVN基于文件推送、拉取,Git在默认情况下是基于版本推送、拉取的,也就是说Git只能推送、或拉取整个版本(只拉取版本中的部分文件在Git1.7.0版本后也可以实现,需要做特殊设置,由于实际使用中完全可以不用这个功能,这里不作讨论,感兴趣的朋友可以自行百度)。

例如,仓库中有A, B, C三个文件,现在有人改动了这三个文件并提交到远程库了,可不可以我只拉取A文件,而不拉取B, C两个文件呢,默认情况下Git是做不到的,但SVN可以轻松做到。

拉取Git代码时,如果发生了冲突,Git会将远程仓库的代码与本地仓库的代码都列出来,标识冲突,让用户自已去选择保留哪部分。

如果在拉取代码前,本地的某个文件已提交至本地版本库,但与远程版本库有冲突,同时这个文件又做了改动但没再次提交到本地版本库(通过git status命令可以发现该文件是红色或绿色显示),将造成该文件在远程仓库、本地版本库、工作空间都不一样并有冲突,如果这时候去拉取远程仓库的代码,Git将不知道如何比较,此时拉取代码也会报错,拉不下来远程库。因此在拉取或推送代码时,要确保本地需要推送的代码改动都已提交至本地版本库,可以通过git status命令查看,如果没有红色(有改动待添加至暂存区的文件)或绿色文件(已添加至暂存区待提交至本地版本库的文件),就可以使用git pull命令拉取代码了,在每次使用git push命令推送代码前,先用git pull命令拉取代码。


小结

1、本地仓库关联远程仓库

$ git remote add origin <远程仓库地址>

2、克隆远程仓库

$ git clone <远程仓库地址>

3、拉取代码

$ git pull origin master

4、推送代码

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,663评论 9 163
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,957评论 3 27
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,936评论 1 8
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,507评论 1 7
  • 如何关联远程库? 1.新建本地库 2.通过git官网新建远程库 3.输入指令: git remote add or...
    诸子大人阅读 16,455评论 1 9