本文概述
一、为什么用Git?我的开发故事
Git有什么用?没用!——Git本身并不难,随便一个程序员都学的会,如果你不喜欢,大可不用。
所以我刚开始编程是不用Git的,什么SVN,多余的,麻烦到极——这并不奇怪,对于一个刚入门的开发者,学多一个额外的工具都显得很有压力,看得懂也不真的马上知道怎么用的,毕竟还没习惯,年轻嘛!
我刚开始也是花了一些时间学习Git的,但是学完就算了,真的写项目并不想用,也不觉得它有什么大作用。没事的,继续写代码吧!第一次遇到问题是——固态硬盘坏了,天呐!说好的固态呢!怎么那么容易坏的——维修师傅告诉我,硬盘读写次数是有上限的,差不多某个时候就该坏了——但是我的代码放在固态硬盘上呢!这下可坏了!
能怎么办呢?谁叫你没备份,重新写呗!非常头大,写代码可是个会猝死的活儿呀!
呵呵,后来我学会了隔一段时间就备份项目的源码,保存到云盘上,这还好,就是稍微麻烦吧,但是目的确是达到了——这使我想到了Git。
另外,随着年龄的增长,头发逐渐稀疏,代码也越写越多了。间中不断修改函数的代码或类的代码,比如函数F,现在有一个实现A,第二天想到了一个更好的实现,然后重写F函数的实现B,一测试发现——崩了!呵呵!赶紧Ctrl+Z吧!
如果你中间关掉了IDE呢?看你怎么用Ctrl+Z。但是没关系,聪明的我知道IDEA的VCS菜单中有一个Local History,这里面可以显示当前源文件的历史修改记录,你可以在这里进行代码恢复——但是仍然不靠谱,有时用360清理一下,记录又不见了,而且——你也会更新IDEA不是?没准你用的IDE里面并没有提供本地VCS的功能,你的IDEA所在的硬盘也会在某个阳光明媚的早上坏掉呢!呸呸呸………
以上故事并非虚构,都是血淋淋的实例,而且我试过好几次硬盘坏了,而且试过很多次代码恢复不了。
最近打算正式使用git进行项目开发,因而很有必要重新认真学一下,顺便也写下文章,稍微会更深刻一点。
如果你也遇过和我类似的情况,建议你一定要用git,如果你是初学者,没关系,先学一下,不马上用也没关系,到你以后自己意识到要主动用它的时候,你会更深刻!
二、Git有什么用?原理和作用
所以Git有什么用呢?就是备份啊,备份!备份!备份!——我只是一介码农,只能说这么粗俗的解释了!备份的意思就是:现在有一个A文件,复制多一个A,然后粘贴到其它地方——称为备份,大家都懂吧:复制粘贴,呵呵!
下面教你如何从一个快要猝死的码农变成高富帅:
假设现在有一个项目Project,要备份Project怎么做呢?复制还不会么?不妨假设每天定时备份一次吧。
但是现在有个问题,如果今天只是修改了一个源文件呢?例如删除了一行空白行,这样重复备份似乎不是很好吧。
这样吧,因为一个项目就是由N个文件组成的(包括目录),这样我每天只备份那些有修改的源文件不是更简单了吗?
现在你可以预想,或者我可以更细致地备份文件呢?比如修改一次源文件就备份一次,或Ctrl+S一次就备份一次,或者按文件的每行内容备份………没错!你太聪明了!这是没问题的。但是频繁修改和备份没有很大必要,我们可以自定义地在某个时间就备份一次,这样如果我们想查看源文件的历史版本或恢复代码就更容易了。
因此,最终我们可以以一个文件备份一次为一个基本单元,备份一次A文件叫做该文件的一个版本,多次备份A文件就是有多个版本。一个项目可以有N个文件,而N个文件可以有多个版本——Git就是这样的程序:版本管理系统(Version Control System, VCS),而Git又称为版本控制工具。如果你要实现类似Git的程序,基本原理也是和上面类似的,Git帮我们完成了以上的工作。
实际上,Git还有其它的一些特性,比如与SVN对比的分布式管理,但我觉得对于使用者来说还不是主要的,主要的是让使用和学习的Git人有用它的必要:就是备份!你可以备份到本地,也可以备份到远程仓库。
另外除了可以对源代码文件进行版本管理,Git实际上可以对任何文件进行版本管理。
三、Git安装步骤
好了,下面我们可以准备学习Git了,首先第一步就是环境部署了,下面介绍Git的安装步骤:
1、下载Git
进入Git官网:https://git-scm.com/,在右下角找到你需要的平台的Git版本进行下载:
2、Windows平台安装
一路默认点击Next即可,然后一会就安装完成了:
四、Git的基本概念
下面我们先来简单了解一下Git的基本概念,请记住上面说的“备份”文件的概念,Git其实就是类似于对一个文件进行多次备份,每个备份又称为一个版本。
Git如何辨别两个备份是否相同呢?对一个文件的内容计算校验和就行了,Git使用SHA-1计算文件内容的校验和,这个散列值可以唯一标识一个备份,Git也是使用这个散列值来索引这个备份。
对一个文件新的备份或版本,Git详细标明它可以有三种状态:
- 已修改(modified):刚刚删除了一行代码,git就识别到你已经修改了该文件(可以想到就是对比校验和)。
- 已暂存(staged):发现修改了一个文件,你可以使用git的命令对该文件的新备份或版本做一个标记,无非就是给一个新备份一个名称而已。
- 已提交(commit):表示你已经使用git的提交命令将一个新备份提交到本地数据库了,没错!文件的每个新备份或版本都是保存到数据库中的,而这样的数据库又可称为版本仓库,里面保存文件的每个不同的版本(记住git里面的版本相当于备份的意思)。
相应的来说,我们在开发git项目的时候就有三个阶段,正在更改文件时候的工作区,标记更改的暂存区,以及提交更改的git目录。
对于新开发的项目,我们的在工作区新建文件、更改文件内容,然后标记文件为暂存,最后提交到仓库中。对于开发已存在的项目,我们一般是从仓库中检出项目的文件(checkout),然后修改好,并提交回仓库中。
五、Git配置和运行
默认情况下,Git已被添加到环境变量中,你打开cmd命令行就能正常运行Git了,使用git version可以查看当前安装Git的版本信息。
经过上面的步骤,我们已经安装了git,现在我们打开命令行,首先就是进行一个全局配置,配置用户名和邮箱地址:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
有时,我们可能需要查找某个git命令的用法,可以使用以下三种方式:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
Git的命令不是很多,也不需要去记它,即使你不记得就查一下就好了,不要让这些杂乱的命令搞乱了你用git的初衷了——就是用Git对文件的每个版本进行备份。
六、总结
以上就是Git入门的基本介绍和安装教程了,对于Git的详细使用在下一篇文章中再介绍。Git就是管理文件备份/版本的一个程序,这是最通俗的理解了,使用Git无非就是要求我们以编程的方式理解它,如果你有一些数据结构的基础,那么我们可以大概知道Git的实现方式:将一个版本或备份封装为一个数据对象,我们可以使用散列+树的方式组织这些数据,树根是这个文件的原始版本,每个节点是一个版本,每个版本使用该版本的文件内容的SHA-1值唯一标识,使用散列值的好处是:我们可以访问任意个节点上的版本(或该版本的前后版本),版本回退就是将某个节点上的文件版本checkout到当前工作区中。
总的来说,我们就是对这个版本树进行增删改查(CRUD)——程序员的日常!
Finally!Good luck for you all!Be healthy, be alive!