Git--第3章--向远程仓库(GitHub)提交代码

       前面两章,我们已经讲述了Git的基本概念,以及在本地仓库上的一些基本操作。本章我们将学习如何在远程仓库上进行操作,在GitHub上提交我们的第一行代码。

1. SSH

       SSH? 纳尼?没错,我第一次听到这个名词时,也是吓了一跳。此SSH非彼SSH,下面听我仔细说来。
  你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以创建自己的项目,但是你没法提交代码。仔细想想也知道,肯定不可能随意就能提交代码的,如果随意可以提交代码,那么 GitHub 上的项目岂不乱了套了,所以提交代码之前一定是需要某种授权的,而 GitHub 上一般都是基于 SSH 授权的。
  那么什么是 SSH 呢? 简单点说,SSH是一种网络协议,用于计算机之间的加密登录。目前是每一台 Linux 电脑的标准配置。总结一下就是:SSH(Secure Shell)是一种加密的网络传输协议,常用于远程登陆与远程文件传输。使用SSH能有效避免数据在传输过程中被窃取篡改。SSH可以采用密码方式登陆远程,也可以使用公钥私钥自动登陆。而大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,所以想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置。

2. 生成SSH key

       Linux 与 Mac 都是默认安装了 SSH ,而 Windows 系统安装了 Git Bash 应该也是带了 SSH的。大家可以在终端(win下在 Git Bash 里)输入 ssh 如果出现以下提示证明你本机已经安装 SSH, 否则请搜索自行安装下。

71.png

  紧接着输入 ssh-keygen -t rsa -C"邮箱",什么意思呢?就是指定 rsa 算法生成密钥。如果你出现下面的情况:
