Git版本控制工具使用

Posted 攻城狮Chova

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git版本控制工具使用相关的知识,希望对你有一定的参考价值。

版本控制

特点

  • 协同修改: 多人可以并行修改服务器端的同一个文件
  • 数据备份: 不仅保存目录和文件的当前状态,还可以保存每一个提交过的文件的历史状态
  • 版本管理:
    • 在保存每一个版本的文件信息时要做到不保存重复数据以节约存储空间
    • 提高运行效率
      • SVN采用增量式更新
      • Git采用文件系统快照的方式
  • 权限控制:
    • 对团队中参与开发的人员进行权限控制
    • Git可以对团队外开发者贡献的代码进行审核
  • 历史记录:
    • 查看修改人,修改时间,修改内容,日志信息
    • 将本地文件恢复到某一个历史状态
  • 分支管理:
    • 允许开发团队在工作过程中多条生产线同时推进以提高效率

分类

  • 集中式版本控制工具: SVN, CVS, VSS等.存在单点故障问题
  • 分布式版本控制工具: Git, Mercurial, Bazaar, Darcs等. 避免单点故障问题

Git

特点

  • 大部分操作在本地完成,不需要联网
  • 完整性保证
  • 尽可能添加数据而不是删除和修改数据
  • 分支操作非常便捷
  • 全面兼容Linux命令

Git命令

本地库操作

设置签名

  • 作用: 区分不同开发人员的身份
  • 注意: 这个设置的签名仅仅用于区分开发人员的身份,和登录代码托管中新的用户名,email地址没有任何关系
  • 命令:
    • 仓库级别: 仅在当前仓库范围内有效. 信息保存在 .git/config文件中
    git config user.name chova
    git config user.email chovavea@outlook.com
    
    • 系统用户级别: 在当前登录操作系统的用户范围内有效. 信息保存在 ~/.gitconfig文件中
    git config --global user.name chova
    git config --global user.email chovavea@outlook.com
    
  • 签名优先级:
    • 就近原则.仓库级别优先于系统用户级别,当两者都存在时采用仓库级别的签名
    • 如果只有系统用户级别的签名,就采用系统用户级别的签名为准
  • 不允许不设置用户级别,一般情况下只要设置系统用户级别即可

本地库初始化

  • Git命令: git init
  • 注意点: .git目录中存放的是本地库相关的子目录和文件,不能随意修改和删除

本地库基本操作

  • 状态查看: git status
    • 查看工作区和暂存区的状态
  • 添加: git add filename
    • 将工作区新建或者修改的文件添加到暂存区
  • 提交: git commit -m “commit messsage” filename
    • 将暂存区的内容提交到本地库
  • 查看历史记录:
    • git log
    • git log --pretty=oneline
    • git log --oneline
    • git reflog
  • 版本回滚:
    • 基于索引值操作: git reset --hard 版本索引值
      • 使用^符号: 只能向后回滚版本
        • git reset --hard HEAD^
        • 一个 ^ 表示后退一步
      • 使用~符号: 只能向后回滚版本
        • git reset --hard HEAD~n
        • n表示后退n
    • git reset --xx命令三个参数:
      • soft: 仅仅在本地库移动HEAD指针
      • mixed: 不仅仅在本地库移动HEAD指针,还会重置暂存区
      • hard: 不仅仅在本地库移动HEAD指针,还会重置暂存区,也会重置工作区
  • 找回删除的文件:
    • 条件: 删除前,文件存在的状态已经提交到了本地库
    • 找回: 使用命令 git reset --hard [指针位置]
      • 如果删除操作已经提交到本地库,则将指针位置指向历史记录
      • 如果删除操作尚未提交到本地库,则将指针位置参数设置为HEAD
  • 文件比较:
    • git diff [文件名] : 将工作区的文件和暂存区的文件进行比较
    • git diff [本地库中历史版本] [文件名] : 将工作区文件和本地库历史记录进行比较

分支操作

分支基本概念

  • 分支: 在版本控制中,使用多条任务线同时推进多个任务,这样的任务线叫作分支
  • 分支的特点:
    • 并行推进多个功能的开发,可以提高开发效率
    • 各个分支在开发的过程中,彼此是独立的,不会影响其余分支,有很好的容错性

