git的基本概述
简介
git(分布式版本控制系统)
git 是目前世界上最先进的分布式版本控制系统(没有之一)!
Linus 花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git 迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
集中式和分布式
Linux旗下的CVS和SVN都是集中式的版本控制系统,但git是分布式的版本控制系统
何为集中式版本控制系统?
版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
何为分布式版本控制系统?
- 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
集中式VS分布式
| | 集中式(SVN) | 分布式(Git) |
| :———————: | :—————————————————————————————: | :—————————————————————————————: |
| 是否有中央服务器 | 有。开发人员需要从中央服务器获得最新版本的项目然后在本地开发,开发完推送给中央服务器。因此脱离服务器开发者是几乎无法工作的 | 没有中央服务器,开发人员本地都有 Local Repository |
| 网络依赖 | 必须要联网才能工作,而且对网络的依赖性较强,如果推送的文件比较大而且网络状况欠佳,则提交文件的速度会受到很大的限制 | 分布式在没有网络的情况下也可以执行commit
、查看版本提交记录、以及分支操作,在有网络的情况下执行push
到Remote Repository
。 |
| 文件存储格式 | 按照原始文件存储,体积较大 | 按照元数据方式存储,体积很小 |
| 是否有版本号 | 有 | 没有 |
| 分支操作的影响 | 创建新的分支则所有的人都会拥有和你一样的分支 | 分支操作不会影响其他开发人员 |
| 提交 | 提交的文件会直接记录到中央版本库 | 提交是本地操作,需要执行push操作才会到主要版本库 |
git的三种数据状态
暂存态
- git传输文件实际上是进行数据的传输,每个用户机都存在一个数据的暂存区(temp),当用户机没有网络时,可以在本地把要上传到本地数据库的文件数据先放到暂存区(temp),待网络通畅时git会自动提交数据到指定的本地数据库(仓库)。此状态为——已暂存(staged)状态
提交态
- 当文件安全的保存到本地数据库时,此状态为——已提交(commit)状态
修改态
- 若文件只是进行更改内容,但尚未保存到数据库中,那么此状态就为——已修改(modify)状态
git的工作原理
核心
- git 的工作原理不同于集中式版本控制系统(CVCS),git赋予每个用户机上一个本地数据库,此数据库可同步到服务器的数据库中,当用户对文件做每一次的修改时,会把该文件的所有版本文件保存到本地数据库(即克隆文件),这样做的好处是,当没有网络时,也可以对文件的版本进行控制,而且要修改时,把修改后的文件进行标记,待网络通畅后会把被标记的文件提交到数据库中,供其他开发者使用。
获取Git仓库
获取方式
- 将尚未进行版本控制的本地目录转换为 Git 仓库
- 从其它服务器 克隆 一个已存在的 Git 仓库
在已存在的目录中初始化仓库
第一步:打开
git bash
第二步:输入进入目录的命令
$cd /f/gitproject
第三步:初始化仓库
$git init
此步骤会在已创建的目录下生成一个.git的子目录(该目录为隐藏文件)
添加文件
创建文件
方法一:在创建的
gitproject
目录下直接右键创建一个文件(例如:helloworld.java)方法二:在创建的
gitproject
目录下右键git bash here
,使用命令创建$touch helloworld.java //创建文件 $git status //查看文件状态
方法三:直接打开
git bash
,用Linux命令切换到gitproject
目录下,输入方法二的命令即可!把文件放入暂存区
通过Linux命令
$git add helloworld.java
此时再输入 git status 查看状态
把文件提交到仓库
$git commit -m"new file helloworld.java"
(-m为message)
查看是否已提交
$git status
如出现下图所示则提交成功
克隆仓库
- 命令
$git clone <url>
查看当前文件状态
- 命令
$git status