72.png

  哥们别急,你没有看清我的命令,注意:ssh-keygen -t rsa -C"邮箱"的ssh和-key之间是没有空格的,要留心额!
  接着连续四个回车键(有人说三个,反正我是四个;不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa 是密钥,id_rsa.pub 就是公钥。
73.png

这两文件默认分别在如下目录里生成:
C:\Users\yucheng.HOME.ssh\id_rsa
C:\Users\yucheng.HOME.ssh\id_rsa.pub
当然下面的是我的电脑,你需要根据你的情况找:

74.png

  接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上,这样你本地的 id_rsa 密钥跟 GitHub上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。

3. GitHub 上添加 SSH key

第一步:登录GitHub后,切换到setting页面:


75.png

第二步:点击最左侧 SSH and GPG keys :


76.png

第三步:点击右上角的 New SSH key 按钮:


77.png

79.png

第四步:打开 id_rsa.pub文件:
这里提醒下,怎么查看 id_rsa.pub 文件的内容?
Linux/Mac 用户执行以下命令:
cd ~/.ssh
cat id_rsa.pub
Windows用户,设置显示隐藏文件,可以使用 EditPlus 或者 Sublime 打开复制就行了。


78.png

80.png

第五步:点击Add SSH Key,会进入下面界面:

81.png

第六步:确认密码(密码即你GitHub账户的密码),确认后会进入下面界面:
82.png

第七步:命令窗口输入 ssh -T git@github.com 进行测试:
如果第一次进行此操作会出现下面的提示,直接输入yes:
84.png

若不是第一次操作,则会出现下面的界面,那么恭喜你,你已经添加成功了。
83.png

4. Push & Pull

在提交代码之前我们先要了解两个命令,也是上次的文章没有介绍的,因为这两个命令需要跟远程仓库配合。
Push :直译过来就是「推」的意思,什么意思呢?如果你本地代码有更新了,那么就需要把
本地代码推到远程仓库,这样本地仓库跟远程仓库就可以保持同步了。
代码示例:
git push origin master
意思就是把本地代码推到远程 master 分支。


Pull:直译过来就是「拉」的意思,如果别人提交代码到远程仓库,这个时候你需要把远程仓库的最新代码拉下来,然后保证两端代码的同步。
代码示例:
git pull origin master
意思就是把远程最新的代码更新到本地。一般我们在 push 之前都会先 pull ,这样不容易冲突。

5. 提交代码

添加 SSH key 成功之后,我们就有权限向 GitHub 上我们自己的项目提交代码了,而提交代码有两种方法:
第一种情况:Clone自己的项目
  我们本地的项目是从远程仓库下载下来的,并时刻与其保持着同步更新,这样二者之间的差异不是很大,适合用下面的方式提交代码。
  Clone自己的项目 我们以我在 GitHub 上创建的 test 项目为例,执行如下命令:
git clone git@github.com:stormzhang/test.git
那么如何获取我们项目test在GitHub上的地址呢?

85.png
命令窗口如下:
86.png
在你的文件下可以查看到你Clone的项目文件:
87.png

  这样就把 test 项目 clone 到了本地,你可以把 clone 命令理解为高级点的复制,这个时候该项目本身就已经是一个git 仓库了,不需要执行 git init 进行初始化,而且甚至都已经关联好了远程仓库,我们只需要在这个 test 目录下任意修改或者添加文件,然后进行 commit ,之后就可以执行:
git push origin master
或者
git push
如下图所示:
89.png

进行代码提交,这种是最简单方便的一种方式。

第二种方式:关联本地已有项目
  如果我们本地已经有一个完整的 git 仓库,并且已经进行了很多次 commit,这个时候第一种方法就不适合了。
  假设我们本地有个 test2 的项目,我们需要的是在 GitHub 上建一个 test3的项目,然后把本地test2 上的所有代码 commit 记录提交到 GitHub 上的 test3 项目。
第一步:就是在 GitHub 上建一个 test3 项目,这个想必大家都会了,就不用多讲了。

90.png

第二步:在本地仓库创建一个test2项目(并且假设我们的这个test2项目已经进行了很多次的commit操作)
92.png

第三步:把本地 test2 项目与 GitHub 上的 test3 项目进行关联,切换到 test2 目录,执行如下命令:
git remote add myorigin git@github.com:yucheng1994/test3.git
  什么意思呢?就是添加一个远程仓库,他的地址是git@github.com:yucheng1994/test3.git ,而 origin 是给这个项目的远程仓库起的名字,是的,名字你可以随便取,只不过大家公认的只有一个远程仓库时名字就是 origin ,为什么要给远程仓库取名字?因为我们可能一个项目有多个远程仓库?比如 GitHub 一个,比如公司一个,这样的话提交到不同的远程仓库就需要指定不同的仓库名字了。
查看我们当前项目有哪些远程仓库可以执行如下命令:
git remote -v
接下来,我们本地的仓库就可以向远程仓库进行代码提交了:
git push myorigin master
就是默认向 GitHub 上的 test3 目录提交了代码,而这个代码是在 master 分支。当然你可以提交到指定的分支,这个之后的文章再详细讲解。

93.png
然而从上图,我们可以发现,会有问题,会报错!
那么到底是啥原因呢?又该如何解决呢?
原因:远程仓库中含有本地仓库项目所没有的README.md文件
解决方案:对项目进行合并,输入命令:git pull --rebase myorigin master
详细操作请见Git--常见问题s--如何解决failed to push some refs to git

解决上述问题之后,我们就可以成功的将本地的项目提交到远程仓库中了。


96.png
97.png

到这里你就成功的向远程仓库提交了代码!你会了吗

6.总结

       通过本文的介绍,大家终于可以成功的向 GitHub 提交代码了,但是相信大家还有很多疑问,比如关于分支的理解与使用,比如 git 的其他一些有用的配置,比如怎么向一些开源项目贡献代码,发起 Pull Request 等,之后的系列文章会逐一进行介绍,敬请期待。

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

推荐阅读更多精彩内容

  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,494评论 0 13
  • 长时间在外面,突然要回家,小彤很高兴。如期而归,兴高采烈的带着男朋友回家,相处已久,似乎结婚,执子之手,与子偕...
    4e57b8f24a48阅读 132评论 0 1
  • 无工作任务的一个早上,对比起前两天的各种报表真是幸福感满满的,但是,还有一个但是存在,昨晚开会通知的到今天...
    清欢lj阅读 357评论 0 1
  • 文 | 雨霏 近来在控制体重,但是因为有“饿了容易低血糖”的潜意识,所以,每次一感觉到饿就开始吃,因此体重控制的效...
    做好自己做最好的自己阅读 297评论 0 0
  • 彩票又中奖了✌中奖率90%,哈哈哈!好开心✌✌感恩宇宙哥哥如此爱你,开通彩票这条财富管道,耶!谢谢!谢谢!谢谢! ...
    楚帅阅读 180评论 0 2