git之:git概念初识

既然我们已经把gitlab安装完毕【当然这是非必要条件】,我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别及理解git几个重要概念。

至于什么是git,git的发展历史,网上已经有很多资料,可以自行google或百度。

关于git与svn的区别

这里不针对git与svn的区别详细深究,以便对双方的优缺点了解更多些。

1) 最核心的区别Git是分布式的,而Svn不是分布的。

能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本控制系统,还有比如Mercurial等,所以说它们差不许多。话说回来Git跟Svn一样有自己的集中式版本库和Server端,Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。

2)Git把内容按元数据方式存储,而SVN是按文件。

Git关心文件的整体是否发生变化,而SVN则关心的是文件内容的具体差异!

SVN每次记录的是有哪些文件进行了修改,以及修改了哪些行的哪些内容:

比如版本2中记录的是文件A以及文件C的变化,而版本3中仅仅记录文件C的变化这样,以此类推;而Git并不保存这些前后变化的差异数据,而是保存整个当前的工作空间(暂存区)所有文件,又叫快照,有变化的文件保存,没变化的文件就不保存,而是对上一次保存的快照作一个链接。

如上图,每一次保存的都是所有文件,改变的保存,没改变的链接指向上一次提交的文件!因为这种不同的保存方式,Git切换分支的速度比SVN快几条街!

3) Git没有一个全局版本号,而SVN有。

目前为止这是跟SVN相比Git缺少的最大的一个特征。

4)GIT分支和SVN的分支不同。

在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,十分狗血。

而 Git,每个工作成员可以任意在自己的本地版本库开啟无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。无痛无痒。

Git的分支名是可以使用不同名字的。例如:我的本地分支名为OK,而在主要版本库的名字其实是master。

当然SVN与GIT不只是这个点上的不同,还又还多不同,可以找度娘。

另外提下Git每次commit时候,在仓库中的数据结构。

如上图,Blob对象存储的是文件的快照内容,tree对象则是记录快照索引的目录 .当然,上面的内容知道下就好了,也不必过于深究,好的,开始学习本节Git分支的相关内容吧~

git的工作流程

主要流程就是

首先将远程代码仓库clone下来,在本地建立的一个代码仓库。

修改项目代码,如修改bug,增加新的功能等。

然后Pull,将远程仓库的项目下载到本地。

等你写好自己的代码后,先add/commit到本地的仓库。

最后push到远程的代码仓库中

git的几个重要概念

我们首先要知道Git由四部分组成,他们分别是:[本部分转自coder_pig]

工作区——Working Directory

暂存区——Stage(Index)

本地历史仓库——Repository

远程仓库——Remote

下面我们一一来介绍这四个部分--挺形象的:

首先是工作区,这个就不用说了,我们当前的工作空间;而另外三个部分,我决定举一个形象化的例子来帮助大家理解,网购的例子,比如我们在逛着某猫:

--->看到了心仪的物品,我们可以把商品添加到购物车(暂存区),我们可能会频繁的添加商品(add)或者移除商品(checkout),在这个过程中我们可以随便嗨,反正还没给钱;

--->接着我们挑的七七八八了,接着我们就要提交我们的订单了,点击提交订单(commit),接着会生成一个商品的订单列表(快照),我们还可以在提交的时候添加点备注信息,比如要什么颜色(commit -m "颜色"),好的,此时订单提交了,但是我们还没支付(Push),我们可以在自己的账户未支付订单列表(本地仓库)中找到我们的这个订单订单(快照),也可以看到自己以前的一些订单记录;

--->再接着我们选择这个还没付款的订单,进行支付(Push),付款完成后,商家(远程仓库)就会收到这个订单,然后发货...

相信上面的这个例子对你理解Git的四个部分会有所帮助,回到正题,我们简单概括下这四个部分

在日常协作中是如何发挥作用的:

工作区和暂存区

我们写代码的地方就是工作区,代码写完后,我们可以把他提交到暂存区,提交到暂存区后,我们可以对自己的代码进行更改,修改文件内容,删除或者增加文件,只需一个git checkout xx即可让

暂存区内容覆盖当前工作区的内容,或者说还原!

暂存区和本地仓库

我们可以把暂存区的内容提交到我们的本地仓库,此时会在仓库中生成一个快照,我们可以为这个快照打一个TAG信息,比如这个快照叫"完成了UI部分"这样,提交后暂存区中的内容就会被清空,

此时我们可以调用reset指令,制定某个快照,然后还原到暂存区!

工作区和本地仓库

我们可以直接走checkout某个版本的指令,直接让工作空间还原成某个本地仓库中的某个快照。

本地仓库和远程仓库

我们可以将本地的某个快照push推送到远程仓库,push时可能还需处理一些冲突;也可以从拉取远程仓库到本地,比如我们经常从Github上clone一些开源项目~

工作区和远程仓库

这两者的协作一般是pull,即同步远程仓库的代码到工作空间而已~

Git中文件的几个状态

分大类的话,两种状态:Tracked(已跟踪)和Untracked(未跟踪),区分的依据是:

该文件是否已经加入版本控制

当我们在项目中新增一个文件,这个文件此时就处于Untracked状态!

接着我们可以调用git add指令将该文件加入暂存区,那么此时该文件此时处于Tracked状态。

又或者说这个文件已经被我们的版本控制系统所跟踪了,而且他处于Staged(暂存)状态!

接着,当我们把暂存区的文件commit后,此时该文件处于Unmodified(未修改)状态;

此时假如我们编辑下该文件,文件又会变成Modified(修改)状态,接着git add又处于Staged(暂存)状态,然后commit...

文件的变化周期流程图如下

另外关于HEAD

HEAD,头,它始终指向当前所处分支的最新的提交点。你所处的分支变化了,或者产生了新的提交点,HEAD就会跟着改变。

即在commit,reset等改变当前版本号时,都会使得当前分支的HEAD移动到当前版本的提交点。

checkout切换分支后,HEAD会指向被检出分支的最后一次提交点。

这里这样说,可能你有些不太了解,没事,多用用,观察下文件的变化,就会熟悉文件之间的状态变化了。

附:学习git资源

学习过程中我参考了许许多多的教程,分享跟大家:

git教程

廖雪峰git教程

git–简易指南

猴子都能懂的GIT入门

Git参考手册

参考:

http://www.jianshu.com/p/c05231e6a65a

http://www.jianshu.com/p/bfec042349ca

http://www.jianshu.com/p/cf97aa1581ab

突然发现简书上有好多质量比较高的文章,-----是不是大家知道

原文:http://www.nideyuan.com/?p=330

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

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,711评论 1 17
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,663评论 9 163
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,665评论 4 54
  • 今天和一位朋友聊天,他问我这样一个问题 :之前群里分享的一些投行大咖的微信有加吗?他还在加一个一个的添加中。我倒也...
    小_麦阅读 184评论 1 1
  • 趁着记忆清晰感情热忱,将这次梦一般的旅游记录和分享下来。 苏梅岛—一个美丽的名字,第一次听到很是惊艳,于是便去查了...
    做你生命中的大钻石阅读 534评论 0 3