Git随手记

一、什么是Git

       Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

二、与SVN有何区别?

1)Git是分布式的,SVN不是:

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交;

2)GIT与SVN版本机制不一样:

Git 只关心文件数据的整体是否发生变化,而SVN这类版本控制系统则只关心文件内容的具体差异。这类系统(如SVN)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,然而Git 并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

3)GIT不需要联网:

SVN 断开网络或者断开v*n就无法commit代码,但是Git 可以先commit到本地仓库。用SVN的话,没有网络或者断开v*n时,你当然也可以继续在本地开发,但是无法commit代码,因为SVN 每次commit都必须联网,长时间不commit代码会丢失大量开发进程的历史纪录。有个比喻是:不能commit就像用word写文档不能save一样危险。而且有网络的情况下每一次commit都会花上数秒甚至更长时间。但用 Git 的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,因为是在本地仓库commit所以几乎不需要时间,而且commit一定要频繁,不然无法记录你的改动,如果你一天commit一次,中间的修改你就找不回来,然后等到了有网络的时候再将版本纪录和代码一起上传到远程仓库。

4)Git 的内容完整性要优于SVN:

因为Git 在commit(存储在本地)或者push(上传到远程仓库)之前,通过对文件的内容或目录的结构计算出一个 SHA-1哈希值,作为指纹字符串进行内容的校验,并将此结果作为数据的唯一标识和索引,在远处仓库接受到commit的文件之后,会再计算一遍哈希值然后跟传递过来的哈希值做比较,如果不一致,说明文件在传输时变得不完整,或者磁盘损坏导致文件数据损坏。另外在 Git 数据库中的东西都是用此哈希值来作索引,而不是靠文件名;

三、为什么要用Git?

1) git每台电脑都有一个版本库,可以在本地做版本管理;

2) 速度快。git的速度远超大部分版本管理系统,包括svn

3) 强大的分支管理功能

4) 活跃的开源社区,如最著名的github

四、Git安装、部署和运行

下载 Windows版 git(windows环境默认安装即可)。

下载地址:https://git-scm.com/downloads

图形化工具SourceTree:https://www.sourcetreeapp.com/

五、GIT指令模式

1、初始化

安装完git后,在任一一个文件夹(我自己的一个简单项目:D:\work\enjoy-git),右键进入git bash

Git随手记

在命令窗口中输入git init,即就在些目录中创建一个.git的文件夹,如下图

Git随手记

2、管理文件

记得提交前设置下操作者的姓名和email ,不然会报错提交不了。一般会出现下面这样的错误

Git随手记

主要做以下这两个配置

Git随手记

3、提交版本

检查版本状态  命令: git status

Git随手记

如图中所示,表示这些文件还没有被git加以版本控制。

提交到本地时,按照以下两个步骤实施

  • git add . 或git add -A或git add filename (点代表所有新增、修改;  -A 代表新增、修改、删除),加入缓存区(.或者-A表示全部,也可单独文件)
  • git commit -m ‘new project’   提交版本  ‘版本提交描述’

提交到本地时,还可以按照以下一个步骤实施

git commit -a -m   "ew project"   加入缓存区并提交

Git随手记

如果,其中一个类发生改变了,我们可以再次使用git status命令查看,如图

Git随手记

4、删除本地缓存

这个操作,一般情况下不要做,除非你确定需要将代码重新加入版本控制时,可以这样实施

命令:  git rm --cached 文件名

效果如图

Git随手记

5、忽略排除

忽略那些不需要管理的文件夹或文件(比如此项目中.idea文件就需要忽略掉)。可以使用以下命令

命令: touch .gitignore    // 创建一个.gitignore文件

输入一下内容,因为.gitignore本身就需要忽略,所以此文件需要忽略

Git随手记

此时我们再查看一下状态,发现好像这个忽略的操作没有起到什么作用。

Git随手记

看到这种情况,先不要急,这主要是因为先前已经将所有的文件都加入控制中了。我们这里需要做的是,将控制取消掉,如图

Git随手记

Git随手记

可以看到,再次提交时,就会将要忽略的文件自动地的过滤掉。

补充说明:

  • “.gitignore”文件的影响范围是它所在的文件夹和所有的子文件夹
  • 每一个文件夹沟可以创建自己的“.gitignore”文件,如果它上层的文件夹也有“.gitignore”文件,这个文件夹也会受到它的影响。
  • “.gitignore”文件中可以使用“#”字符开头表示注释,文件夹路径是用“/”字符,文件名可以使用通配符“*”,另外还可以使用“!”字符表示排除。

6、分支管理

1、创建分支

命令:     git branch 分支名称

Git随手记

2、查看分支

命令:       git branch

Git随手记

3、切换分支

命令       git checkout 目标分支名称

Git随手记

4、冲突解决

首先切换到dev分支

Git随手记

作如下改动

Git随手记

提交

Git随手记

然后,再切换到master分支

Git随手记

作如下改动

Git随手记

提交

Git随手记

合并两个分支,将dev合并到master上。切换到master分支上

Git随手记

如上图,合并之后,已经提示存在冲突了。

打开代码,会看到如下图

Git随手记

那么这时候,就需要我们开发人员自己决定保留哪一部分了。这里我手动的处理了

Git随手记

将改动后的代码提交