Git分布式版本控制工具

Git分布式版本控制工具

一、概述

1.1开发中的实际场景

  • 备份
  • 代码还原
  • 协同开发
  • 追溯问题代码的编写人和编写时间

1.2版本控制器的方式

  • 集中式版本控制工具

    版本库是集中存放在中央服务器的,团队里每个人工作时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。

    举例:SVN和CVS

  • 分布式版本控制工具

    分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你的电脑上。多人协作只需要各自修改推送给对方,就能互相看到对方的修改了。

    距离:Git

1.3 SVN

1.4 Git

  • 速度快
  • 设计简单
  • 对非线性开发模式的强力支持(运行成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)

1.5 Git工作流程图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. clone(克隆):从远程仓库中克隆代码到本地仓库
  2. checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加):在提交前先将代码提交到暂存区
  4. commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. pull(拉取):从远程仓库拉取到本地仓库,自动进行合并(merge),然后放到工作区
  6. fetch(抓取):从远程仓库抓取到本地仓库,不进行任何的合并动作,一般操作比较少
  7. push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

二、Git常用命令

2.1基础操作指令

Git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

  • 工作区->暂存区:git add 单个文件名|通配符

    • 将所有修改加入暂存区:git add .
  • 暂存区->本地仓库:git commit -m "注释内容"

  • 查看修改的状态:git status

  • 查看提交日志:git log

  • 版本回退

    • 作用:版本切换
    • 命令形式:git reset --hard commitID
      • commitID可以使用git-loggit log 指令查看
    • 如何查看已经删除的记录?
      • git reflog
      • 这个指令可以看到已经删除的提交记录
  • 添加文件至忽略列表

    一般我们总会有些文件无需纳入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
    

2.2分支

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

  • 查看本地分支:git branch

  • 创建本地分支:git branch 分支名

  • 切换分支:git checkout 分支名

    • 创建并切换分支:git checkout -b 分支名
  • 合并分支:git merge 分支名称

  • 删除分支

    不能删除当前分支,只能删除其他分支

    • 删除b1分支时,需要做各种检查:git branch -d b1
    • 不做任何检查,强制删除:git branch -D b1
  • 解决冲突

    当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

    1. 处理文件中冲突的地方
    2. 将解决完冲突的文件加入暂存区(add)
    3. 提交到仓库(commit)

  • 开发中分支使用原则与流程

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

    在开发中,一般有如下分支使用原则与流程:

    • master(生产)分支

      线上分支,主分支,中小规模项目作为线上运行的应用对应的分支。

    • develop(开发)分支

      是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要合并到master分支,准备上线。

    • feature/xxxx分支

      从develop创建的分支,一般都是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。

    • hotfix/xxxx分支

      从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。

    • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习

###########################创建并切换到dev01分支,在dev01分支提交
# [master]创建分支dev01
git branch dev01
# [master]切换到dev01
git checkout dev01
# [dev01]创建文件file02.txt# [dev01]将修改加入暂存区并提交到仓库,提交记录内容为:add file02 on dev
git add .
git commit -m 'add file02 on dev'
# [dev01]以精简的方式显示提交记录
git-log
###########################切换到master分支,将dev01合并到master分支
# [dev01]切换到master分支
git checkout master
# [master]合并dev01到master分支
git merge dev01
# [master]以精简的方式显示提交记录
git-log
# [master]查看文件变化(目录下也出现了file02.txt)##########################删除dev01分支
# [master]删除dev01分支
git branch -d dev01
# [master]以精简的方式显示提交记录
git-log

三、Git远程仓库

3.1创建远程仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2配置SSH公钥

  • 生成SSH公钥
    • ssh-keygen -t rsa
    • 不断回车
      • 如果公钥已经存在,则自动覆盖
  • Gitee设置账户公钥
    • 获取公钥

      • cat ~/.ssh/id_rsa.pub
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 验证配置是否成功

      • ssh -T git@gitee.com

3.3操作远程仓库

添加远程仓库

此操作是先初始化本地仓库,然后与已创建的远程仓库进行对接。

  • 命令:git remote add <远端名称> <仓库路径>
    • 远端名称:默认是origin,取决于远端服务器设置
    • 仓库路径,从远端服务器获取此URL
  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看远程仓库

  • 命令:git remote
  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推送远程仓库

  • 命令:git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]]

    • 如果远端分支名和本地分支名称相同,则可以只写本地分支

      • git push origin master
    • -f 表示强制覆盖

    • --set-upstream推送到远端的同时并且建立起和远端分支的关联关系。

      • git push --set-upstream origin master
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。

      • git push将master分支推送到已关联的远端分支。

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本地分支与远程分支的关联关系

  • 查看关联关系我们可以使用git branch -vv命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地。

  • 命令:git clone <仓库路径> [本地目录]

    • 本地目录可以省略,会自动生成一个目录

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从远程仓库中抓取和拉取

远程仓库和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取命令:git fetch [remote name] [branch name]
    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支
  • 拉取命令:git pull [remote name] [branch]
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支
  1. 在test01这个本地仓库进行一次提交并推送到远程仓库

  1. 在另一个仓库将远程提交的代码拉取到本地仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。

