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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/48852.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双重for循环优化

项目中有段代码逻辑是个双重for循环&#xff0c;发现数据量大的时候&#xff0c;直接导致数据接口响应超时&#xff0c;这里记录下不断优化的过程&#xff0c;算是抛砖引玉吧~ Talk is cheap,show me your code&#xff01; 双重for循环优化 1、数据准备2、原始双重for循环3、…

如何利用Requestly提升前端开发与测试的效率

痛点 B站最牛的Python接口自动化测试进阶教程合集&#xff08;真实企业项目实战&#xff09; 前端测试 在进行前端页面开发或者测试的时候&#xff0c;我们会遇到这一类场景&#xff1a; 在开发阶段&#xff0c;前端想通过调用真实的接口返回响应在开发或者生产阶段需要验证前…

Vue 中通用的 css 列表入场动画效果

css 代码 .gradientAnimation {animation-name: gradient;animation-duration: 0.85s;animation-fill-mode: forwards;opacity: 0; }/* 不带前缀的放到最后 */ keyframes gradient {0% {opacity: 0;transform: translate(-100px, 0px);}100% {opacity: 1;transform: translate…

算法38:反转链表

一、需求 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例3&#xff…

MSFCS互相联动

MSF&CS互相联动 1. 前言2. CS联动MSF2.1. 案例测试2.1.1. CS设置联动监听器2.1.2. CS设置联动MSF会话2.1.3. MSF设置监听 3. MSF联动CS3.1. 案例测试3.1.1. MSF生成木马3.1.2. 设置监听3.1.3. CS设置监听3.1.4. MSF转移会话3.1.5. 查看上线 4. 其它 1. 前言 在日常渗透测试…

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 &#xff0c; 对于训练营的同学实践此文档依赖于基础环境配置文档&#xff0c; 运行K8s集群并配置NFS存储。实际上只要有个K8s集…

VMPWN的入门级别题目详解(二)

实验四 VMPWN4 题目简介 这道题应该算是虚拟机保护的一个变种&#xff0c;是一个解释器类型的程序&#xff0c;何为解释器&#xff1f;解释器是一种计算机程序&#xff0c;用于解释和执行源代码。解释器可以理解源代码中的语法和语义&#xff0c;并将其转换为计算机可以执行的…

史上最强,Python自动化测试框架整理,搭建框架看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是测试框架呢…

【ruby on rails】M1遇到的一些安装问题

1. homebrew位置变了 原来的Cellar Homebrew Caskroom 都是在 /usr/local/下面 M1在/opt/homebrew下面 2. 装ruby M1电脑安装ruby&#xff0c;装不上的问题 RUBY_CFLAGS"-w" rbenv install 2.7.43. 装puma报错 gem install puma -v 5.5.2 -- --with-openssl-dir…

兵兵数码:网络机顶盒哪个好?2023最新网络机顶盒排名

网络机顶盒让电视机重生&#xff0c;解决卡顿、资源少、广告多等问题&#xff0c;我们每年都会进行网络机顶盒测评&#xff0c;今年已经测评过17款&#xff0c;通过多角度对比筛选了五款表现最佳的产品整理成网络机顶盒排名&#xff0c;近期想买网络机顶盒不知道网络机顶盒哪个…

Linux学习之自定义函数

函数是把一些重复使用的命令封装成一个集合&#xff0c;之后可以使用函数名调用。 定义函数的格式如下&#xff1a; function 函数名() {指令集&#xff08;若干条语句&#xff09; return n }要是直接在Shell中直接定义函数&#xff0c;那么直接在Shell中直接使用函数名 参数…

matlab BP神经网络对iris数据集进行分类

iris数据集 本文所用数据集&#x1f449;&#x1f449;&#x1f449;iris分类数据集 1.数据预处理 %% 1.数据预处理 oridatareadtable(Iris.xls,Sheet,Sheet1); Xtable2array(oridata(:,(1:4))); % X转化为array类型 Ytable2array(oridata(:,5)); % Y因为包含中文字符&…

在Mac系统下搭建Selenium环境并驱动Chrome浏览器

本文带领那些使用Mac的童鞋们实现Selenium驱动Chrome浏览器&#xff0c;虽然会有坑&#xff0c;但是我们可以凭借敏捷的身手躲过。下面就开始吧&#xff1a; 安装selenium 打开终端 ->pip安装&#xff08;安装命令&#xff1a;pip3 install selenium&#xff09; 安装浏览…

iperf3 编译安装及网讯WX1860千兆网口测试

iperf3 编译安装及网讯1860千兆网口测试 编译安装 安装包下载地址:https://github.com/esnet/iperf/archive/refs/tags/3.8.tar.gz 将安装包iperf-3.8.tar.gz拷贝测试系统盘桌面,使用如下命令进行编译安装: tar zxvf iperf-3.8.tar.gz cd iperf-3.8 ./configure make s…

vue中通过JavaScript实现web端鼠标横向滑动触控板滑动效果-demo

JavaScript实现web端鼠标横向滑动&触控板滑动效果 支持鼠标拖动滑动&触控板滑动效果 web端实现滑动&#xff0c;就是对鼠标按下、鼠标松开、鼠标移动事件进行监听 效果图 代码 结构代码 <template><div class"swiper"><div class"co…

【论文阅读】通过解缠绕表示学习提升领域泛化能力用于主题感知的作文评分

摘要 本文工作聚焦于从领域泛化的视角提升AES模型的泛化能力&#xff0c;在该情况下&#xff0c;目标主题的数据在训练时不能被获得。本文提出了一个主题感知的神经AES模型&#xff08;PANN&#xff09;来抽取用于作文评分的综合的表示&#xff0c;包括主题无关&#xff08;pr…

实时云渲染技术:VR虚拟现实应用的关键节点

近年来&#xff0c;虚拟现实&#xff08;Virtual Reality, VR&#xff09;技术在市场上的应用越来越广泛&#xff0c;虚拟现实已成为一个热门的科技话题。相关数据显示&#xff0c;2019年至2021年&#xff0c;我国虚拟现实市场规模不断扩大&#xff0c;从2019年的282.8亿元增长…

(css)AI智能问答页面布局

(css)AI智能问答页面布局 效果&#xff1a; html <!-- AI框 --><div class"chat-top"><div class"chat-main" ref"chatList"><div v-if"!chatList.length" class"no-message"><span>欢迎使…

特定Adreno GPU的Android设备发生冻屏问题

1&#xff09;特定Adreno GPU的Android设备发生冻屏问题 ​2&#xff09;Unity版本升级后&#xff0c;iOS加载UnityFramework bundle闪退 3&#xff09;关于RectTransfrom.rect在屏幕空间中表示的相关问题 4&#xff09;Unity Mesh泄露问题 这是第345篇UWA技术知识分享的推送&a…

【每日一题】2050. 并行课程 III

【每日一题】2050. 并行课程 III 2050. 并行课程 III题目描述解题思路 2050. 并行课程 III 题目描述 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCour…
最新文章