版本控制工具

版本控制的起源

  • 现在的软件项目通常是由一个研发小组共同分析,设计,编码,维护以及测试的
  • 针对团队开发需要解决以下问题:
    • 备份多个版本,费空间,费时间
    • 难以恢复至以前正确版本
    • 难以解决代码冲突困难
    • 难以追溯问题代码的修改人和修改时间
    • 无法进行权限控制
    • 项目版本发布困难
  • 源代码管理工具就是为了解决上述问题应运而生的

版本控制

  • 是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程,是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统
    • 如果是团队开发,使用版本控制是强制性的
    • 如果是单人开发,也强烈建议现在就开始使用版本控制
  • 使用版本控制
    • 不会对现有工作造成任何损害
    • 不会增加工作量
    • 添加新的功能拓展时,会变得更加容易

常见版本控制工具

  • CVS开启版本控制之门
  • SVN集中式版本控制之王者
    • 又称subversion,是CVS的接班人,是一款集中式源代码管理工具,曾经是绝大多数开源软件的代码管理工具,前几年在国内软件企业使用最为普遍
  • GIT分布式版本控制之伟大作品
    • 一款分布式源代码管理工具,目前国内企业几乎都已经从SVN到GIT的转换
  • 分布式与集中式最大的区别
    • 在集中式下,开发者只能将代码提交到服务器,在分布式下,开发者可以在本地提交
    • 在集中式下,只有远程服务器上有代码数据库,在分布式下,每个开发者机器上都有一个代码数据库
Git和SVN的简单对比
  • 速度
    • 在很多情况下,git的速度远远比SVN快
  • 结构
    • SVN是集中式管理,git是分布式管理
  • 其他
    • SVN使用分支比较笨拙,git可以轻松拥有无限个分支
    • SVN必须联网才能正常工作,git支持本地版本控制工作
    • 旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git

Git简介

  • GIT是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
  • 在世界上所有的分布式版本控制工具中,git是最快,最简单,最流行的,是Linux之父李纳斯的第二个伟大作品

Git工作原理

  • 工作区(Working Directory): 仓库文件夹里面,除了.git目录以外的内容
  • 版本库(Repository): .git目录,用于储存记录版本信息
    • 版本库中的暂缓区(stage)
    • 版本库中的分支(master): git自动创建的第一个分支
    • 版本库中的HEAD指针: 用于指向当前分支

GIT单人开发

准备工作(只做一次)
  1. 创建一个工作区
  2. 在工作区中打开git终端
  3. 通过git init指令,初始化版本库
  4. 通过git config user.name "姓名" / git config user.email "邮箱"设置用户名和邮箱
  5. 通过git config -l查看设置情况
开发阶段
  1. 编写代码
  2. 通过git add 文件名 / git add .添加到版本库的暂缓区中
  3. 通过git commit -m"说明"将暂缓区的文件添加到HEAD指针指向的分支中(默认只有一个分支,master分支,也称之为主分支)

注意点

  1. 不是写一句代码就add commit一次,应该是完成一个功能后在add commit
  2. commit时-m注释一定要认真编写,与当前提交内容保存一致
单人使用Git管理项目好处
  1. 可以通过git status查看哪些文件没有被管理,修改了哪些文件,红色(没有被管理或者被修改了),绿色(在暂缓区)
  2. 可以通过git diff查看具体修改了哪些代码
  3. 可以通过git log / git reflog查看项目演变历史
  4. 可以通过git reset --hard 版本号在任意版本之间切换
  5. 无需备份多个文件,每次commit提交Git会自动备份

多人开发

在远程服务器上创建一个共享版本库
  1. 项目负责人打开远程的服务器,然后创建一个工作区
  2. 在远程服务器上打开工作区,在工作区中打开Git终端工具
  3. 在Git终端工具中输入 git init --bare
  4. 经过以上几步,就代表远程服务器上的共享版本库已经创建好了
开发人员下载远程版本库
  1. 开发人员在自己的电脑上打开Git终端工具
  2. 从远程服务器上下载当前项目的共享版本库 git clone 远程服务器共享版本库的地址 (和单人开发使用Git的区别:单人开发是自己创建版本库,而多人开发是从远程服务器下载版本库)
