• 15分钟学会使用Git


    http://blog.csdn.net/u013510614/article/details/50588446

    主体思想

    Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝试几次,久攻不克,也只能望洋兴叹。标题起的是15分钟,可是真的能15分钟掌握么??想什么呢?怎么可能?哈哈,15分钟只是个噱头,意思就是快,如果还是按照传统的套路从命理讲起,根本无从“快”起,所以笔者另辟蹊径,这里要介绍的Git,不同于一般的教科书 —— 先讲抽象概念,再讲事物本身的流程。我觉得先建立直觉的模型比较重要,让你先用上Git,再去学Git;先用GUI(图形界面)在谈CLI(命令行),我相信这会更容易让人接受。

    严格的说,本教程应该称作SourceTree入门指南,哈哈。因为下面要借助一个图形化的软件,SourceTree,来讲Git。SourceTree下面简称ST。ST是Git的第三方客户端,特点是比较直观,而且呢,不违背Git的逻辑,这里说多了就略显复杂,有些客户端会封装Git的命令操作,隐藏了过多的细节,反而不好学习Git……总之,ST挺好,界面也好看,缺点就是有点慢,不过没关系。

    核心思想就是 —— 用ST来降低门槛,先让你看到Git做了什么,给你直觉上的理解,再谈CLI。毕竟CLI才是最终的归宿。

    谈谈版本控制工具

    版本控制工具,现在有名的就是SVN和Git吧,其他的也有,这两个比较主流。
    小白会好奇,版本控制工具是干嘛的?

    版本控制工具,其实就是一个文件的追踪器,能够记录一个文件的每一个改动,这样子仿佛有助手,一直在后面帮你备份每次修改的文件。对于你来说,仿佛你有了一个时光机,可以回到文件的任何时候,每当你想查看了,或者回退,你可以轻轻松松搞定。有点像打游戏存档,一旦会了存档大法,多难的怪,都能干死,反正被打死就回档,打怪,只是个磨时间的过程~~

    Git还有分支、合并功能,当一个小团队在共同完成一份作品的不同部分的时候,版本控制工具可以先把作品分为不同的分支,给不同的负责人,最后每个部分修改妥善,再合并这些分支,使之变成一个整体。还有……吧啦吧啦,太细就枯燥了,哈哈,不常用的,我也不会。

    说到这,你是不是还有点小激动呢?

    如果有一天,当你意识到,计算机本身就是把硬盘的数据读出来,经过CPU处理,之后再放到硬盘里保存。整个的电脑体系就是在不断地修改某些文件。你会觉得Git真的是非常有用,无所不在。只要存在修改,存在保存,就有Git的用武之地。

    SVN VS Git

    小白又问了,各种不明觉厉,那SVN和Git有什么区别?
    在我看来就是设计上的区别:

    SVN是中心似的,Git是分布式的,两种设计方向,目标都是解决版本控制问题。
    谈不上谁个更好,谁个更坏,工具嘛,只有顺不顺手。偏爱Git的人,会觉得Git更强大,同样对Git嗤之以鼻的人,会觉得Git设计的太复杂,以至于无论是个人还是团队,学习成本都比较高,万一遇到一个瓶颈,没人会用Git解决,就歇菜了,SVN相对弱,因为不能本地备份,但是也相对简单,简单介绍就立刻可以上手。

    不过上面的难用,易用,现在已经变成相对的了,有很多出色的客户端,比如SourceTree,已经极大的简化了Git的使用流程,解决了很多痛点,一会我们就要介绍到它。

    简单的说,SVN就有一个中央服务器,协调大家的代码,大家都和它同步;Git是分布式的,每个人都保留完整的追踪记录,每个人可以成为一个中心。所以说SVN缺点就是,中心宕掉了,所有人都歇菜。Git人人皆可为中心。Git缺点,应该就是学起来比较复杂吧,设计的命令都比较混乱,流程也很难理解和接受,要不然SVN应该不存在了。

    下面感受一下,SVN和Git的复杂度

    下图是SVN的操作逻辑:

    SVN流程图

    整体来说,就是图中心的三条线:

    Checkout:克隆项目(复制代码到本地) <— 在这里!!!
    Commit:提交本地代码
    Update:更新本地代码

    图下面三个线:

    add:添加项目
    rm:删除项目
    revert:撤销

    所以我站在用户的角度,SVN的设计是清晰的

    下面来看看Git
    上图!
    下面是Git的操作流程:

    Git流程

    Git的设计就复杂的多,甚至很晃眼啊

    个人觉得,Git没有在设计上,特别的在易用性上优化过,简化过。尤其是命令,也是很随意的,后面能看到。

    尝试一下Git

    15分钟虽然是个噱头,还是来谈谈怎么个15分钟法吧。

    下面的部分可以称为《SourceTree向导》,《SourceTree图解手册》哈哈,没有啦,还是要讲点东西的,如果对于Git的东西一点都不讲,确实应该改名字。

    整个的流程,是先讲解原理,再用SourceTree操作一下,后面介绍一点命令内容,我也是在学习中,有错误的地方,还请包涵和指正。大家共同学习,共同进步。

    眼睛瞧这里,这个就是Source Tree,下载猛戳。

    设计的还挺好看,咳咳,当初选择它也是因为好看……哈哈哈,用软件都看脸。SourceTree确实设计的很好。一会我们来探索一下它。

    Source Tree logo

    处女座的朋友要问了,Git客户端千千万,为什么就说SourceTree?

    刚才不是说了么……看脸,哈哈,其实主要还是ST做的比较靠谱,用过一个叫做TortoiseGit的,大名鼎鼎,反正我用的时候状况百出。

    TortoiseGit logo

    懒得推荐,而且不好看,哈哈
    个人感觉软件刷新率不高,比如:
    当你用Sublime打开文件的时候,然后最小化,用TortoiseGit来pull最新代码,Sublime经常不会刷新的。
    还有TortoiseGit简化了Git的模型,取消了暂存区的概念,和Git的模型不太一样。

    总之,应该解答一部分疑惑了。Source Tree是个好东西 。

    来说说Git是咋么一回事

    写代码,写完了保存,这是一般文件的流程。Git多加了一个流程,就是保存后,你要提交。Git会追踪你每次保存,和上次保存之间的差别,然后把这些信息,保存在一个文件夹下,文件夹名叫.git。这个文件夹,Git的术语里称之为仓库,用仓库可以追踪代码,看到每次改变了什么,可以还原到以前的状态,也可以看别人改了什么,这就是代码版本控制的本质,一种高级的保存功能,自带时光机的那种

    现在祭上图
    git map

    咱们挨个挨个解释一下,解释完,大概就知道怎么回事了。
    第一遍看不懂,不放多看几遍,或者看看其他的资料,对照着。每个人理解的点可能不一样。
    最好把这张图,单独开在一个窗口,对照着,下面就来解释这个图

    首先看这张图中间,四个圆柱 :

    • Workspace:工作区,就是你正在写的代码
    • index:暂存区,一个本地的缓冲区
    • local repository:本地仓库
    • remote repository:远程仓库

    Workspace工作区

    就是你正在写的代码,正在打开的编辑器里面的内容,解释完了,就这样

    index暂存区

    index照理应该翻译叫索引,这里叫暂存区
    暂存区是干嘛的?
    暂存区是Git和SVN的最重要的差别之一
    我们来看图,箭头就是代码流动的方向

    Git的流程工作流程就是:
    眼前正在写的代码(workspace)觉得差不多了
    add命令
    提交到暂存区(index)类似于保存一下
    然后你可以返回正在写的代码(workspace)继续写,写的到了一个阶段了
    add命令
    又提交到了暂存区(index)

    对就是这样子工作的!

    举一反三!!
    举一反三!!
    重要的事情说三遍,举一反三

    当你多次提交,基本工作完成的差不多了
    按照道理
    你应该每次都add到了index暂存区

    现在好了,任务完成
    要把暂存区里的东西,放到本地仓库(local repository)

    使用commit命令

    大家看图应该注意到
    worksp –> local repository
    有一个绿色的箭头 commit -a
    这条命令
    就是同时完成,把当前的修改,提交到暂存区,然后把暂存区的提交到
    本地仓库

    Git每次提交的,都是保存变化的改动,不是简简单单的复制一遍

    本地仓库(local repository)

    就是正式的代码保存的地方

    如果你本地所有的内容都被commit到本地仓库了
    表示你已经很满意所有的代码
    并且完成了所有的编写

    这个时候,你想把代码上传到Github或者公司的Git服务器,提交给别人
    看图
    local repository –> remote repository
    中间是push操作

    想对你正在工作的电脑,你电脑叫local,本地
    网络上的,就叫remote,远程

    remote repository 远程仓库

    就是网络上的仓库
    一般是放在网络上保存
    或者和团队一起配合着干活
    网络仓库就成为一个中枢的感觉

    我们看图的上半部分
    提交的过程,按照箭头,由下往上:

    remote repository:远程仓库
    ^
    |
    | push:就是“推”,把本地的正式的提交代码,推到网络上
    |
    local repository:本地仓库
    ^
    |
    | commit:合并多次修改,提交到仓库保存
    |
    index :暂存区
    ^
    |
    | add:一段阶段的代码,保存
    |
    Workspace:正在写代码,写的不错了

    再来看看这张图的下三路

    remote repository –> workspace

    这里有一个pull 黄颜色的,操作(rebase后面讲)
    pull就是“拉”的意思,拉动,把网络的代码,拉动到本地
    拉动的目标是workspace,就是你正在写的代码

    解释一下这里,比如你正在写代码,或者打开了一个项目
    编辑器Sublime Text上代码显示出来了,表示文件打开了
    这个时候,公司的小明告诉你,公司昨天几位同事加班加点,代码更新了
    让你更新一下代码,以获得人家工作一晚上加班的工作成果
    你这个时候就要pull,拉取最新的代码,以保证自己和大家的工作进度一致
    pull的意义在于,执行完操作,会刷新你的编辑器
    Sublime Text上的代码,会变化到最新的代码
    不信你试试

    TortoiseGit来pull的时候,编辑器刷新与否,似乎看心情 = =b

    下面来看红色,红色的两个箭头
    最左边有一个小字
    revert
    意思大概是反转,撤销的意思

    对啊,你光提交,万一提交错了呢?
    Git里有一套撤销的机制
    撤销的机制尤其复杂
    这里引用一篇文章戳这里
    不过那些都不是我们要说的重点
    学习嘛,要抓住主干,细枝末节的,晚点再说,又不一定全都遇上
    Git复杂的就可能是撤消了,这些我们暂时不管

    下面还有两路灰色的,左边的说明是compare
    就是可以比较你每次修改的代码和之前的代码有什么区别
    这是Git最重要的作用,就是可以看到每次提交的不同

    这些也不说,放在后面说

    现在主要的就是把上三路和pull熟悉

    小结

    【工作区】->add->【暂存区】->commit->【本地仓库】->push->【远程仓库】

    【工作区】<------------------ pull ----------------- 【远程仓库】

    记住:
    add、commit、push、pull

    可爱的Source Tree

    Source Logo

    Source Tree是一个优秀的,直觉式的Git的图形界面客户端
    Source Tree用了很优雅的方式和直觉化的流程,让你很优雅的使用Git
    基本上所有常用场景下,都可以胜任,如果实在情况特殊,使用命令行

    下面是Source Tree界面
    Source Tree 界面

    Source Tree的设计符合直觉
    这张图上面的图标,基本上是所有常用的操作了

    • Clone/New:Clone就是克隆,copy拷贝的另一种称呼,这里意思是从远程仓库,拷贝一个项目到本地

    • Commit:大家一看就明白

    • Checkout:没讲,简单的说,你保存了一个版本到暂存区,然后继续写,写着写着后悔了,挨个挨个改回去太麻烦,checkout就是从暂存区的一个保存版本还原到正在写的编辑器,这一点,看第一地图,红色的短的checkout描述的就是这个意思(checkout HEAD后面讲)

    • Discard:丢弃

    • Stash:保存你目前的所有状态,到一个特别的文件–>我个人觉得这个很常用,一会提到

    • Add:把文件提到暂存区

    • Fetch:看看地图,远程仓库拉去到仓库,目前打开的编辑器不会变化

    • Pull:提过了

    • Branch:分支,这个不讲,一般项目负责人负责

    • Merge: 合并分支,同上

    觉得难记没关系,SourceTree有中文界面可以挑
    用英文,主要是和Git的命令,对应起来,有助于找规律

    下面一个框区,就是diff,比较代码不同的地方
    红色是删掉的,标记为减号
    绿色是添加的,标记为加号

    Source Tree实时帮你显示,所以diff这个命令压根不需要你敲

    现在了解完毕Git的工作流程
    现在让我们用Source Tree走一遍

    本篇文章就是在Github上建立的一个项目(如果不知道怎么做,请查询Github官方教程)
    然后clone到本地
    把项目添加到了Source Tree

    step1

    把项目添加到Source Tree
    下面简称SourceTree为ST
    然后用编辑器打开文件编辑,编辑完毕后,保存文件,这个一定要保存,然后可以把编辑器最小化了,然后可以看看ST
    点击如图,第一步,工作副本
    这个要经常点,只要你点了,切换就会刷新
    稍微等一会,第二部的地方,就会出现文件的修改状态
    第二部所在的区域,就是工作区,就是你编辑器,编辑器的文件临时状态,可以部分选,也可以全选,选择后,会出现如下图:

    step2

    整个项目移动到上面,就是暂存区,右边是Diff状态,表示你修改了什么

    提交按钮,就是Commit,点击他,进入下图:

    step3

    如图会跳出一个commit信息,看过Git的同学,应该知道,每次commit都会让你键入一个message,其实就是写明,你做了什么,改了什么,这样子等到回退,撤销的时候,一看信息就明白了

    下面有一个按钮,和上面的推送是一样的
    可以先commit,然后push
    如果仓库是配置好的

    按一下,就可以提交代码了

    提交好代码后,可以看到如图:

    step4

    左边的分支,可以看到整体情况
    右边的字段:
    图表:一种分支图,可以看清项目合并情况
    描述:就是commit的message
    提交:提交生成的hash码
    作者:谁提交的,这个团队配合作用救命掀了

    真正的复杂的项目,上一张图,让大家感受下:

    step5

    分支情况会特别的复杂,感受下。

    小结

    ST确实用图形界面把Git的操作简化到十分优雅的地步
    Git提交代码的流程,已经描述完毕
    是不是十分简单

  • 相关阅读:
    Java习惯用法总结
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
    Java 20年:转角遇到Go
    史上最全最强SpringMVC详细示例实战教程
    即将改变软件开发的5个Java9新特性
    <一>c++的编程思路
    人生不可破的28个天规
    定时任务
    redis
    mycat分库分表
  • 原文地址:https://www.cnblogs.com/feng9exe/p/7553448.html
Copyright © 2020-2023  润新知