前言

本教程试图解决的问题:

  • 降低学习git的门槛。
  • 用简单的场景带领大家循序渐进的快速掌握git用法。
  • 让大家掌握在实战(真实互联网公司)中使用git的流程和步奏。
  • 如果通过技能提升让大家赚到更高的工资,那是再好不过的事情了。

学习新东西一定要打牢基础, E哥建议看了这篇文章的同学要做到:

  1. 按行为顺序一个章节一个章节的看完 (两个小时的时间不长吧?)
  2. 把命令都按顺序执行一遍(copy,pase和回车应该不困难吧?)

开始Git之旅

“呜呜呜,呜呜呜”,睡梦中的李靖被震动的手机铃声吵醒。

“妈蛋,今天周一,又要上班。我什么时候才能赚到足够的钱财务自由啊,想睡到几点就几点!” 半梦半醒的李靖心理默默念道。

“今天是到新单位的第二周,上周五领导说这周一开始要我布置编码任务了。”想到这里李靖一下睡意全无,一咕噜爬起来。洗漱完毕,套上一件白色T恤衫,把笔记本电脑塞进双肩包,背上匆匆出门。

李靖今年24岁,是一名有一年多工作经验的PHP攻城狮。 之前在北京的一家软件公司工作,上周刚跳槽到了一家互联网公司。新公司的工作节奏比之前的传统软件公司快多了,李靖感觉挑战蛮大的。不过一想到已经翻翻的工资,心理顿时充满了干劲。

上午9:30,公司的会议室里,雷神项目主管E哥和大家开完了例行的十分钟站立会,明确布置一天的工作任务后,单独把李靖留了下来,对李靖说:”测试组发现了网站上有几个bug,你刚来,这周就先修复这几个bug把,正好熟悉一下我们的系统。”

”好的, 没问题!“李靖心理还是有把握的,上周代码已经熟悉得差不多,应该问题不大。”不过有个事不是很有把握。“李靖为难道。

”啥问题? 说出来我们一起想办法解决。“E哥问道。

”我以前的单位用的svn提交代码, 咱们是用git,因为之前没有用过, 我想应该2,3天就能赶上,不过我担心这样会影响一些进度。“李靖心理知道,雷神项目最近正在进行新版开发,计划下周上线,时间比较紧。不过有风险,还是提前说出来比较好,免得到时候拖团队后台。

E哥想了一下,“那这样吧,我给做个简单的git培训,这样你能节省些时间。你拿上电脑到这个会议室,我们花2小时速度的过一下。”

Git的基础概念

三种状态

李靖回工位拿上自己的笔记本电脑,等他返回会议室时,看见E哥拿墨水笔已经在墙壁的白板上画着一幅线框图。

”我们就开始吧!先来了解git一个非常重要的概念,” E哥快速切入主题,“ Git 管理项目时,文件在三个区域流转:Git 的工作目录(working directory),暂存区域(staging area),以及本地仓库(respository)。“

基本的 Git 工作流程如下所示:

  1. 在工作目录(working directory)中修改某些文件。
  2. 对这些修改了的文件使用 git add,保存到暂存区(staging area)。
  3. 使用git commit,将保存在暂存区(staging area)的文件快照转储到本机的git仓库 respository中。

E哥画完了图,总结道:“所以,在 Git 版本管理下的文件,都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。“

”我的前一家公司用的版本管理软件是subversion,感觉它能做的事情和git差不多,不过在概念上和git略有不同。“李靖说道。

”不是略有不同,是有很大不同。 你用过svn,我就不从版本控制最基本的原理讲起了(不了解svn的同学自行百度补脑)。传统集中式版本控制系统,例如你刚提到的subversion, 在使用时,要先从中央服务器checkout最新的版本,然后开始修改代码,再把修改的文件提交给中央服务器。 这么做最显而易见的缺点是中央服务器的单点故障。例如当服务器的网络出现问题时,大家都没法工作。“

“是的,我们以前遇到过。公司的svn服务器坏了,我们好几天的代码没及时合并,后来解决冲突的代码花了好多时间。“李靖想起以前的经历直摇头。

“Git因为采用分布式版本管理,客户端并不只提取远程仓库的最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,服务器或者任何人的电脑坏了不要紧, 从其他人哪里克隆一个就可以了。客户端只有在需要时,才向远程仓库推送或者拉取代码。“

