Git


前言

文章内容输出来源:拉勾教育JAVA就业训练营


一、版本控制系统概述

1.1 开发中的实际场景

  • 场景一:代码备份
    小明负责的模块就要完成了,就在即将发布之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流
  • 场景二:代码还原【版本控制】
    这个项目中需要一个很复杂的功能,老王摸索了一个星期!终于有了眉目,可是这被改得面目全非的代码,已经回不到从前了。
  • 场景三:协同开发
    小刚和小强先后从文件服务器上下载了同一个文件:UserDao.java。小刚在UserDao.java文件中的第30行声明了一个方法,叫count(),先保存到了文件服务器上;小强在UserDao.java文件中的第30行声明了一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记忆中了
  • 场景四:追溯问题代码(编写人和编写时间)!
    老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个Bug调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是赵四、能能、老七 都不承认是自己干的!

1.2 版本控制系统

版本控制系统能追踪项目,从开始到结束的整个过程。对编程人员而言,版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。
软件版本控制系统的核心任务:查阅项目历史操作记录、实现协同开发。
常见的两种版本控制类型:

  • 集中式版本控制工具
    • 集中式版本控制工具,版本仓库是集中存放在中央服务器的,team里每个人工作时,从中央服务器下载代码。每个人个人修改后,提交到中央版本仓库。提交(commit)代码需要联网
      如:SVN
      在这里插入图片描述
  • 分布式版本控制工具
    • 分布式版本控制系统可以没有 “中央服务器”,每个人的电脑上都是一个完整的版本仓库,这样工作的时候,不需要联网。因为版本仓库就在你自己的电脑上。多人协作只需要各自修改,开发完成即可,推送给对方【联网】,推送的时候是将整个版本仓库推过去。
      如:Git
      在这里插入图片描述

1.3 Git 简介

Git — The stupid content tracker, 傻瓜内容跟踪器。Linus Torvalds 是这样介绍 Git 的。

  • Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目的版本管理。 Git是 Linus Torvalds。他是为了帮助管理 Linux 内核开发而开发的一个的版本控制软件。最后开源了。
    • 速度、简单的设计
    • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
    • 完全分布式
    • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

1.3.1 Git工作流程图

在这里插入图片描述
操作:

  • Clone:克隆,从远程仓库中克隆代码到本地仓库,第一次操作
  • Push:推送,代码完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
  • Pull:拉取,从远程库拉代码到本地库,自动进行合并(merge),最后放到工作区。
    在这里插入图片描述
    操作:
  • checkout:将本地仓库的内容检出到工作区
  • add:在提交前先将代码提交到暂存区
  • commit:提交到本地仓库

1.3.2 基本概念

  • 本地仓库: 在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联
  • 工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联
  • 暂存区:把修订的文件,从工作区经过add(添加)后与某一个仓库分支进行关联,只要进入缓存区的文件才能commit(提交)到本地仓库。
  • 远程仓库 : 在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、Gitee.com(码云)
  • 分支:代码存放在仓库,默认是主分支(master),可以在主分支基础上创建很多子分支,比如develop(开发)、bugfix(bug修复)等。
    一个文件夹包含.git隐藏目录(Git工作目录),说明此文件目录使用Git版本管理。
    .git隐藏目录中存储了很多配置信息、日志信息和文件版本信息、暂存区信息等。.Git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。
小结

Git分布式的版本控制系统

  1. Git解决那些问题:代码备份、还原;协同开发;多版本同时开发、追溯问题代码
  2. Git中的基本概念:
    本地仓库:存储所有版本代码
    工作区:编辑代码区
    暂存区:准备提交的代码都放这里
    远程仓库:用于团队之间共享代码【枢纽】
    分支:多个版本同时开发,master主分支,develop开发分支,test测试分支
  3. Git工作流程:
    远程仓库操作:
    1. clone(克隆):第一次从远程仓库下载代码
    2. pull(拉取):获取团队其他成员代码提交变动
    3. push(推送):完成后的代码上传到远程仓库
      本地仓库操作:
    4. checkout(检出):将本地仓库的内容检出到工作区
    5. add(添加):向暂存区添加代码,准备提交
    6. commit(提交):把暂存区的代码提交到本地仓库

二、Git的下载与安装

三、Git基本配置

  1. 安装完成 Git 后,正式使用git前,是需要进行一些全局设置的,如用户名、邮箱。
    设置的主要命令是 git config :
设置全局用户名
git config --global user.name "your name"  
设置邮箱
git config --global user.email "your email" 

其中, --global 指定为全局配置,不使用该参数,则为当前所在仓库配置。通过上面的命令设置的信息会保存在.gitconfig文件中

  1. 查看配置信息
查看配置信息
git config --list 

3.2 构建本地仓库