开发阶段(和单人开发一样)
  1. 设置用户名和邮箱
  2. 编写代码
  3. git add . 添加到暂缓区
  4. git commit -m 添加到HEAD指针指向的分支
  5. 注意点
    • commit是将编写好的代码提交到本地的版本库,所以其他的开发人员是拿不到我们提交的代码的
    • 如果想让其他开发人员也能拿到我们提交的代码,还必须将编写好的代码提交到远程的服务器
    • 通过 git push 将代码提交到远程的服务器
    • 其他开发人员只需要通过 git pull 就可以拿到更新的代码了
多人开发使用Git注意点
  1. 不能将不能运行的代码提交到本地和远程服务器
  2. 如果服务器上有其他开发人员的更新内容,那么我们不能直接通过push将我们的代码提交到服务器
  3. 如果服务器上有其他开发人员更新的内容,我们必须先将其他开发人员更新的内容更新到本地之后才能通过push提交我们的内容
  4. 如果我们更新的内容和其他同事更新的内容有冲突(修改了同一文件的同一行代码),这个时候需要我们自己手动修改冲突,修改完冲突后才能将代码提交到远程服务器
  5. 只要开发完了一个功能就要立即提交代码,因为在企业中谁后提交谁就负责解决冲突,谁的工作量就会变大

Git分支使用

如何查看有多少个分支
  • 通过git branch指令就可以查看当前的版本库中有多少个分支
  • 如果当前的版本库是空的,无法查看
  • 如果通过git branch指令查看当前的版本库中有多少个分支,输出的内容中哪一个分支前面有*号就代表当前的HEAD指针指向哪一个分支,我们提交的代码就会提交到指向的分支中
如何创建一个分支
  • 通过git branch 分支名称 来创建一个新的分支
  • 在哪个分支中创建了新的分支,那么创建出来的新的分支就会继承当前分支的所有状态
    • 例如
    • 在master分支中做了两个操作,然后在master分支中创建了Dev分支,那么创建出来的Dev分支就会继承master分支中的这两个操作
  • 一旦分支被创建出来之后,分支就是独立的,分支之间不会相互影响
如何切换分支
  • 通过git switch 分支名称 来修改HEAD指针的指向
  • 只要HEAD指针的指向发生了改变,那么commit的代码就会发生改变
  • HEAD指针指向谁commit提交的代码就提交到哪个分支中
如何合并分支
  • 可以通过git merge 分支名称 来合并分支
    • 例如
    • 在master分支中执行 git merge Dev就代表需要将Dev分支中的代码都合并到master分支中
    • 在Dev分支中执行 git merge master就代表需要将master分支中的代码都合并到Dev分支中
如何删除分支
  • 通过git branch -d 分支名称 来删除本地的分支
  • 通过git push origin --delete 分支名称 来删除远程服务器的分支

Gitflow工作流程

准备阶段
  1. 初始化远程工作区和共享版本库
  2. 项目经理初始化项目,并在master定制标记
  3. 将master分支提交到远程服务器
  4. 项目经理基于master分支创建Develop分支
  5. 项目经理将新建的分支提交到远程的服务器
  6. 项目经理给开发人员分配工作
开发阶段
  1. 开发人员基于develop分支创建功能分支
  2. 开发人员在自己的分支上add commit push
  3. 开发完成告诉项目经理,由项目经理审核代码并合并到develop分支
准备上线阶段
  1. 项目经理基于develop分支创建release分支
  2. 测试人员获取release分支代码进行测试
  3. 发现bug由开发人员基于release分支创建bugfix分支进行修复
  4. 开发人员修复完成后重新合并到release分支
  5. 项目经理将测试和修复完所有bug的最终代码合并到master分支和develop分支
正式上线阶段
  1. 项目经理给master分支制定标记
  2. 项目经理将标记提交到远程服务器
  3. 项目完成上线
上线之后
  1. 项目上线后如果出现了紧急bug
  2. 基于master分支创建hotfix分支,在该分支上修复bug
  3. 修复完成后重新合并到master分支和develop分支
  4. 项目经理在master分支定制标记

你可能感兴趣的:(版本控制工具)