[版本控制]Git的入门使用指南

[版本控制]Git的入门使用指南

Scroll Down

git

版本控制

工程设计领域适用版本控制管理工程蓝图的实际过程。

版本控制工具的功能

  • 协同修改

    • 多人并行不悖的修改服务器上的同一个文件
  • 数据备份

    • 保存当前状态和历史状态
  • 版本管理

    • 不保存重复的数据,节省空间
    • SVN采取增量保存方式
    • git采取文件系统的快照方式
  • 权限控制

    • 对团队参与开发人员进行权限控制
    • 对于团队外的开发者贡献代码进行审核
  • 历史记录

    • 查看修改人、修改日期、修改内容等
    • 将本地文件恢复到某一个历史状态
  • 分支管理

    • 允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

版本控制工具分类

  • 集中式版本控制工具(SVN,VSS,CVS)
  • 分布式版本控制工具(git)

git简介

发展历史

  1. 1991年,linus本人手动进行linux开发
  2. 2002年,BitMover出于人道主义精神免费试用,但是被破解掉了。
  3. 2005年,BitMover发现了开发Samba的Andrew破解了自己的软件。收回了BitMover的使用权。
  4. 同年,linus自己使用C语言开发了Git,主体程序两周开发完毕
  5. 2008年,github上线,多方代码进行托管。

Git的优势

  • 大部分操作在本地完成
  • 完整性的保证(Hash验证)
  • 尽可能添加数据而不是删除或者修改数据
  • 分支操作非常快捷流畅
  • 和linux全面兼容

git代码托管中心

代码托管中心的作用是对远程库进行维护

  • 内网
    • gitlab
  • 外网
    • github
    • 码云

本地库和远程库的交互方式

团队内操作
  • 本地库内容push到远程库
  • 远程库clone到本地库
  • 修改本地库之后也可以push到远程库(需要权限)
  • 执行pull操作,将远程库的修改拉取到本地
团队外操作
  • 远程库fork复制到团队外成员的远程库
  • clone到本地
  • 修改之后push到远程库
  • 远程库和远程库之间发起pull request请求
  • 审核完毕之后,进行merge操作

git本地结构

image-20200608181501739

git命令行操作

本地库初始化

  • 命令:git init
  • 注意事项:
    • 不要修改自动生成的.git中的内容

本地库设置签名

  • 形式

    • 用户名
    • E-mail地址
  • 作用

    • 用于区分不同的开发人员
  • 注意

    • 远程库的用户名和密码不与此处一样
  • 命令:git config

    • 项目级别/仓库级别:
      • 仅在当前本地库的范围内有效
      • 不带参数
    • 系统用户级别:
      • 登录当前系统的用户范围内有效
      • git config --global
  • 优先级

    • 就近原则:项目级别优先于系统级别,二者都有使用项目级别的优先级
    • 如果只有系统级别的优先级,使用系统级别的优先级
    • 二者不可以同时不存在
  • 示例:

git config user.name tom_pro
git config user.email tom_pro@nobug.icu

git config --global user.name tom_glb
git config --global user.email tom_glb@nobug.icu
  • 签名存放位置:
    • 项目级别:项目目录/.git/config
    • 系统级别:~/.gitconfig

提交

  • 查看当前本地库的状态
    • git status
    • 查看工作区暂存区状态
  • 将尚未追踪的文件添加到暂存区
    • git add
    • 工作区新建修改进行提交
    • 换行符进行转换
$ git add welcome.txt
warning: LF will be replaced by CRLF in welcome.txt.
The file will have its original line endings in your working directory
  • 已经追踪的文件提交

    • git commit -a
  • 从暂存区删除文件

    • git rm --cached
  • 提交文件

    • git commit 需要使用vim编辑器输入注释信息
    • git commit -m "注释信息" 将注释信息在命令内输入

版本退回

  • 查看版本日志

    • git log 完整查看
    • git log -p -2 查看最近两次的提交
    • git log --pretty={oneline,short,full} 美化显示
    • git log --oneline 显示部分hash值(只显示过去的版本)
    • git reflog 查看移动步数的日志
  • 版本回退的本质

    • git管理历史记录存在一个**head** 指针