要使用Git对我们的代码进行版本控制,首先需要构建本地仓库
通常有两种方式:

  1. 在本地初始化一个Git仓库
  2. 从远程仓库克隆一个仓库 (远程仓库演示)

3.2.1 初始化本地Git仓库

1)在电脑的任意位置创建一个空目录(例如local_repo1)作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash窗口
3)执行命令Git init如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功

3.3 本地仓库的操作

3.3.1 创建 Git 版本库

在本地创建 Git 版本库,需要使用 git init 命令。
首先,你需要新建一个存放版本库的目录,然后进入到该目录所在路径,然后执行:

git init

然后查看目录结构中,就可以看到包含有 .git 子目录,这就说明创建版本库成功了

3.3.2 查看当前文件状态

#命令形式:git status [-s] 
#更简洁的信息命令形式:git status -s 

3.3.3 将文件添加(修改)到版本库

要将一个文件纳入到版本库管理,首先要将其添加到暂存区,然后才能提交到仓库中。
将文件添加到暂存区,使用的是 git add :

添加单个文件到暂存区
git add Readme.txt 
将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
git add . 
  1. 将暂存区中的文件,提交到仓库中。需要使用 git commit :
如果暂存区有文件,则将其中的文件提交到仓库
git commit 
带评论提交,用于说明提交内容、变更、作用等
git commit -m 'your comments'  

3.3.4 查看提交历史记录

git log   # 显示所有提交的历史记录
git log --pretty=oneline   # 单行显示提交历史记录的内容

3.3.5 版本回退

会退到 commit_id 指定的提交版本
git reset --hard 'commit_id' 

3.3.6 删除文件

git rm Readme.md // 删除已经被提交过的 Readme.md

3.3.7 添加文件至忽略列表

  • 一般在工作区中,并不是所有文件都需要纳入版本控制的
    这种不需要进行版本控制的通常都是些自动生成的文件。比如:idea工程文件(springmvc.iml)、编译后文件target、系统上传的图片img。
  • -在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件。

四、分支管理

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
-在开发中,一般有如下分支使用原则与流程:

  • master (生产) 分支
    线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
  • test(测试)分支
    从master创建的分支,一般作为测试部门的测试分支,进行预发测试。
    测试完成后,需要合并到master分支,进行上线,中小规模项目可省略此分支;
  • develop(开发)分支
    从test创建分支,如果开发没有test分支,是从master创建的分支,一般作为开发部门的主要开发分支
    如果没有其他并行开发不同期上线要求,都可以在此版本进行开发
    阶段开发完成后,需要是合并到test分支继续测试,如果没有test分支,可直接合并到master分支。
  • hotfix(bugfix)分支,
    从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。

查看分支
查看分支使用 git branch :

 查看本地分支信息
git branch    
 查看相对详细的本地分支信息
git branch -v  
 查看包括远程仓库在内的分支信息
git branch -av 

创建分支
当我们要修复一个 Bug,或者开发一个新特性,甚至是在初学的时候怕打乱原来的代码,都可以新建一个分支来避免对原来代码的影响。

 新建一个名称为 dev 的分支
git branch dev

切换分支

 新建完 dev 分支以后,通过该命令切换到 dev 分支
git checkout dev

创建并切换分支

 新建 dev 分支,并切换到该分支上
git checkout -b dev

合并分支

 切换回 master 分支
git checkout master 
 将 dev 分钟中的修改合并回 master 分支
git merge dev

删除分支

 删除 dev 分支
git branch -d dev

五、Git远程仓库

5.1 添加远程库

现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份。
那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务平台来实现,其中比较常用的有GitHub、码云等。

  • GitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持
  • Git 作为唯一的版本仓库格式进行托管,故名GitHub。
    码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快

5.2 注册GitHub

5.3 创建远程仓库

在这里插入图片描述

5.4 同步远程仓库

Github支持两种同步方式“https”和“ssh”。如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。而且如果是公司配置的私有git服务器一般不提供https方式访问,所以我们要来着重演示“ssh”方式。

5.4.1 ssh协议

5.4.1.1 什么是ssh?

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
在这里插入图片描述

5.4.1.2 ssh密钥生成

在windows下我们可以使用 Git Bash.exe来生成密钥,右键菜单打开Git Bash

git bash 执行命令,生成公钥和私钥
ssh-keygen -t rsa

执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:
在这里插入图片描述

5.4.2 ssh密钥配置

密钥生成后需要在github上配置密钥,本地才可以顺利访问。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、远程仓库的操作

6.1查看远程仓库

如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字

命令形式:git remote -v
origin ——仓库服务器的默认名称

6.2 添加远程仓库

如果已经有了一个本地仓库,,然后打算将它发布到远程,供其他人协作。那么使用:

# 为本地仓库添加远程仓库
git remote add origin your_remote_git_repo

6.3 推送本地的内容到远程仓库

