29.Git版本控制工具

1.Git简介

Git是一开源的分布式版本控制系统,提供了存储代码、管理版本历史、分支和合并等功能。

  • 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程中的每个版本,记录每个版本的修改历史、版本号和发布日期等信息,以便更好地管理代码和文档,并帮助开发人员更好地协作和开发软件。

  • 通过版本控制,开发人员可以随时回滚到之前的稳定版本,恢复错误或进行分支开发等操作,以便更好地管理软件开发过程中的变化和风险。

  • 版本控制通常与版本控制系统(Version Control System,VCS)相关联,如Git、SVN等。这些系统提供了存储代码、管理版本历史、分支和合并等功能,帮助开发人员更好地协作和管理软件开发过程中的版本变化。

2.版本控制的发展历史

早期的版本控制系统是本地化管理的,采用某种简单的数据库记录文件的历次更新差异。但随着合作开发和协调工作的需要,集中式的版本控制系统(CVCS)出现了。

不同的开发人员通过客户端连接到集中管理的服务器上,提交或读取最新的文件,比如常用的SVN就是这种工作模式。

2.1 集中化的版本控制系统

集中化版本控制系统,是通过一个集中管理的中央服务器,来保存所有文件修改的历史版本,而协同开发者通过客户端连接到这台服务器,从服务器上同步更新或上传自己的修改。

图片

  • 在集中式的版本控制系统中,管理员可以轻松管控每个开发者的权限,并且维护成本低。

  • 但是这种架构下集中式服务器存在明显的单点故障,如果版本控制服务器宕机,则无法提供服务。

  • 如果服务器数据丢失并且无法恢复,那么整个项目的数据和变更历史也随之丢失。

2.2 分布式版本控制系统

为解决以上问题出现了分布式版本控制系统(DVCS),其基本设计理念是客户端不仅仅提取最新版本的快照,而是把代码仓库完整的镜像下来,相当于在本地有一份完整的数据拷贝。这样,当CVS服务器故障时,通过任何一个本地的镜像仓库就可以恢复数据。同时还可以和不同的远端代码仓库进行交互,设置不同的协作流程。

图片

  • 用户在本地就可以查看所有的历史版本信息,当用户进行修改提交文件的时候,需要进行远程更新或提交。

  • 用户即使离线时页可以进行本地提交,push推送到远程服务器才需要联网。

  • 每个用户都保存了历史版本,所以只要有一个用户设备没问题,就可以恢复数据。

3.Git的相关概念

3.1 工作区域

工作区域说明
Workspace用户电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。
Index/Stage暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放未提交的改动。比如:执行git add,这些改动就添加到这个区域。
Repository本地仓库,是一个存放在本地的版本库。
Remote远程仓库,就是远程数据交换的仓库。比如:github,码云等代码托管平台所提供的仓库。

Git的工作流程如下:

1)从远程仓库中克隆代码到本地仓库

2)从本地仓库中checkout代码然后进行代码修改

3)在提交前先将代码添加到暂存区

4)将暂存区的代码提交到本地仓库,本地仓库中保存修改的各个历史版本

5)修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

image-20230726154240620

4.Git下载与安装

Git - Downloadshttps://git-scm.com/download

5.环境配置

当安装Git后首先要做的事情是设置用户名称和email地址,每次Git提交都会使用该用户信息。

5.1 设置用户信息

git config --global user.name "han"

git config --global user.email "han@woniu.com"

5.2 查看配置信息

git config --list

git config user.name

通过上面的命令设置的信息会保存在~/.gitconfig文件中

6.初始化仓库

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

        在本地初始化一个Git仓库

        从远程仓库克隆

6.1 在本地初始化一个Git仓库

git init

6.2 从远程仓库克隆

        可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地。

        命令形式为:git clone 远程Git仓库地址

git clone https://gitee.com/project.git

        切换进入远程仓库的账号

git config --system --unset credential.helper        

7. 本地仓库的操作

         首先我们在工作区新建一个Hello.java文件。

7.1 加入暂存区

git add Hello.java

7.2 查看文件的状态

git status

git status -s #输出简介信息 

image-20230726161101476

Git中文件有4种状态:

根据一个文件是否已加入版本控制,可以把文件状态分为:

        Tracked已跟踪(被纳入版本控制),而tracked(已跟踪)又包括三种工作状态:

                Unmodified 未修改状态

                Modified 已修改状态

                Staged 已暂存状态

        Untracked未跟踪(未被纳入版本控制)

7.3 移除暂存区

git reset Hello.java # 将暂存区的文件取消暂存

7.4 提交到本地仓库

