• Git版本控制


    1.Git

    • 1.Git是一个免费开源的分布式版本控制系统
    • 2.Git易于学习,占地面积小,性能极快,具有廉价的本地库,方便的暂存区域和多个工作流分支等特性
    • 3.Git性能优于Subversion(SVN)CVS等版本控制工具

    1.版本控制

    • 1.版本控制是一种记录工作内容变化,以便将来查阅特定版本修订情况的系统
    • 2.版本控制最重要的是可记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换

    1.1.版本控制的原因

    • 1.方便个人开发过渡到团队协作
      在这里插入图片描述

    1.2.版本控制工具

    1.2.1.集中式版本控制工具
    • 1.集中式版本控制工具有Subversion(SVN),CVS
    • 2.集中式的版本控制工具都有一个单一的集中管理服务器,用于保存所有文件的修订版本,协同工作的用户都通过客户端连到该台服务器,取出最新的文件或提交更新
    • 3.优点:可以一定程度上查看项目中成员的进度,管理员可以掌握每个成员的权限,并且管理一个集中化的版本控制系统,比在各个客户端上维护本地数据库方便
    • 4.缺点:中央服务器会出现单点故障,如果服务器宕机,则宕机期间无法协同工作从而影响进度
      在这里插入图片描述
    1.2.2.分布式版本控制工具
    • 1.分布式版本控制工具有GitMercurial
    • 2.Git分布式版本控制工具中客户端提取的不是最新版本的文件快照,而是把远程代码仓库完整地镜像下来保存在本地库
    • 3.任何一处协同工作用的文件发生单点故障,都可以通过其他客户端的本地仓库进行恢复,因为每个客户端的每一次提取操作,实际上都是一次对整个文件仓库的完整备份
    • 4.分布式的版本控制系统出现了之后,解决了集中式版本控制系统的缺陷(单点故障造成系统瘫痪)
      • 1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
      • 2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
        在这里插入图片描述

    2.工作机制

    在这里插入图片描述

    2.1.区域划分

    在这里插入图片描述

    • 1.Git版本控制工具可以划分为三个区域
      • 1.工作区(workspace):项目代码存放本地磁盘的位置
      • 2.暂存区(Index / Stage):临时存放改动的代码,本质是一个文件(.git目录下的index文件),保存即将提交到本地库的信息
      • 3.本地库(local Repository):将暂存区中的代码提交到本地库,生成对应的历史版本(无法删除),下个版本基于上一个版本,所以无法删除中间的版本,其中HEAD指向最新放入仓库的版本
    • 2.远程库(Remote Repository):远程仓库,托管代码的服务器,将本地库代码推送到远程库(Push)

    2.2.工作流程

    在这里插入图片描述

    • 1.区域说明
      • 1.左侧为工作区
      • 2.右侧为版本库
      • 3.版本库中标记为index的区域是暂存区(stage/index)
      • 4.版本库中标记为master的是master分支所代表的目录树
      • 5.版本库中标记为HEAD的是指向master分支的一个游标
      • 6.版本库中标记为objects的是Git的对象库,位于.git/objects目录下,其中包含创建的各种对象及内容
    • 2.工作流程
      • 1.当对工作区中修改或新增的文件执行git add命令时,暂存区的目录树被更新同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引
      • 2.当对暂存区中的内容执行提交操作git commit命令时,暂存区的目录树写到版本库中,master分支会做相应的更新,即master指向的目录树就是提交时暂存区的目录树
      • 3.当对暂存区中的内容执行回滚操作git reset HEAD 命令
      • 3.当对版本库中的内容进行回滚 时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
      • 4.当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
      • 5.当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
      • 6.当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动
      • 7.我们使用 git clone 从现有 Git 仓库中拷贝项目
    • git clone
    • git clone
    • repo:Git 仓库。
    • directory:本地目录
    • 比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
    • $ git clone git://github.com/schacon/grit.git
    • 执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
    • 如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
    • $ git clone git://github.com/schacon/grit.git mygrit

    4.git忽略指定文件的提交

    • 1.首先在git管理的文件夹根目录下创建一个名为.gitignore的文件
    • 2.然后将需要忽略的文件都放在这里
    • 3.注意:这种方式对应已经提交到git上面的文件石无法奏效的
    • 4.例如在.gitignore文件添加到git之前,.project文件已经托管提交给git了,那后面在.gitignore这个文件里添加.project表示忽略这个文件也不行,git依然会提交
    • 1.忽略某个已经托管给git的文件,防止二次提交
    • 2.这种情况适用于,每个人修改了项目的配置,但是这个是临时的,只适用于自己本地的情况,不可提交给大家公用时,需要这么做
    # 执行命令将文件加入不提交队列
    git update-index --assume-unchanged 你的文件路径
    # 执行命令将文件取消加入不提交队列
    git update-index --no-assume-unchanged 你的文件路径
    
    • 1
    • 2
    • 3
    • 4

    5.git提交忽略已加入版本库的文件

    • 1.git rm --cached file
    • 当我们需要删除暂存区或分支上的文件,同时工作区 ‘不需要’ 这个文件,可以使用 ‘git rm’
    • 2.git rm file
    • 3.git commit -m ‘delete file’
    • 4.git push
    • 当我们需要删除暂存区或分支上的文件,但是本地 ‘需要’ 这个文件,只是 ‘不希望加入版本控制’,可以使用 ‘git rm --cached’
    • 1.git rm --cached file
    • 2.git commit -m ‘delete remote file’
    • 3.git push

    3.3.基础配置

    • 1.Git的设置一般使用git config命令
      • 1.显示当前Git的配置信息:git config --list
        在这里插入图片描述
      • 2.编辑Git配置文件信息
        • 1.git config -e: 针对当前仓库
        • 2.git config -e --global: 针对系统上所有仓库
        $ git config --global user.name "runoob" #只对当前仓库有效
        $ git config --global user.email test@runoob.com # 对所有仓库都有效
        
        • 1
        • 2

    3.代码托管中心

    • 1.代码托管中心是基于网络服务器的远程代码仓库,一般简称远程库
    • 2.局域网:GitLab
    • 3.互联网:GitHub(外网),Gitee码云(国内网址)

    4.Git安装步骤

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    • 1.注意需要安装到非中文并且没有空格的目录下
    • 2.安装后查看Git版本
      git --version
      
      • 1
      在这里插入图片描述

    5.Git命令

    5.1.设置用户签名

    • 1.git config --global user.name 用户名:设置用户签名
    • 2.git config --global user.email 邮箱:设置用户签名
      在这里插入图片描述
    • 3.验证签名文件(进入电脑的本地用户中,查看.gitconfig信息)
      在这里插入图片描述
    • 4.用户签名的作用:区分不同成员身份,成员的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交的来源,Git首次安装必须设置用户签名,否则无法提交代码
    • 5.注意:该设置用户签名和登录GitHub的账号没有任何关系

    5.2.初始化本地库

    • 1.基本语法
      git init
      
      • 1
    • 2.初始化:Git管理目录获取Git目录的管理权,且初始化后会在初始化的目录中生成隐藏的.git文件夹,项目的快照数据都存放在该文件夹中
      在这里插入图片描述
      在这里插入图片描述

    5.3.查看本地库状态

    • 1.基本语法
      git status
      
      • 1
    • 2.说明
      • 1.第一行:本地库在哪个分支
      • 2.第二行:还没有提交内容
      • 3.第三行:没有内容需要提交(红色表示还没有提交到暂存区)
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

    5.4.添加暂存区

    • 1.基本语法

      git add . //将所有文件都添加到暂存区
      git add *.c //将后缀为.c的文件添加到暂存区
      git add 文件名	// 将指定文件添加到暂存区
      
      • 1
      • 2
      • 3
    • 2.将工作区中的文件添加到在暂存区(绿色表示已经提交到暂存区)

      在这里插入图片描述

    5.5.删除暂存区中的文件

    • 1.基本语法
      git rm --cached 文件名
      
      • 1
    • 2.该删除只是删除了暂存区中文件,而没有删除工作区中的文件
      在这里插入图片描述

    5.6.提交本地库

    • 1.基本语法
      git commit -m "日志信息" 文件名
      //Linux系统中,commit信息使用单引号;Windows系统中,commit信息使用双引号
      
      • 1
      • 2
    • 2.将暂存区的文件提交到本地库
      在这里插入图片描述
    • 3.noting to commit,working tree clean表示暂存区没有东西需要提交
      在这里插入图片描述
    • 4.一行删除,一行添加,表示修改,先删除掉再添加进去
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    5.7.历史版本

    • 1.基本语法
      git reflog //查看版本信息
      git log //查看版本详细信息
      
      • 1
      • 2
      在这里插入图片描述
    5.7.1.查看历史记录
    • 1.基本语法
       git reflog
      
      • 1
    • 2.其中097e939和8d61690是7位简短版本号
      在这里插入图片描述
    5.7.2.查看日志
    • 1.基本语法
       git log
      
      • 1
    • 2.其中包括完全版本号,作者信息,日期和日志信息
      在这里插入图片描述
    5.7.3版本穿梭
    • 1.基本语法
       git reset --hard 版本号
      
      • 1
      在这里插入图片描述
    • 2.进入Git版本目录文件的HEAD文件,指针指向master,说明当前是在master分支上
      在这里插入图片描述
    • 3.打开msater文件,该版本号指向第二个此修改历史记录,说明当前是在master分支下的第二修改版本
      在这里插入图片描述
      在这里插入图片描述
    • 5.注意:Git切换版本,底层其实是移动的HEAD指针

    6.Git分支

    在这里插入图片描述

    6.1.分支原理

    • 1.版本控制过程中,同时推进多个任务,可以创建每个任务的单独分支
    • 2.使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行
    • 3.分支底层其实也是指针的引用
      在这里插入图片描述
    • 4.master是主线分支,从master复制一份到feature-blue上进行开发,开发完后,提交到master
    • 5.如果合并后导致问题,可以引入一个hot-fix(热修分支),把有问题的代码修改一下,如果没有问题再合并到master

    6.2.分支好处

    • 1.同时并行推进多个功能开发,提高开发效率
    • 2.各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可

    6.3.分支的操作

    • 1.git branch -a:查看所有分支(本地和远程)
    • 2.git branch:查看本地分支
    • 3.git branch -r:查看远程分支
    • 1.git branch -v:查看本地分支及最新的信息
    • 2.git branch 分支名:创建分支
    • 3.git chekout 分支名:切换分支
    • 4.git merge 分支名:把指定的分支合并到当前分支上
    6.3.1.查看分支
    • 1.基本语法
      git branch -v
      
      • 1
      在这里插入图片描述
    6.3.2.分支创建
    • 1.基本语法
      git branch 分支名
      
      • 1
      在这里插入图片描述
    6.3.3.分支切换及修改
    • 1.基本语法
      git checkout 分支名
      
      • 1
    • 说明:
      • 1.master,hot-fix其实都是指向具体版本记录的指针
      • 2.当前所在的分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针
      • 3.HEAD如果指向master,那么现在就在master分支上
      • 4.HEAD如果执行hotfix,那么现在就在hotfix分支上
      • 5.所以切换分支的本质就是移动HEAD指针
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    6.3.4.分支合并
    • 1.基本语法
      git merge 分支名
      
      • 1
      在这里插入图片描述
      在这里插入图片描述
    6.3.5.代码合并冲突解决
    • 1.合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改
    • 2.Git无法替我们决定使用哪一个,必须人为决定新代码内容
    • 3.如下:master分支和hot-fix分支同时修改了同一个文件的同一处代码
    • 4.查看状态(检测到有同一个文件的同一个位置有两处不同修改,产生冲突both modified)
    • 5.此时需要手动修改该冲突文件,然后提交到合并文件中
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    7.Git团队协作机制

    • 1.团队内协作
      在这里插入图片描述

    • 2.跨团队协作
      在这里插入图片描述

    • 3.fork(叉子):把所有代码作为一个分支复制过来

    8.Idea集成Git

    9.GitGub

    • 代码托管中心
    • 远程仓库操作
    • git remote -v:查看当前所有远程地址别名
    • git remote add 别名 远程地址:起别名
    • git push 别名 分支:推送本地分支上的内容到远程仓库
    • git clone 远程地址:将远程仓库的内容克隆到本地
    • git pull 远程库地址别名 远程分支名:将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
    1.创建远程仓库别名
    git remote -v 查看当前所有远程地址别名
    git remote add 别名 远程地址
    
    • 1
    • 2

    在这里插入图片描述

    2.推送本地分支到远程仓库

    git push 别名 分支
    
    • 1

    在这里插入图片描述

    • 注意需要认证,sign in即可
    3.拉取远程库到本地库

    在这里插入图片描述

    • 远程拉取的会自动同步到本地库,不需要再次提交到本地库

    克隆远程库到本地库Clone

    • 克隆代码是不需要登录账号的,因为创建时是公共的,读权限是公共的
      在这里插入图片描述
    • clone会做如下操作
    • 1.拉取代码
    • 2.初始化本地仓库
    • 3.创建别名
      在这里插入图片描述
    • 默认别名是origin
      在这里插入图片描述
    • 注意需要删除凭据管理
    • 还需要对运行提交的人员进行授权

    跨团队协作

    SSH免密登录

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 进入该文件
      在这里插入图片描述
    • 公钥和私钥
    • Idea集成GitHub

    GitLab(基于局域网的代码托管中心)

    1.简介

    • 1.GitLab是一个仓库管理系统的开源项目,其使用Git作为代码管理工具,并在此基础上搭建起来web服务
    • 2.GitLabGitHub一样都属于第三方基于Git开发的作品,免费且开源(基于MIT协议)
    • 3.Github可以在远程服务器上注册用户,任意提交代码,添加SSHKey等,而GitLab可以部署到自己的服务器,数据等一切信息都掌握在自己手上,适合团队内部协作开发,简单来说可以把GitLab看作个人版的GitHub

    2.安装

    • 1.参考Linux软件安装文章中Linux系统下安装GitLab

    3.创建组/用户/项目

    • 1.创建组
      • 1.使用管理员root创建组,组里面可以创建多个项目分支
      • 2.将不同的开发添加到组里面并设置权限,不同的组就是公司不同的开发项目或者服务模块
      • 3.不同的组添加不同的开发即可实现对开发设置权限的管理
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

    4.上传代码

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Gitee码云(国内版本的GitGub)

    • 码云创建远程库
    • Idea集成Gitee码云
    • 码云连接GitHub进行代码的复制和迁移
  • 相关阅读:
    无线蓝牙耳机哪款性价比高?蓝牙耳机性价比排行
    25、业务层标准开发(也就是service)
    混合 MPC:ABY 架构
    基于JAVA医院住院管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
    【LeetCode每日一题合集】2023.8.28-2023.9.3(到家的最少跳跃次数)
    VMware 系列:戴尔服务器配置(格式数据、RAID5、安装ESXI)以及相关问题
    大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现
    【Python零基础入门篇 · 5】:占位符和格式化输入输出、标识符和保留字
    【C++】并查集
    StreamNative 宣布 2300 万美元 A 轮融资,Prosperity7 Ventures 与华泰创新联合领投
  • 原文地址:https://blog.csdn.net/wu246051/article/details/126280531