“我理解所谓分布式,相当于git在每台电脑上建立了版本管理服务器,绝大多数操作都只需要访问本地文件和资源。只在和远程仓库同步数据时才使用网络。“ 李靖补充到,” 这样的好处是即使没有网络,我也可以方便的在家里写程序而不用担心代码丢失了。 “

“是的,可以这样理解。“

“我们再来复习一下,“E哥指着白板上的状态图说,”git分布式版本管理文件的三个区域:
1. 工作区(working directory)
2. 暂存区(stage area)
3. 本地仓库( respository)

Git,github和gitlab

”我以前阅读技术文章时里面提到过一个叫github的网站,它做的开源社区现在非常火,你刚才说的远程仓库是指github吗?我们项目的代码也存在github上吗?“听完刚才对git特性的一番描述和推荐,李靖对git产生了浓厚的兴趣。

”GitHub是个开源代码的网站,它提供git服务可以用来托管各种开源代码。同时它提供一个web界面,方便项目的参与者浏览源码,Wiki编写,和各种git操作。 世界各地的程序员能在这里方便的对各种开源项目进行克隆,分支和提交修改。Github的出现,极大的方便了开源项目的管理,越来越多的开源项目纷纷从 SourceForge或Google Code这些老的网站迁移到github上, Github逐渐成为了开源软件开发以及发现已有代码的首选。”

“不过考虑到代码安全,公司的代码不会轻易放到互联网上。所以我们要搭建公司私有的git代码仓库。现在普遍使用gitlab这个开源项目, 它能搭建一个类似于github网站的web网站。公司用这种架构既能让大家享受到github方便的代码管理功能,又能保证公司代码的安全性“。

E哥说完拿起桌子上墨水笔,起身走到白板前面画了一个草图 :

“大部分公司的git环境是这样的。 要注意的一点是,由于公司搭建的gitlab是和互联网的github.com完全不同的环境,所以你在github.com注册的账号是不能在公司的gitlab上使用的,得注册一个新账号。“

“那git如何管理这些不同的账号呢?“李靖追问道, ”如果我在同一台电脑上既要用公司的环境也想在开源社区提交代码,账号之间会不会产生冲突呢?“

“你这个问题问得好,” E哥对李靖的好奇心很满意,点点头道:“ 等我们装上git,再来看怎么解决你提的这个问题。“

安装git客户端

“实践出真知,我们边学边动手吧,先在你的笔记本上装一个git客户端。” E哥边说边打开了自己的笔记本电脑。

“你先访问Git 官方站点下载编译好的命令行客户端程序,网址我用QQ传给你。“

http://git-scm.com/download

李靖打开了电脑上的火狐浏览器,输入了E哥通过QQ发过来的链接地址,浏览器稍微等了两三秒缓慢地打开了网站。”好吧,这访问速度又被‘伟大的墙’给拖慢了!“李靖摇了摇头心里想。

“官方网站也提供图形化的客户端下载,”坐在李靖身旁的E哥补充到:”但是为了尽快掌握git,我建议你只使用git的命令行客户端。”

Windows安装

李靖按E哥指点,点击下载windows版本的链接:

http://git-scm.com/download/win

页面上显示 “下载已经开始”,看样子这个网站自动判断了要下载那个正确的版本,做的还是比较易用。不过浏览器一直显示在加载资源,没有开始下载的意思。

“点击手工下载吧,访问国外的网站比较慢,我们还是节约点时间!” 看来E哥已经对网络不抱希望了。

“下载时间还挺长的,我先去上个卫生间。记住安装时所有选项都选默认,一路点确认就行,这样能统一环境,避免不必要的麻烦。安装完成后在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功。”说完E哥起身离开了会议室。

下载进度在一点一点向前推进, 李靖趁这个空隙走出去到饮水机旁喝了点水,拿两个杯子,泡了两杯立顿红茶,放到会议室的桌上。

Mac安装

Mac的同学可以访问网址:

http://git-scm.com/download/mac

点击下载的dmg文件,根据提示进行安装。

Linux安装

使用linux的同学,首先输入git,确认一下系统有没有安装Git:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

如果没有安装git,可以直接用系统提供的包管理工具来进行安装。

Debian/Ubuntu

$ apt-get install git 

Fedora

$ yum install git 

Gentoo

$ emerge --ask --verbose dev-vcs/git 

Arch Linux

$ pacman -S git 

openSUSE

$ zypper install git 