A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在B用户拉取代码时,因为A、B用户同一段时间修改了同一文件的相同位置代码,故会发生合并冲突。

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同

练习:远程仓库操作

##########################1-将本地仓库推送到远程仓库
# 完成4.1、4.2、4.3、4.4的操作# [git_test01]添加远程仓库
git remote add origin git@gitee.com/**/**.git
# [git_test01]将master分支推送到远程仓库,并与远程仓库的master分支绑定关联关系
git push --set-upstream origin master
###########################2-将远程仓库克隆到本地
# 将远程仓库克隆到本地git_test02目录下
git clone git@gitee.com/**/**.git git_test02
# [git_test02]以精简的方式显示提交记录
git-log
###########################3-将本地修改推送到远程仓库
# [git_test01]创建文件file03.txt# [git_test01]将修改加入暂存区并提交到仓库,提交记录内容为:add file03
git add .
git commit -m 'add file03'
# [git_test01]将master分支的修改推送到远程仓库
git push origin master
###########################4-将远程仓库的修改更新到本地
# [git_test02]将远程仓库修改再拉取到本地
git pull
# 以精简的方式显示提交记录
git-log
# 查看文件变化(目录下也出现了file03.txt)

四、在IDEA中使用Git

4.1在IDEA中配置Git

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.2在IDEA中操作Git

1.创建项目远程仓库

2.初始化本地仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.设置远程仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.提交到本地仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.推送到远程仓库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.克隆远程仓库到本地

7.解决冲突

  1. 执行merge或pull操作时,可能发生冲突

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 冲突解决后加入暂存区

  1. 提交到本地仓库

  2. 推送到远程仓库

8.创建分支

  • 最常规的方式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 最强大的方式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.切换分支及其他分支相关操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.3IDEA常用GIT操作入口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.4场景分析

  1. 由组长,基于本项目创建本地仓库;创建远程仓库,推送项目到远程仓库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 每一位组员从远程仓库克隆项目到idea中,这样每位组员自己电脑上就有了一个工作副本,可以正式的开始开发了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 组员A修改工作区,再推送到远程仓库。组员B可以直接从远程仓库获取最新的代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 组员A和组员B修改了同一个文件的同一行,提交到本地没有问题,但是推送到远程仓库时,后一个推送操作就会失败。

    解决办法:需要先获取远程仓库的代码到本地仓库,编辑冲突,提交并推送代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

附:

几条铁令

  1. 切换分支前先提交本地的修改
  2. 代码及时提交,提交过了就不会丢
  3. 遇到任何问题都不要删除文件目录

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu编译安装colmap遇到的几个问题以及解决

总体安装过程已经很明白了&#xff0c;写的人很多了&#xff0c;我就不赘述了&#xff0c;可以参考这里或者其他博客。我主要记录几个我遇到的问题以及解决方法。 1、cmake报错&#xff1a;No CMAKE_CUDA_COMPILER could be found. 这个原因是没找到cuda和nvcc目录&#xff0…

解决Opencv dnn模块无法使用onnx模型的问题(将onnx的动态输入改成静态)

一、问题来源 最近做人脸识别项目&#xff0c;想只用OpenCV自带的人脸检测和识别模块实现&#xff0c;使用OpenCV传统方法&#xff1a;Haar级联分类器人脸检测LBPH算法人脸识别的教程已经有了&#xff0c;于是想着用OpenCV中的dnn模块来实现&#xff0c;dnn实现人脸检测也有&a…

Fisher辨别分析

问题要求 在UCI数据集上的Iris和Sonar数据上验证算法的有效性。训练和测试样本有三种方式&#xff08;三选一&#xff09;进行划分&#xff1a; &#xff08;一&#xff09; 将数据随机分训练和测试&#xff0c;多次平均求结果 &#xff08;二&#xff09;K折交叉验证 &…

【苍穹外卖 | 项目日记】第三天

前言&#xff1a; 今天状态不错&#xff0c;kuku就是写接口&#xff0c;很舒服 目录 前言&#xff1a; 今日完结任务&#xff1a; 今日收获&#xff1a; 杂项知识点&#xff1a; 总结&#xff1a; 今日完结任务&#xff1a; 实现了新增菜品接口实现了菜品分页查询接口实现…

如何基于先进视频技术,构建互联网视频监控安全管理平台解决方案

一、建设思路 依托互联网&#xff0c;建设一朵云&#xff0c;实现各类二三类视频资源统一接入&#xff0c;实现天网最后100米、10米、1米的全域覆盖。 依托人工智能与互联网技术&#xff0c;拓展视频资源在政府、社会面等多领域的全面应用&#xff1b;建设与运营模式并存&…

软件测试工具有什么作用?有哪些好用的测试工具推荐?

软件测试工具是现代软件测试中不可或缺的重要组成部分&#xff0c;指的是一系列在软件开发过程中使用的工具&#xff0c;用于帮助测试人员进行测试活动&#xff0c;提高测试效率&#xff0c;减少测试成本。选择并使用合适的软件测试工具&#xff0c;可提高软件质量和效率。 一…

WebRTC 系列(四、多人通话,H5、Android、iOS)

