1 分布式版本控制系统基本概念
1.1 版本库
用来存储所有历史数据的地方。大多数版本库中存储了文件的当前状态,历史修改时间,修改者以及修改的原因。Git分布式版本库,每个人都会在本地有自己的版本库,而不是服务器上公共的版本库。版本库中其他存储的常见内容有Makefile,配置文件,设计文档,使用文档,运行脚本,单元测试脚本等信息。
1.2 工作目录树
开发项目中所需要的全部文件,包括源代码文件,构建文件,单元测试文件等。
1.3 代码修改与文件同步
程序员每次将修改提交到版本库中都使得版本库中新增一个版本。除了记录修改内容之外,还将纪录修改的日志信息即修改提交的信息。使得方便查询到为什么要做这个改动。
push操作将修改的代码推入到公共版本库中,但别人本地版本库依旧没有同步,因此需要将改动fetch下来。merge 将本地版本库所做的修改与公共版本库中更新的内容进行合并。
1.4 分支
主干是研发的主线,而分支可以进行缺陷的修改,这样主干与分支之间可以同时进行。分支同时也可以在本地创建,并留为私用。可以对分支进行实验性的工作,如果没有价值,在悄无声息的删除。
1.5 合并
合并操作将两条或以上的分支合并到一起,当不同的变化发生在同一文件的同一位置时,会产生冲突。Git提供了merge tracking,记录和跟踪所做的合并操作。
1.6 锁机制
严格锁,check out程序员第一次从公共版本库中检出某个文件,版本库禁止其他人进行修改这个文件。乐观锁,允许多个程序员同时修改同一文件
2 GIT安装与设置
2.1 windows下安装Git
1.下载MSys版的Git
2.设置安装路径安装
3.设置Git的环境变量
2.2 设置Git
Git需要用户提供若干信息,需设定两个全局变量的值,在这台计算机上使用任何Git版本库时,这些全局变量的值都会起作用。通过使用Git config命令,用户可以将此类信息提供给本地版本库。首先设置user.name,说明修改是谁提交的。user.email用于联系修改者。在相关命令中加上–global参数可以设置全局变量的值。
git config –global user.name “XXX”
git config –global user.email “XXX@XXX”
使用git config –global –list命令查看是否设置成功。
2.3 获取git内置帮助信息
git help [command]
3 创建第一个项目
3.1 版本库的创建
在git中创建版本库时,首先需要决定吧项目的源代码存放在哪里,创建目录mycode,进入到该目录,输入git init命令
3.2 代码修改
对文件进行修改后,要想让git跟踪这个文件,需要先使用git add filename命令将文件添加到版本库的索引,然后在使用git commit命令进行提交。
git add “XXX.cpp”
git commit -m “add in hello word”
参数-m的作用用于告知Git的提交留言为”add in hello word”。
git commit命令会创建一个提交目录,提交目录是存储在版本库中的历史记录,每提交一次就会创建一个记录,Git会把提交者的姓名和邮件地址以及提交留言都会添加到提交记录中。
现在我们已经提交了一个文件到版本库中。运行git log命令可以查看提交到相关信息。
commit sha-140位哈希码
author:作者 <邮箱>
Date:日期
提交留言
sha-1哈希码,sha是一种安全哈希算法,从已知的数据中产生一个短的字符串,GIt使用版本库中的元数据产生提叫名称,这些元数据包含提交者的个人信息及提交的时间戳。
3.3 在项目中工作
在”XXX.cpp”中继续进行修改,使用git status命令查看工作目录树的状态
*
git status
所在分支
changed but not updated
(use “git add …” to update what will be commited)
modified: index.html*
3.4 处理与发布
mycode项目的代码已经可以进行发布了,而与此同时,借助分支,可以继续进行下一版本的开发。创建分支的命令为git branch [新分支名称] [父分支名称],新分支基于已经存在的父分支。
git branch RB_1.0 master
从主分支上创建一个RB_1.0的分支,主分支时Git上默认的分支。
对主分支版本的文件继续进行修改,并进行提交。使用git checkout RB_1.0切换到发布分支,修改文件,并进行提交。
现在我们已经可以进行分支的发布了,我们需要为其打上一个标签。意味着在版本库的历史记录中标记出特定的点,这样就容易找到相应的版本。
git tag 1.0 RB_1.0 [标签名] [打标签的点]
git tag命令可以查看版本库中的标签列表
给代码打过标签之后,现在在两条分支上有不同的代码的提交,他们并不知道彼此所包含的代码。RB_1.0用于发布,主分支用于版本2.0新功能的开发,现在需要将RB_1.0分支上所做的修改合并到主分支上。变基命令git base可以完成这项工作。变基是将一条分支上的修改再另一条分支的末梢重现。
1.首先使用git checkout master切换到主分支
2.git rebase RB_1.0 [希望变基到的分支名称]
删除分支,看上去很危险,实际上我们依就可以通过标签所指向的节点找到分支。使用git branch -d [分支名称]
为代码发布创建归档文件,没有必要总是把历史记录一起发布,通常情况下,将标签对应的版本内容打包成压缩包。使用git archive –format=[tar|zip] –prefix=[发布目录] [归档标签名称],例如
git archive –format=tar –prefix=mycode-1.0\ 1.0 |gzip > mycode-1.0.tar.gz
3.5 克隆远程版本库
git clone [远程版本库位置] [存储版本库的本地目录]