FreeBSD

$ cd /usr/ports/devel/git
$ make install 

Solaris 11 Express

$ pkg install developer/versioning/git 

OpenBSD

$ pkg_add git

【小贴士】
如果你使用的是linux操作系统,你可以下载git的源代码,然后在自己的环境下编译和安装。编译前需要安装zlib,openssl等第三方库。对于初学者来说不是很推荐,有兴趣的可以阅读git的官方文档。

初次运行git的配置

不一会E哥走回了会议室,看见了桌子上的热茶。 “咦!回来还有红茶喝,你小子够机灵的。“

”这叫拜师嘛!“李靖半开玩笑道。

”看来我得好好教,才对得起这杯茶啊!拜师礼我们就免了,改天请哥个吃顿金钱豹的400元自助餐吧!“

“没问题,E哥。”李靖笑道。

“在开始学习git命令前,需要一些准备工作。”E哥把笔记本电脑放到李靖旁边的位置,坐下来。

先确认命令行所在的目录位置, windows安装的git, bash命令行窗口的默认在/c/users/{username} 下。执行命令:

$ pwd
/c/Users/liyi

创建一个文件目录mygit,用来存放git仓库产生的文件:

$ mkdir mygit
$ cd mygit
$ pwd
/c/Users/liyi/mygit

如果之前没有github.com的账号,先在github.com上注册一个。 访问

https://github.com

填写你在github网站的用户名和电子邮件,根据提示进行注册。 当成功提交注册信息后,你的电子邮箱会收到一封github发送的确认邮件, 点击邮件中的“verify email address” 按钮确认邮件地址:

然后回到刚才的git命令行窗口输入:

$ git config --global user.name "Li Yi"
$ git config --global user.email "985913625@qq.com"

其中的user.name 填写在github注册是的用户名, user.email 填写github注册时的邮箱地址。

注意git config命令的 –global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,我们后面在详细介绍有关 –global 的用法。

添加ssh key

由于本地的git仓库和github通信时用到了ssh协议,处于安全认证需要,如果当前的电脑是第一次使用github,需要先生成ssh key,然后在github上将ssh key进行登记。

要创建创建SSH Key在命令行模式下,执行命令:

$ ssh-keygen -t rsa -C "985913625@qq.com"

把邮件地址换成你注册github输入的邮件地址,然后一路回车,使用默认值即可。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥, id_rsa.pub是公钥。

$ cd .ssh
$ ls
id_rsa  id_rsa.pub$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDlqxIGoJUClIfKEXqIw2pC6tvug4qgKFNolPeXlt8lwOP0AQHoDCmkU0p+EonXptHJUh4Yywp81diLQM8nmCABGcz4irJfnXIZ+/qufHN2IeKL+Uj9UsmpPgmE4mKoTaTUijbIC14JXKwy68EjGztpU4tN/DeZ9gu1W+1ieOxumAvkx0b72LIX/CN+9A2PJePYDY8KH1Ws3kPJRMY2BcRatqhrqAn0of5F4N987B4HmhAMoKzHTUipMDFx9Z4vmjjSdbr77B3ToLO+bXcMnGZ5SUyr+HbiNzQhru8OxMRIP8M1jX4+wwc4gOQc/yGebtW7jFBAVdrPXnqzsM/fmzR hoopge@sina.cn

将id_rsa.pub的内容拷贝到内存中。
登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”, Title输入用户名,在Key文本框里粘贴id_rsa.pub文件的内容:

Fork demo仓库

为了接下来的学习方便,从E哥的github里复制名叫egit的演示项目。 用你自己的账号登录到github,访问:

https://github.com/liyi-demo/egit

点击右上角的fork按钮, 从E哥的仓库中复制一份grit的代码到你自己的github仓库。

执行完后,在浏览器里, 你能看到你的github仓库已经有了一份egit拷贝, 而且右下角的url地址包含你的账号。

小贴士:
Git使用安全链接来保证git客户端和服务器端的通信安全。最常用到的两种通信协议是https和ssh。

url以 https 为前缀,如: *https://github.com/liyi-demo/egit.git* 这样的是https协议,它的好处是在互联网上使用广泛,传输使用443端口,一般公司的防火墙都不会拦截,在互联网上可用性很高。缺点是传输的效率不高,传输数据量大。