WebRTC 系列&#xff08;三、点对点通话&#xff0c;H5、Android、iOS&#xff09; 上一篇博客中&#xff0c;我们已经实现了点对点通话&#xff0c;即一对一通话&#xff0c;这一次就接着实现多人通话。多人通话的实现方式呢也有好几种方案&#xff0c;这里我简单介绍两种方案…

应用在SMPS中的GaN/氮化镓

开关模式电源&#xff08;Switch Mode Power Supply&#xff0c;简称SMPS&#xff09;&#xff0c;又称交换式电源、开关变换器&#xff0c;是一种高频化电能转换装置&#xff0c;是电源供应器的一种。其功能是将一个位准的电压&#xff0c;透过不同形式的架构转换为用户端所需…

【2023】M1/M2 Mac 导入Flac音频到Pr的终极解决方案

介绍 原作者链接&#xff1a;https://github.com/fnordware/AdobeOgg 很早之前就发现了这个插件&#xff0c;超级好用&#xff0c;在windows上完全没有问题&#xff0c;可惜移植到mac就不行了&#xff08;然后我给作者发了一个Issue&#xff0c;后来就有大佬把m1的编译出来了&…

②. GPT错误:图片尺寸写入excel权限错误

꧂问题最初 ꧁ input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹&#x1f4c1;就处理文件。路径下的图片 1. 是处理本路径图片 …

狄拉克函数及其性质

狄拉克函数及其性质 狄拉克函数 近似处理 逼近近似 积分近似 狄拉克函数的性质 狄拉克函数的Hermite展开

构建图像金字塔:探索 OpenCV 的尺度变换技术

构建图像金字塔&#xff1a;探索 OpenCV 的尺度变换技术 引言什么是图像金字塔&#xff1f;为什么需要图像金字塔&#xff1f;构建高斯金字塔构建拉普拉斯金字塔图像金字塔的应用示例&#xff1a;在不同尺度下检测图像中的边缘 结论 引言 在计算机视觉领域&#xff0c;图像金字…

ROS-PX4仿真笔记_1

offbord模式测试 rosrun offboard_pkg position stablelize模式 lqr控制器实验 roslaunch px4 fast_test.launch 无人机起飞1.5-2m sh mybot_gazebo.sh先点击mode&#xff0c;再点击cmd&#xff0c;才能打开offbord模式 minijerk实验 roslaunch px4 fast_test.launch sh …

电子科大软件系统架构设计——系统架构设计

文章目录 系统架构设计系统设计概述系统设计定义系统设计过程系统设计活动系统设计基本方法系统设计原则系统设计方法分类面向对象系统分析与设计建模过程 系统架构基础系统架构定义系统架构设计定义系统架构作用系统架构类型系统总体架构系统拓扑架构系统拓扑架构类型系统拓扑…

读书笔记:多Transformer的双向编码器表示法(Bert)-4

多Transformer的双向编码器表示法 Bidirectional Encoder Representations from Transformers&#xff0c;即Bert&#xff1b; 第二部分 探索BERT变体 从本章开始的诸多内容&#xff0c;以理解为目标&#xff0c;着重关注对音频相关的支持&#xff08;如果有的话&#xff09;…

Docker基础操作容器

启动容器有两种方式&#xff0c;一种是基于镜像新建一个容器并启动&#xff0c;另外一个是将在终止状态&#xff08;exited&#xff09;的容器重新启动。 因为 Docker 的容器实在太轻量级了&#xff0c;很多时候用户都是随时删除和新创建容器。 新建并启动 所需要的命令主要…

使用tailwindcss来构建以及引入外部组件

使用tailwindcss来构建以及引入外部组件 使用tailwindcss来构建以及引入外部组件 前言构建组件 核心思想可行方案不可行方案 可行方案详解 custom css selector Functions & Directivesadd prefixadd scoped不打包 构建demo链接相关issues 前言 我们在日常的开发中&am…

1、AM64xx的SDK重新编译lib文件

当需要修改AM64XX的SDK提供的源文件时&#xff0c;如果要在自己的工程使用&#xff0c;需要重新编译出lib&#xff0c;下面是编译lib的具体方法&#xff1a; 因为没有ccs编译出lib的工程&#xff0c;所以需要再命令行模式下生成lib文件 1、配置好gmake环境 如果安装了ccs&am…

隔离上网,安全上网

SDC沙盒数据防泄密系统&#xff08;安全上网&#xff0c;隔离上网&#xff09; •深信达SDC沙盒数据防泄密系统&#xff0c;是专门针对敏感数据进行防泄密保护的系统&#xff0c;根据隔离上网和安全上网的原则实现数据的代码级保护&#xff0c;不会影响工作效率&#xff0c;不…

SP605官方开发板不能扫到链的问题

很早之前的板子&#xff0c;近些天需要重新搞FPGA&#xff0c;所以又拿出来&#xff0c;应该以前都是在win7下开发&#xff0c;现在都win10了&#xff0c;vivado都不支持sp6&#xff0c;所以先得下载一个14.7版本&#xff0c;但是出现了新的问题&#xff0c;就是不能扫到链。 …