在提交到本地仓库之前,要先将文件添加到暂存区,然后在commit提交到本地仓库 。

git commit -m "初始化提交Hello.java" hello.java           # 将暂存区的文件提交到本地仓库

7.5 直接提交到本地仓库

        注意:commit -am 只对修改和删除有效,对于新增的文件还是先要执行add操作。

git commit -am "提交修改"         # 不经过暂存区,直接提交本地仓库

7.6 删除文件

git rm Hello.java                                       # 删除文件

7.7 提交删除

git commit -m "delete commit"                           # 将删除的文件提交本地仓库

7.8 忽略列表

        一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

7.9 查看日志

git log

  • commit(提交)比较多,git log 的内容在一页显示不完整,满屏放不下的时候,就会显示冒号。

  • 回车(往下滚一行)、空格(往下滚一页)可以继续查看剩余内容。

  • 退出:英文状态下 按 q 可以退出git log 状态。

7.10 回滚操作

git log                   //查看提交历史,找出要回滚到的commit-id

git reset --hard commit-id //回滚到commit-id

git reset --hard HEAD~1   //将最近1次的提交回滚  

8.远程仓库的操作

8.1 从远程仓库克隆

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

 git clone https://gitee.com/woniuxy2021/myproject.git     # 从远程仓库克隆到本地仓库

8.2 添加远程仓库

        运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写。

git remote add origin https://gitee.com/p.git # 将本地仓添加一个新的远程Git仓库(关联)

8.3 查看远程仓库

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

git remote                                            # 查看远程仓库
git remote show origin                                # 查看远程仓库输出更详细的信息

8.4 推送到远程仓库

        推送代码到远程仓库的分支

git push origin master     # 将本地仓库的代码推送到远程仓库

8.5 拉取

        git pull 是从远程仓库获取最新版本并merge到本地仓库。

git pull origin master # 从远程仓库中拉取代码(自动合并)

        注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数—allow-unrelated-histories

git pull origin master --allow-unrelated-histories //加上后面这个选项允许不相关历史提交

8.6 移除远程仓库

        如果因为一些原因想要移除一个远程仓库 ,可以使用 git remote rm命令

git remote rm origin # 将本地仓库跟远程仓库的关联移除

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

9.分支操作

        Git一般都是存在多个分支的,比如:开发分支,回归测试分支以及主干分支等。

        使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。开发人员在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

        git init 命令会默认创建master分支。

9.1 新建分支

git checkout -b dev 新建一个分支,并且切换到新的分支dev

git branch dev 新建一个分支,但是仍停留在原来分支

9.2 查看分支

 git branch   查看本地所有的分支

git branch -r 查看所有远程的分支

git branch -a 查看所有远程分支和本地分支

9.3 切换分支

        注意:git在切换分支之前要确保当前分支没有未提交的修改,将当前分支内容进行commit之后再切换到其他分支。

git checkout dev 切换到dev分支

9.4 推送到远程仓库分支

 git push origin dev   # 推送至远程仓库分支

9.5 合并分支

        在dev分支上进行开发完成之后,需要把dev开发分支上的代码合并到master主分支上。

        首先切换到master分支

git checkout master

        将dev分支合并到master分支

git merge dev

        将master分支推送到远程仓库

git push origin master

9.6 删除分支

git branch -D <branchname>  删除本地branchname分支

10.IEDA集成Git

10.1 配置Git的路径

image-20230726224542887

10.2 创建工程并添加到Git

image-20230726224808403

image-20230726224858675

image-20230726231923421

10.3 将文件添加到暂存区

10.3.1 添加忽略列表

# .idea目录下面所有的文件
.idea/
# 忽略指定文件
git_test.iml
# 忽略编译后的文件
target/

10.3.2 添加到暂存区

image-20230726232522221

10.3.3 提交文件

image-20230726232628055

image-20230726232832241

10.5 将代码推送到远程仓库

image-20230726233039107

因为是新建的本地仓库,推送到远程仓库的时候,需要定义远程仓库。

image-20230726233146280

image-20230726233320974

image-20230726233757914

10.5 从远程仓库克隆工程到本地

image-20230726234141552

10.6 代码的推送/拉取

A开发者端:

(1)创建Hello.java

(2)添加、提交、推送

B开发者端:

(1)拉取代码

(2)修改代码、添加、提交、推送

(3)A开发者端从远程仓库更新代码

10.7 创建分支并切换分支

image-20230727000800124

image-20230727000832621

10.8 推送分支到远程仓库

        在dev分支上开发代码,并推送到远程仓库。

image-20230727001144366

image-20230727001025836

10.9 合并分支

image-20230727001650729

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值