url以git@为前缀,如: *git@github.com:liyi-demo/egit.git* 这样的是ssh协议,它的优先是传输效率高。缺点是在互联网上使用没有前者广泛。所以github等互联网开源项目会推荐使用https,而公司内部的gitlab,一般推荐用ssh来提高效率。

下一章《Git基础命令》

E哥的Git教程(一)热身篇相关推荐

  1. Git教程1-生存篇

    Git教程1-生存篇 前言 Git 工具链 Git服务器 场景假设 道具准备 剧情 具体步骤 建仓 拷仓 改仓 移仓 查仓 一些其他的经验 前言 作为一个嵌入式工程师,一直都想掌握git这个版本管理神 ...

  2. E哥的Git教程(六)config配置

    config配置 config多账号管理 第二天早上,办公室里,李靖正皱着眉对着电脑思考怎么修改一个bug. 这时E哥走到他旁边,拍了拍李靖的肩膀."昨天有事比较着急, 差点忘了我们还留了个 ...

  3. 史上最简单的git教程|第九篇:分支管理工具

    在上一篇我们讲到了如何创建合并分支.如何解决冲突以及如何删除分支,那么接下来我们将讲到一些常用的分支管理工具. 获取所有分支列表: $ git branch * b1master 可以看书一共有两个分 ...

  4. 【Git 教程系列第 5 篇】Git 的工作流程

    这是[Git 教程系列第 5 篇],如果觉得有用的话,欢迎关注专栏. Git 工作流程 第一步:克隆 Git 资源(远端仓库)作为工作目录. 第二步:在克隆的资源上添加或修改文件(如果其他人修改了,你 ...

  5. 【Git 教程系列第 24 篇】Support for password authentication was removed on August 13, 2021. Please use a

    这是[Git 教程系列第 24 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:问题描述 二:使用 SSH 方式拉取远端代码 一:问题描述 今天从 GitHub 上拉取一个项目时,报出如下图所示 ...

  6. 【Git 教程系列第 27 篇】ssh: connect to host github.com port 22: Connection refused 的解决方案

    这是[Git 教程系列第 27 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:问题描述 二:解决方案 一:问题描述 自己的一个 git 项目,昨天在公司正常 push 的时候,提示文字信息如下 ...

  7. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  8. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...

  9. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

最新文章

  1. PHP 预编译加速: eAccelerator的安装和性能比较
  2. 小米KK:智能家居谁能破局?
  3. classmethod和staticmethod
  4. python 多线程 全站小说_多线程下载小说
  5. jQuery 学习笔记之二 (jQuery代码风格)
  6. android studio 导入第三方库的记录
  7. html输出json对象属性值,用javascript中的HTML元素值构建JSON对象
  8. 设计 Pastebin.com
  9. JS,Jquery获取select,dropdownlist,checkbox 下拉列表框的值
  10. 我们决定聚在一起搞件大事
  11. 8g内存一般占用多少_手机6G和8G运存有什么不同,8G运存真比6G流畅?这也要考虑处理器...
  12. c#json对象转数组_如何将Json数组转换为C#中的对象列表
  13. win8计算机修改mac,快捷MAC地址修改器
  14. 中小企业采用云计算的三大障碍
  15. 第三方登陆之微博登录
  16. 计算机模拟水循环的过程,袋装水模拟做科学小实验水循环(步骤图解)
  17. …… ᵇᵘᵗ ᵗʰᵃᵗ ʸᵒᵘ ˡᵒᵛᵉ ⁿᵒ ᵒⁿᵉ 【transshipment】
  18. Linux如何卸载坚果云,解决ubuntu16.04安装坚果云闪两下打不开问题(示例代码)
  19. UIPATH 结合 Python 识别 PDF 中的表格
  20. python 词云 教程

热门文章

  1. 第五届中国双创发展大会开幕在即 中国区域经济创新之路觅新对策
  2. VB编程:Val字符串转数字,CStr数字转字符串-6
  3. 计算机与科学 研究生考试试卷,2018年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题及答案...
  4. golang excel数据写入到sqlite3中--v3版本
  5. Amazon S3 Storage(亚马逊的对象存储)
  6. PC端如何导入本地电脑聊天记录(适用于重装系统的情况)
  7. 11、Linux系统基础原理、进程管理工具、任务计划
  8. STM32F4基于RTT使用SPI sever功能
  9. “崆峒笑谈”非遗守艺人:把民间“地摊戏”唱下去
  10. storyboard添加导航控制器