分支基本操作

  • 创建分支: git branch [分支名称]
  • 查看分支: git branch -v
  • 切换分支: git checkout [分支名称]
  • 合并分支:
    • 切换到目的分支 : git checkout 目的分支名称
    • 将源分支合并到目的分支 : git merge 源分支名称
  • 分支冲突:
    • 修改分支冲突的文件,删除特殊符号
    • 使用命令 : git add [文件名]
    • 使用命令 : git commit(不能有文件名)

Git原理

哈希Hash算法

  • 哈希Hash是一个系列的算法,各个不同的哈希算法加密程度不尽相同,但是都有以下共同点:
    • 不管输入的数据量多大,输入同一个哈希算法,得到的加密结果长度是固定的
    • 哈希算法确定,输入数据确定,那么输出的数据也是确定的
    • 哈希算法确定,输入数据有变化,那么输出的数据也一定会有变化,并且变化很大
    • 哈希算法是不可逆的
  • Git底层采用的哈希算法的SHA-1算法
  • 哈希Hash算法用于验证文件的原理:
    • 将原始文件作为输入通过哈希算法SHA-1获得结果
    • 将网络传输中的目标文件作为输入通过哈希算法SHA-1获得结果
    • 比对两次的结果,如果一致则说明文件验证正确,如果不一致,说明目标文件有损坏
    • Git就是通过这样的机制从根本上保证数据完整性

Git版本保存机制

  • 在集中式版本控制工具中,文件管理是以文件变更列表的方式存储数据,保存的信息是一组基本文件和每个文件随时间逐步累积的差异.属于增量式版本控制,可以节约服务器存储空间
  • Git中文件管理机制:
    • Git将数据保存为一个小型系统的快照
    • Git中,每次提交更新时 ,Git都会对当前的全部文件制作一个快照并保存这个快照的索引
    • 如果文件没有修改 ,Git不会重新存储该文件,而是保留一个链接指向之前存储的文件
    • Git文件管理机制属于快照流版本控制

Git分支管理机制

  • Git分支管理的本质是创建和移动指针

Git远程仓库

远程库基本操作

  • 初始化本地目录 : git init
  • 推送操作 : git push [远程仓库地址] [远程分支]
  • 克隆操作 : git clone [远程仓库地址]
    • 完整将代码下载到本地
    • 创建origin远程地址别名
    • 初始化本地库
  • 拉取操作 : git pull [远程仓库名称] [远程分支]
  • 解决协同开发合并冲突:
    • 如果不是基于远程库中项目的最新版所做的修改,推送项目时,会引起冲突,不能推送,必须先拉取pull再推送push
  • 跨团队协同开发:
    • 团队外成员:
      • 点击Fork
      • 将项目clone到本地修改,然后push到远程仓库分支
      • 点击Pull Request
      • 点击New Pull Request
      • 点击Create Pull Request
    • 团队拥有者:
      • 点击Pull Request
      • 查看Pull Request,点击CommitsFiles changed查看项目的修改内容
      • 确认无误后,点击Merge pull request合并代码
      • 填写操作的日志信息,点击Confirm merge
      • 将远程库操作拉取到本地

SSH免密登录

  • 进入用户的root目录 : cd ~
  • 运行命令生成 .ssh密钥目录 : ssh-keygen -t rsa -C [邮箱地址]
  • 进入 .ssh目录 : cd .ssh
  • 查看id_rsa.pub文件 : cat id_rsa.pub
  • 复制id_rsa.pub中的内容
  • 登录GitHub, 进入Settings, 点击SSH and GPG keys
  • 点击New SSH Key, 粘贴复制的内容,完成SSH密钥设置

Git工作流

  • 在项目开发实践中,使用Git的方式

集中式工作流

  • 集中式工作流类似SVN工作方式,以中央仓库作为项目所有修改的单点实体,所有的修改都提交到master分支上
  • 这种方式与SVN的区别只是在于拥有本地库,很多Git的特性都没有使用到,是效率最差的Git工作流

GitFlow工作流

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

分支种类

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

Forking工作流

  • Forking工作流是在GitFlow的基础上,充分利用了GitForkPull Request的功能来达到代码审核的目的,更适合安全可靠地管理大团队的开发者,能够接受不信任贡献者的提交

以上是关于Git版本控制工具使用的主要内容,如果未能解决你的问题,请参考以下文章

源代码管理工具GitHub介绍

学习使用Git 版本控制 代码管理

版本控制工具GIT使用指南

版本控制工具 git的基本使用

Git 第一章 Git概述 -- Git概述(版本控制版本控制工具Git历史工作机制Git和代码托管中心)

Git分布式版本控制工具使用指南