1、G GI IT T使用培训使用培训谭宗威2014-07-29欢迎5/15/20222 版本管理的作用1 常用版本管理介绍2 版本管理的工作模式3 Git介绍 4 Git日常工作模式5今天的内容概述 5/15/20223学习目标 版本管理的作用 掌握日常的操作 团队协作5/15/20224版本管理的版本管理的作用作用5/15/20225为什么要版本管理?为什么要版本管理?文件管理历史追踪冲突管理版本发布团队协作5/15/20226常用常用版本管理介绍版本管理介绍5/15/20227常见的版本管理软件简简 称称全全 名名CVSConcurrent Versions SystemVSSMicoros
2、oft Visual SourceSafeSVNSubversionGitTFSTeam Foundation ServerMercurialClearCaseIBM Rational ClearCasePerforce5/15/20228版本管理的工作模式版本管理的工作模式5/15/20229灵活性健壮性单机版(文件系统,RCS)分布式(Git、Mercurial)发展过程集中式(CVS,SVN)5/15/202210本地本地计算机计算机版本库本地版本管理本地版本管理u版本库:个人电脑/服务器uRCS: Revision Control System 可追踪修改历史u问题:如何协作?Vers
3、ion 3Version 2Version 1file检出5/15/202211计算机计算机A Afile检出版本服务器版本服务器版本库集中式集中式版本管理版本管理u版本库:版本服务器uVCS: Version Control System 又称CVCS(Central VCS) 有SVN、CVS、firefly等产品u问题: 服务器会停 网络会不通Version 3Version 2Version 1计算机计算机B Bfile检出5/15/202212版本版本服务器服务器版本库分布分布式版本管理式版本管理u版本库 版本服务器 个人计算机uVCS: 又称DVCS(Distributed VCS
4、) 有GIT、HG、bazaar等产品u问题: 乱成一团? 分支管理机制Version 3Version 2Version 1计算机计算机A A版本库Version 3Version 2Version 1计算机计算机B B版本库Version 3Version 2Version 1file检出file检出5/15/202213协作模式 锁定模型 冲突合并模型5/15/202214常用术语分支(Branch): 在一个时间点,复制一份处于版本控制之下的文件,从这之后,这两份拷贝就可以独立的互不干扰的进行各自开发。取出(Check-out): 一次“取出”,就是在本地创建一份仓库的工作拷贝。提交(
5、Commit): 一次“提交”,将本地的修改写回到仓库或合并到仓库。冲突(Conflict): 当开发者们同时提交对同一文件的修改,而且版本系统不能把它们合并到一起,就会引起冲突,就需要人工来进行合并。合并(Merge): 合并就是把所有对文件的修改统一到文件里仓库(Repository): 仓库就是当前的和历史的处于版本控制之下的文件所在的地方,通常在服务器端。 工作版本(Working copy):从档案库中取出一个本地端的复制,所有在档案库中的档案更动,都是从一个工作版本中修改而来的,这也是这名称的由来。5/15/202215G GITIT介绍介绍5/15/202216Git的诞生 20
6、02年以前 Linus个人以diff方式管理 2002年至2005年 BitMover公司的BitKeeper 2005年以后 Linus两个月开发出Git5/15/202217Git的发展 大部份开源软件 G G C C5/15/202218GITGIT设计目标设计目标满足大满足大规模项规模项目需要目需要快速快速简单简单完全完全分布分布高效高效存储存储5/15/202219版本版本服务器服务器版本库GITGIT工作模式工作模式u版本库初始化 个人计算机从版本服务器同步u操作 90%以上的操作在个人计算机 添加文件 修改文件 提交变更 查看版本历史等u版本库同步 将本地修改传送 到版本服务器V
7、ersion 3Version 2Version 1计算机计算机A A版本库Version 3Version 2Version 1计算机计算机B B版本库Version 3Version 2Version 1file检出file检出5/15/202220GITGIT文件存储文件存储5/15/202221第二部分第二部分GIT GIT 基础基础5/15/202222版本库结构版本库结构5/15/202223TortoisegitTortoisegit设置设置5/15/202224创建版本库创建版本库l 版本库:repositoryl 创建方法创建方法p 执行git initl 示例示例p 工作目
8、录:E:RepositoriesGITRCMSDemop 在工作目录中点击鼠标右键l . .gitgit目录目录p 版本库:暂存区和对象库5/15/202225第一个提交第一个提交l 创建文件Readme.txtl 使用git add命令添加Readme.txtl 使用git commit提交Readme.txt修改文件修改文件l 修改Readme.txtl 使用git add命令添加Readme.txtl 使用git commit提交Readme.txt克隆版本库克隆版本库l 示例l 版本服务器:gitserverl 版本服务器用户:gitusrl 版本库:RCMSDocl 本地目录:F:g
9、it文件状态文件状态a a工作工作区区版本库版本库版本管理版本管理l 工作区p 工作目录:.git文件夹所处目录l 文件状态文件状态p 未跟踪:处于工作目录,但未被版本库管理的文件p 已跟踪:已被版本库管理的文件,可能存在于工作目录,也可能不存在于工作目录中5/15/202229GITGIT文件状态文件状态工作工作区区暂存区暂存区对象库对象库修改文件修改文件暂存文件暂存文件提交提交文件文件检出文件检出文件l GIT文件p 已被版本库管理的文件l 已修改已修改p 在工作目录修改GIT文件l 已暂存已暂存p 对已修改的文件执行git暂存操作,将文件存入了暂存区l 已提交已提交p 将已暂存的文件执行
10、git提交操作,将文件存入对象库5/15/202230本地计算机本地计算机版本库Version mVersion Version 1file本地版本库与服务器版本库(一)本地版本库与服务器版本库(一)版本版本服务器服务器版本库Version 3Version 2Version 1本地计算机本地计算机版本库Version 3Version 2Version 1file检出gitgit add add、commitcommitgitgit push pushgitgit pull pull版本版本服务器服务器版本库Version mVersion Version 15/15/202231远程协作(
11、一)远程协作(一)l 创建文件Readme.txtl 使用git add命令添加Readme.txtl 使用git commit提交Readme.txt至本地版本库xtl 使用git push保存Readme.txt到服务器版版本版本服务器服务器版本库Version x xVersion Version 1本地计算机本地计算机版本库Version mmVersion Version 1本地版本库与服务器版本库(二)本地版本库与服务器版本库(二)版本版本服务器服务器版本库Version 3Version 2Version 1本地计算机本地计算机版本库Version 3Version 2Versi
12、on 1gitgit add add、commitcommitgitgit push pushgitgit pull pull版本版本服务器服务器版本库Version n nVersion Version 1gitgit push pushgitgit pull pull本地计算机本地计算机版本库Version x xVersion Version 15/15/202233远程协作(二)远程协作(二)l 修改Readme.txtl 使用git add命令添加Readme.txtl 使用git commit提交Readme.txtl 使用git pull获取服务器版本库更新l 使用git pus
13、h将Readme.txt保存至版本服务器GITGIT常用命令常用命令l 获得版本库p git initp git clonel 版本管理版本管理p git addp git rmp git commitl 远程协作远程协作p git pullp git pushl 查看信息查看信息p git helpp git logp git diff5/15/202235第三部分第三部分GIT GIT 进阶进阶5/15/202236再谈暂存区和对象库再谈暂存区和对象库l 暂存区p 一个文件:.git/indexl 对象库对象库p 一个目录:.git/objectsp 存放版本库的各种对象5/15/2022
14、37对象对象l 对象对象p 每个对象都是一个文件p 每个对象都用40位的SHA-1值标识:6ff87c4664981e4397625791c8ea3bbb5f2279a3p 前两位作为目录名,后38位作为文件名l 对象组成对象组成p 类型:blob、tree、commit和tagp 内容:对象文件的内容p 大小:内容的大小5/15/202238对象类型对象类型l blobblobp 是一个文件p 存储文件的内容l treetreep 是一个文件p 类似一个目录p 包含其它tree和blobl c commitommitp 是一个文件p 包含时间、作者、一个tree的标识、父commit的标识l
15、 tagtagp 是一个文件p 包含一个commit的标识5/15/202239案例案例5/15/202240blobblob5/15/202241treetree5/15/202242commitcommit5/15/202243对象模型对象模型5/15/202244gitgit statusstatusl 工作区相比暂存区工作区相比暂存区p 新增文件p 修改文件p 删除文件p 一致(git add)l 暂存区相比对象库暂存区相比对象库p 新增文件(git add)p 修改文件(git add)p 删除文件(git rm)p 一致(git commit)l 暂存区仅保留对象库当前暂存区仅保留
16、对象库当前分支的快照,分支的快照,gitgit commit commit将会替换当前快照,使得将会替换当前快照,使得暂存区与对象库的当前分暂存区与对象库的当前分支最新更新一致支最新更新一致5/15/202245gitgit rmrmGITGIT通常只会增加内容,不用担心丢通常只会增加内容,不用担心丢失曾经有的数据失曾经有的数据GITGIT也支持彻底清除确认无效的数据也支持彻底清除确认无效的数据,属于更高级的内容,属于更高级的内容5/15/202246第四部分第四部分分支管理分支管理5/15/202247分支分支l 概念概念p 一个commit对象链:一条工作记录线5/15/202248mas
17、termasterl 主分支主分支p 默认分支p 主体功能开发l 综合信息综合信息p 一个文件:.git/refs/heads/masterp 文件内容:commit对象的SHA-1值5/15/202249HEADHEADl 当前当前commitcommit对象引用对象引用p 一个文件:.git/HEADp 文件内容:分支引用(ref: refs/heads/master)commit对象的SHA-1值(4c9f4)5/15/202250再谈分支再谈分支l 概念概念p 一个文件:位于.git/refs/heads目录下p 文件内容:commit对象的SHA-1值l 分支管理分支管理p 创建分支
18、:git branch p 删除分支:git branch d 5/15/202251在分支上工作在分支上工作l 切换到分支切换到分支p git checkout 用分支对应的快照更新暂存区和工作区5/15/202252分支合并分支合并l gitgit merge merge 5/15/202253冲突冲突l 冲突:冲突:修改了两个待合并分支里同一个文件的同一部分(比如同一行)5/15/202254冲突产生冲突产生5/15/202255冲突解决冲突解决5/15/202256第五部分第五部分团队协作团队协作5/15/202257远程版本库远程版本库l 管理管理p git clone :生成一个叫
19、orgin的远程版本库p git remote v:查看远程版本库信息p git remote add :指定版本库名字l 路径路径p .git/refs/remotes/5/15/202258远程分支远程分支l 路径路径p .git/refs/remotes/l 访问方式访问方式p /:origin/masterl 跟踪分支(跟踪分支(tracking branchtracking branch)p git checkout /p git checkout b /5/15/202259从远程版本库抓取数据从远程版本库抓取数据l gitgit fetch remote repo fetch r
20、emote repo name namep git fetch = git fetch originp 从远程仓库中拉取本地仓库中还没有的数据(所有分支)p 需要执行git checkout跟踪远程分支,从而产生本地分支5/15/202260再谈再谈克隆克隆版本库版本库l gitgit clone clone p git init p git remote add origin p git fetch originp git checkout origin/master5/15/202261推送数据给远程版本库推送数据给远程版本库l gitgit push remote repo name b
21、ranch name push remote repo name branch namep 将本地分支推送给的分支l gitgit push pushp 如果当前分支为跟踪分支,则推送至其跟踪的远程分支p 否则=git push origin,将当前分支推送给origin,在origin上的分支名称与当前分支名称相同5/15/202262本地计算机本地计算机版本库masterbranch1 gitgit pullpull版本版本服务器服务器版本库masterbranch1 branch2 本地分支远程分支masterBranch1 branch2 git fetchgit mergegit checkout mastergit pullgit mergegit checkout branch1git pull5/15/202263删除远程分支删除远程分支l gitgit push : push :5/15/202264提提问问? ?5/15/202265