本记录来自对 Itercast(该网络教学网站已关闭)中的git版本控制系列教程 的学习
第一节 版本控制系统介绍
版本控制系统(VCS,version controlSystem)
可以实现的功能
A. 记录文件的所有历史变化
B. 随时恢复到任何一个历史状态
C. 多人协作开发或修改
D. 错误恢复
E.多功能并行开发
版本控制分类
A. 本地版本控制系统
B. 集中化版本控制系统
C. 分布式版本控制系统
版本控制系统的基本概念
1. repository 存放所有文件及其历史信息(也叫仓库)
2. checkout 取出或切换到指定版本的文件
3. version 记录标识一个版本(编号或其他代码)
4. tag 记录标识一个主要版本(1.0 2.0 3.0)
本地版本控制系统(LVCS)
仅运行在本地,可以不使用网络
代表版本类型èRCS(Revision ControlSystem)
优点:简单、很多系统中都内置、适合管理文本文件(如配置文件、文章、信件、简单文档等)
缺点:只合适管理少量文件、不支持基于项目管理、支持文件类型单一、不支持网络、无法实现多人协作。
集中式版本控制系统(CVCS)
代表版本èCVS(concurrent versionSystem) subversion
优点:适合多人团队协作开发、代码集中管理
缺点:单点故障、必须联网工作、无法实现单机本地工作
分布式版本控制系统(DVCS)
代表版本ègit mercurial(水银)
优点:适合多人团队协作开发、代码集中管理、可以离线工作、每个计算机都是一个完整的仓库
第二节 Git版本控制系统
开源的分布式版本控制系统,最初是取代bitkeeper,linus Torvalds开发,用于Linux内核代码管理系统
优点:速度快、设计简单(配置简单)、对非线性开发模式支持好(多分支开发)、完全分布式有能力高效管理类似Linux内核一样的超大规模项目
Git原理—快照
使用快照(没有变化的版本库链接到原始版本,变化的保存下来),而不是保存。
每一种版本控制系统都用一种办法追踪不同阶段文件的变化。
其他版本控制系统的工作原理,使用补丁(保存)
Git版本控制工作原理
Git原理—文件鉴别和操作
1. 几乎所有操作都是在本地(分布式是指每个电脑都有一个完整的版本库)
2. 通过校验和算法识别文件变化
a) 通过sha-1算法对文件内容或目录结构进行哈希,得出的假烟值作为变化的指纹
3. 多数操作均为添加数据(删除的文件可以通过回溯的原始版本找回)
Git原理—文件状态及工作区域
Git repository 最终确定的文件保存到仓库,成为新的版本,对他人可见
Staging area(index) 暂存区域,暂存已经修改的文件
Working Directory 编辑、修改文件
第三节 Git安装
官方网站git-scm.com , 网站提供了多种系统多种方式的下载
yum系列
centos 环境下使用命令#yum install –y git
apt-get系列
Ubuntu环境下使用命令#apt-get install git
Windows系列
Windows环境下载exe安装包,使用默认安装设置。生成git bash,通过git bash可以直接使用类似Linux的命令,默认的使用路径是家目录。
创建一个文件夹,打开文件夹,右击,creat gitrepository here,该文件夹即是本地的仓库。从git bash 中切换到该目录可以看到其识别为仓库的主分支。
Mac OS X 系列
在mac os x 中,安装xcode的时候会默认安装git,所以先在terminal中确认是否安装。进入AppStore,搜索Xcode,点击details,点击install,大小通常为1.7GB左右,需要等待一段时间。
打开Xcode, 点击菜单项,进入download,有command linetools一项,传统使用的gcc、git等包含在该项中,默认是没有安装,需手动安装。
第四节 Git初始化及仓库创建
Git基础设置
Git安装完成之后,需要进行一些基本信息设置
1. 设置用户名
# git config –global user.name “YourName”
2. 设置用户邮箱
# git config –global user.email “yourmail@Mail.com”
3. 查看设置
# git config --list
用户名和邮箱是提交代码是的标识,可以设置全局账户,也可以针对某个仓库进行设置
Git帮助命令
1、获取全局帮助
# git help
2、获取特定命令的帮助
# git help 特定命令名
初始化一个新的Git仓库
1、 创建一个文件夹,可以直接使用已有的文件夹
# mkdir book
2、 在文件夹内初始化git,创建git仓库
# cd book
# git init 在book文件夹中创建.git文件夹,所有的仓库数据文件都是保存在.git文件夹中,所说的git仓库即为.git文件夹。
3、
向Git仓库中添加文件
1、 创建相应的文件,如readme、book.cpp
# touch readme book.cpp
2、 查看当前工作目录下的所有文件的状态
# git status
3、 将相应的文件添加到暂存区域中,可以同时添加多个文件
# git add readme
4、 添加到仓库中
# git commit -m “initrepo” -m参数后字符串用于注释当前这次提交做了哪些工作
5、 查看git提交历史
# git log
Commit后的字符串是SHA码,其后为作者,提交日期,注释信息
直接提交到仓库
设置默认提交,
1、 提交文件
# git commit –a –m“modify book.cpp”
跳过暂存区域,直接提交到仓库中,这里主要用于提交修改的文件,文件必须使用git add 添加到暂存区域中
删除文件
1、 删除文件
# rm README
2、 从git中删除文件
# git rm README
这里虽然删除了README文件,但是在git的历史版本库中依然存在,可以通过回溯到历史版本库找回
3、 提交操作
# git commit –m “deleteREADME”
4、 通过日志文件查看历史操作
# git log
重命名文件
# git mv book.cppbookSource.cpp
# git commit –m “renamebook.cpp filename to bookSource.cpp”
这里的git mv命令相当于在本地重命名文件,删除仓库的文件,将重命名的文件添加到暂存区域,即:
# mv book.cppbookSource.cpp
# git rm book.cpp
# git addbookSource.cpp
附:gui使用
Git gui,打开仓库所在目录会自动识别当前的仓库,
查看master分支历史,可以看到所有的历史版本及修改日志。
第五节 Git远程仓库
之前提到的操作都是本地的操作,并没有同步到git服务器上,使得其他开发者无法及时查看到仓库的动态。
远程仓库中只保存的.git文件夹
Git支持的访问协议
1、 Local 本地型
2、 SSH
3、 Git
4、 HTTP/HTTPS,只能下载数据,不能提交数据
常用git远程仓库实现
1、 使用现有的git网络仓库服务
a) Github。https://github.com 开源仓库是免费的,私有仓库收费
b) BitBucket。https://bitbucket.org
2、 搭建自己的git仓库服务器