版本回退前进的方式

  • 基于索引值方式

    • git reset --hard 索引值
  • 使用**git reset --hard HEAD^**的方式(只能后退)一个退一步

  • 使用**git reset --hard HEAD~步数**的方式(只能后退)

  • reset参数

    • hard
      • 移动指针
      • 重置暂存区
      • 重置工作区
    • soft
      • 移动HEAD指针
    • mixed
      • 移动HEAD指针
      • 重置暂存区

image-20200608181543072

删除文件找回

  1. 已经commit进行本地的删除
    • 使用**git reset --hard**切换到存放该文件的版本
  2. 删除之后add,但是并没有commit
    • 使用**git reset --hard HEAD**

比较文件

  1. 使用**git diff [文件名]**进行文件的比较
  2. 比较的内容为工作区和暂存区的文件
  3. 也可以使用**git diff HEAD [文件名]** 和仓库中的内容进行比较

git 分支

版本控制过程中多条线路同时推进多个项目

  • master
  • feature_功能名
  • hot_fix

分支操作

  • 创建分支
    • git branch [分支名]
  • 查看分支
    • git branch -v
  • 切换分支
    • git checkout [分支名]
  • 合并分支
    • 切换到接受合并的分支上去(一般为master)
    • git checkout [要合并到的分支]
    • 执行**git merge [被合并的分支名]**
  • 冲突解决
$ git merge master
Auto-merging app.md
CONFLICT (content): Merge conflict in app.md
Automatic merge failed; fix conflicts and then commit the result.

<<<<<<< HEAD
2 edit by hotfix
=======
1 add by master
>>>>>>> master
  • HEAD 当前分支的内容
  • master 其他分支的内容
  • 修改冲突的文件
  • git add 添加到暂存区
  • git commit -m "日志信息"
  • 注意:
    • commit不要带文件名!

git的基本原理

hash原理

哈希是一系列的加密算法,各个加密算法加密强度不同但是有以下的特点:

  1. 不管输入的数据有多大,输出的加密串固定长度
  2. 哈希算法确定,输入确定,输出就可以保证不变化
  3. 哈希算法确定,输入数据微小变化,输出可能发生巨大变化
  4. 不可逆

git 底层采用SHA-1算法

git保存版本的机制

  • 集中式版本控制工具的文件管理机制(增量式版本工具)
    每个项目的修改部分进行保存,将当前修改和之前的文件进行合并。
  • git文件管理机制(快照流)
    • 对所有的目录所有文件进行快照
    • 保存快照的索引,没有修改文件不存储该文件,保留指向上一个版本的指针。
    • git 的 “提交对象
      • 每个提交的文件都做了一个hash
      • hash生成hash树
      • hash树也有一个hash值
      • 加上作者等内容加一起进行一个hash就是commit对象的hash

git 分支管理

  • git分支管理的本质是创建和移动指针
  • 創建分支是新建指針的過程
  • 切换分支只是切换指针指向的位置的过程

git图形化界面操作

github的使用/码云

  1. 注册
  2. 登录
  3. 创建仓库
    1. 复制仓库链接
    2. 查看地址别名**git remote -v**
    3. 新建地址别名**git remote origin 地址**
    4. 推送本地到远程**git push origin master**
      1. 这里出现错误fatal: refusing to merge unrelated histories
      2. 解决方法:先将远程库内容下载到本地
      3. git pull origin master --allow-unrelated-histories
      4. 之后重新执行命令即可
    5. 克隆操作
      1. git clone 地址
      2. 功能
        1. 完整的把远程库下载到本地
        2. 创建origin远程地址别名
        3. 初始化本地库
    6. 邀请新成员加入
      1. 在码云或者github网页进行邀请
      2. 邀请后复制邀请链接确认加入
      3. 提交代码
    7. 拉取远程的代码
      1. git fetch origin master将远程的内容下载到本地
      2. 查看下载的内容**git checkout origin/master**
      3. **git merge origin/master**合并下载的内容和本地文件
    8. 解决冲突
    9. 邀请fork到自己的远程库
      1. fork
      2. clone
      3. push

ssh登录

  1. 根目录下使用**ssh-keygen -t rsa -C + 账号**生成本地密码文件
  2. 找到**.ssh/ip_rsa.pub**
  3. 将里面的内容添加到码云或者github的密码验证中
  4. 复制仓库的ssh地址
  5. 新建地址别名
  6. 使用新建的地址别名进行版本管理

git 工作机制

集中式

git工作流

fork工作流

gitlab

https://www.cnblogs.com/ssgeek/p/9328758.html