Git版本控制

Git和SVN版本控制区别就是:GIT是分布式的,每一个用户都可以做版本控制; 

版本管理

在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式,效率高。

权限控制

对团队中参与开发的人员进行权限控制。

 对团队外开发者贡献的代码进行审核——Git 独有。 


Git和代码托管中心

    代码托管中心的任务:维护远程库

         局域网环境下: GitLab 服务器

          外网环境下 :GitHub 、 码云

Git的优势

 大部分操作在本地完成,不需要联网

 完整性保证

 尽可能添加数据而不是删除或修改数据

 分支操作非常快捷流畅 ,类似于指针指向切换

 与 Linux 命令全面兼容

 

Git 命令行操作
.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡 乱修改。

git init初始化,后需要设置签名 :区分不同开发人员的身份 

这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关 系。 

命令

 项目级别/仓库级别:仅在当前本地库范围内有效

 gitconfiguser.nametom_pro

[email protected]

 信息保存位置:./.git/config 文件
 系统用户级别:登录当前操作系统的用户范围

 gitconfig--globaluser.nametom_glb  [email protected]

 信息保存位置:~/.gitconfig 文件
 级别优先级

 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名

 如果只有系统用户级别的签名,就以系统用户级别的签名为准

 二者都没有不允许


基本操作
状态查看 git status  :查看工作区、暂存区状态;

添加 git add [filename] : 将工作区的“新建/修改”添加到暂存区
提交 git commit -m "commitmessage" [filename]  :将暂存区的内容提交到本地库
查看历史记录 git log 、git log--pretty=oneline 、git log--oneline、git reflog多屏显示控制方式: 空格向下翻页 b 向上翻页 q 退出     git reflog:HEAD@{移动到当前版本需要多少步}
前进后退 :基于索引值操作[推荐]  gitreset--hard[局部索引值]  gitreset--harda6ace91      --hard 参数  在本地库移动 HEAD 指针  重置暂存区  重置工作区

 删除文件并找回  前提:删除前,文件存在时的状态提交到了本地库。  操作:gitreset--hard[指针位置]  删除操作已经提交到本地库:指针位置指向历史记录  删除操作尚未提交到本地库:指针位置使用 HEAD
比较文件差异  gitdiff[文件名]  将工作区中的文件和暂存区进行比较  gitdiff[本地库中历史版本][文件名]  将工作区中的文件和本地库历史记录比较  不带文件名比较多个文件


 分支操作

 创建分支 git branch[分支名]

 查看分支 git branch-v

 切换分支 git checkout[分支名]

 合并分支  第一步:切换到接受修改的分支(被合并,增加新内容)上 git checkout[被合并分支名] 第二步:执行 merge 命令 git merge[有新内容分支名] 


 Git 基本原理:

哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下 几个共同点: ①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。 ②哈希算法确定,输入数据确定,输出数据能够保证不变 ③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 ④哈希算法不可逆 Git 底层采用的是 SHA-1 算法。 哈希算法可以被用来验证文件。原理如下图所示:

Git版本控制_第1张图片

Git保存版本的机制
集中式版本控制工具的文件管理机制 以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异。

Git版本控制_第2张图片
Git 的文件管理机制 :Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前 的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。

Git版本控制_第3张图片

Git 工作流
集中式工作流 像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有 修改都提交到 Master 这个分支上。 这种方式与SVN的主要区别就是开发人员有本地库。 Git很多特性并没有用到。

Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布 迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pullrequest 的 功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受 不信任贡献者的提交。

GitFlow 工作流详解

分支种类

 主干分支 master 主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境 完全一致。

 开发分支 develop 主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

 bug 修理分支 hotfix 主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修 理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

 准生产分支(预发布分支) release 较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集 成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后 可以视情况删除。

 功能分支 feature 为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支 中独立出来。 开发完成后会合并到开发分支。

Git版本控制_第4张图片

Git版本控制_第5张图片

 


idea使用git

1.创建项目并提交到远程Git仓库:创建好项目,选择VCS - > Import into Version Control -> Create Git Repository

下图是Git与提交有关的三个命令对应的操作,Add命令是把文件从IDE的工作目录添加到本地仓库的stage区,Commit命令把stage区的暂存文件提交到当前分支的仓库,并清空stage区。Push命令把本地仓库的提交同步到远程仓库。

IDEA中对操作做了一定的简化,Commit和Push可以在一步中完成。

具体操作,在项目上点击右键,选择Git菜单

因为是第一次提交,Push前需要指定远程仓库的地址。如下图,点击Define remote后,在弹出的窗口中输入远程仓库地址。

获取更新有两个命令:Fetch和Pull,Fetch是从远程仓库下载文件到本地的origin/master,然后可以手动对比修改决定是否合并到本地的master库。Push则是直接下载并合并。如果各成员在工作中都执行修改前先更新的规范,则可以直接使用Pull方式以简化操作。

2.新功能的任务,创建了一个分支并在分支上开发

建分支也是一个常用的操作,例如临时修改bug、开发不确定是否加入的功能等,都可以创建一个分支,再等待合适的时机合并到主干。

创建流程如下:

选择New Branch并输入一个分支的名称

创建完成后注意IDEA的右下角,如下图,Git: wangpangzi_branch表示已经自动切换到wangpangzi_branch分支,当前工作在这个分支上。

点击后弹出一个小窗口,在Local Branches中有其他可用的本地分支选项,点击后选择Checkout即可切换当前工作的分支。

如下图,点击Checkout

注意,这里创建的分支仅仅在本地仓库,如果想让组长小张获取到这个分支,还需要提交到远程仓库。

3.分支提交到远程Git仓库

切换到新建的分支,使用Push功能

4.获取提交的分支

使用Pull功能打开更新窗口,点击Remote栏后面的刷新按钮,会在Branches to merge栏中刷新出新的分支。这里并不想做合并,所以不要选中任何分支,直接点击Pull按钮完成操作。

更新后,再点击右下角,可以看到在Remote Branches区已经有了新的分支,点击后在弹出的子菜单中选择Checkout as new local branch,在本地仓库中创建该分支。完成后在Local Branches区也会出现该分支的选项,可以按上面的方法,点击后选择Checkout切换。

5、分支合并到主干

新功能开发完成,体验很好,项目组决定把该功能合并到主干上。

切换到master分支,选择Merge Changes

选择要合并的分支,点击Merge完成


IDEA下git版本回退,版本还原

1、选中要回退的文件或者项目

2、复制要回退版本的版本号:

3、然后在branches里check out你想要回退的版本

选择Checkout Tag or Revision…

 

在弹出的窗口粘贴刚刚复制的版本号,然后点击OK,版本回退成功。

 

 

 

 

 

你可能感兴趣的:(工具)