当本地仓库中,代码完成提交,就需要将代码等推送到远程仓库,这样其他协作人员可以从远程仓库同步内容。

第一次推送时使用,可以简化后面的推送或者拉取命令使用
git push -u origin master
将本地 master 分支推送到 origin 远程分支
git push origin master

注意: git push -u origin master ,第一次使用时,带上 -u 参数,在将本地的 master 分支推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
注意
推送之前,需要先pull远端仓库,如果发现提交版本不一致,出现错误

6.4 从远程仓库获取最新内容

  • 在多人协作过程中,当自己完成了本地仓库中的提交,想要向远程仓库推送前,需要先获取到远程仓库的最新内容。
  • 可以通过 git fetch 和 git pull 来获取远程仓库的内容。
git fetch origin master  
git pull origin master

git fetch 和 git pull 之间的区别:

  • git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。
  • git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge 。

6.4 移除无效的远程仓库

如果因为一些原因想要移除一个远程仓库

 命令形式: git remote rm <shortname>

注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

6.5 从远程仓库克隆

如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
如果你本地没有仓库,希望从已有的远程仓库上复制一份代码,那么你需要 git clone 。

通过 https 协议,克隆 Github 上 git 仓库的源码
git clone https://github.com/lagou-zimu/repo1.git
通过 ssh 协议,克隆 Github 上 git 仓库的源码
git clone git@github.com:lagou-zimu/repo1.git

6.6 从远程仓库中拉取

拉取 pull

拉取 命令形式:git pull【远程仓库名称】【分支名称】

6.7 解决合并冲突

1.先拉取代码
在这里插入图片描述

2.然后打开代码解决冲突
在这里插入图片描述

3.再提交
在这里插入图片描述

小结:
远程仓库操作常用命令:

git remote #查看所有远程仓库名称
git remote -v #查看远程仓库缩略信息
git push origin master # 将本地仓库代码推送到远程仓库
git clone https://github.com/lagou-zimu/repo1.git # 克隆远程仓库代码到本地
git pull origin master # 拉取远程仓库代码到本地:(fetch+merge)

七、在Idea中使用Git

4.1 在Idea中配置Git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到Git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的Git选项:
在这里插入图片描述

4.2 开发中idea的Git常见操作

4.2.1 初始化并提交项目到远程仓库 【项目leader操作】

执行步骤:

  1. 在GitHub/码云中创建远程仓库
  2. 将maven工程交给Git管理
  3. 配置忽略文件
  4. 提交到本地仓库
  5. 推送到远程仓库

执行过程:
6. 在码云中创建远程仓库
在这里插入图片描述
7. 将maven工程交给Git管理
在这里插入图片描述
8. 配置忽略文件
在这里插入图片描述
9. 提交到本地仓库
在这里插入图片描述
在这里插入图片描述
10. 推送到远程仓库
在这里插入图片描述
在这里插入图片描述

4.2.2 克隆远程仓库到本地【开发人员】

  1. 从远程仓库克隆
    在这里插入图片描述
    在这里插入图片描述

4.2.3 本地仓库常规操作

1、新增文件
在ssm_dao模块中,新增一个GitMapper接口,新文件状态红色,未进入暂存区
在这里插入图片描述
加入git之后,红色变绿色,已经进入暂存区:
在这里插入图片描述
2、编辑文件
在ssm_dao模块中,修改GitMapper接口,文件变蓝色
正常编辑的文件默认放在暂存区,不需要再添加到暂存区

在这里插入图片描述
3、重置文件到修改前
比如修订了某一文件,需要重置到修改文件之前的状态,选择文件,右键菜单:选择Git—>Rollback
在这里插入图片描述
重置后,文件颜色自动消失,说明已重置到修改之前的状态。
在这里插入图片描述
4、提交到本地仓库

  • 提交当前文件
    在这里插入图片描述

4.2.4 本地仓库推送Push至远程仓库

操作步骤:

  1. 推送前一定要先拉取远程仓库对应分支
  2. 如果有冲突,先解决冲突,并提交到本地仓库
  3. 推送当前分支到远程仓库

操作过程:
4. 推送前一定要先拉取远程仓库对应分支
在这里插入图片描述

  1. 如果有冲突,先解决冲突,并提交到本地仓库
    在这里插入图片描述
    在这里插入图片描述
  2. 推送当前分支到远程仓库
    在这里插入图片描述

4.2.5 分支操作

操作步骤:

  1. 创建分支
  2. 切换分支执行操作
  3. 执行合并操作,master合并dev

操作过程:
4. 创建分支
在这里插入图片描述
在这里插入图片描述
5. 切换分支执行操作
在这里插入图片描述
6. 完成合并推送到远程仓库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.6 傻瓜追踪器:版本比较

对代码修改后,可以点击对比按钮,对比差异
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值