Git 基础知识回顾及 SVN 转 Git 自测

背景

项目开发过程中使用的版本控制工具是 SVN,Git 多有耳闻,以前也偶尔玩过几次,但是工作中不用,虽然本地也有环境,总是不熟练。

最近看一本网络开源技术书时,下载源码部署了一下,又温故了一下 Git 的用法,思考一个问题:如果现在我们的版本控制工具从 SVN 转换到 Git,我能不能直接上手呢?

本文汇总一下 Git 的基础知识和转换需要的基本流程,要上手也是没问题,资料来源于网络,说实话,资源真是多啊,如果真要换 Git ,现学现用足够了。

Git 原理

  1. Git 是什么?Linux 的源代码版本控制工具,在 BitKeeper 收费后,该团队自己开发的一个版本控制工具。
  2. Git 和 SVN 的区别是什么?存储方式不同。
    Git 存储的是全量快照:
    在这里插入图片描述
    途中的虚线是指相对上个版本没变化的文件,那么它就只存储一个指向上个版本的指针,其他变化的文件作为本版本的文件。而 SVN 保存的差异信息:
    在这里插入图片描述
    版本 V2 记录了相对 V1的增量变化内容。

Git 的基本思想:

  • 分布式版本控制工具,每个主机上的本地仓库都是一个节点,commit 也只是提交到本地仓库的,然后通过 push 到原创共享仓库
  • 直接记录快照,而非差异比较。
  • 近乎所有的操作都在本地执行,除了推送操作外。
  • 时刻保持数据的完整性。
  • 多数操作都是添加数据的操作。
  • 文件的三种状态:CMS「客户管理系统缩写记住它们」(Commit、Modified、Stated)

Git 操作

Git 的常用操作:

  • git init
  • git clone
  • git add
  • git commit
  • git pull
  • git fetch :与 git pull 的区别是,不会自动合并,用于需要人工比对差异的情况,然后再手动执行 merge。相当于查看变动,如果没有冲突或者没有问题,就可以直接执行 pull 拉取操作了。
  • git push
  • git log
  • git status
  • git config

Git 的换行配置

  • LF:line feed(单个字符\n),Linux 下的换行符号,含义:换行。
  • CRLF:carriage return line feed(回车换行,两个字符:\r\n),Windows下的换行符号。

LF 和 CRLF 的历史遗留故事,Windows 操作系统和 Linux 操作系统的差异为版本控制带来的问题。

解决办法是配置 core.autocrlf

true :最初的换行符号提交到 Linux 上了,都是 LF,但是下载到本地的时候,自动转换为 CRLF,为了 Windows 系统而推荐的配置。

input:所见即所得,适合 Linux 和 macOS。

结论就是:在 Window 主机上的配置应该为 true ,自动处理行尾,在 Linux 或 MAC 上设置为 input ,所见即所得,本地获取时不处理行尾。

SVN 日常操作

本地使用的 SVN 工具是 SnailSVN,日常基本操作有:

  1. 检出
  2. 更新
  3. 提交
  4. 查看日志
  5. 变更比对

Git 工具

Git 的也有图形化工具 SourceTree,界面很清爽,对比 SVN 的日常操作,有这个工具就够了,尤其是它能直接在界面上显示待提交的文件变化:
在这里插入图片描述
这个功能太好了,尤其是我在 SVN 使用的时候,都是在文件目录下逐个对比差异的。

直接找到 SourceTree 的工程路径,然后在 IDEA 中打开就可以了,所有的修改状态自动对应到当前选中的分支上。

论工具的使用,本人还是属于熟练工的一种吧!各种技术、工具啊,真的是够多的,像我这种只会用工具、抽象创造力匮乏的人,算不上科技人才吧,妥妥的工具人!

启示录

IDEA 里面有 Git 的工具了,SourceTree 都省了。不过分开有个好处就是:IDEA 里面专注代码编写,SourceTree 里面专注代码提交。

最后还有一个疑问:Git 分支切换过程中,被导入 IDEA 中的项目源码会自动跟着切换吗?我可不可以一边对分支 A 编码,一边再切换到分支 B 呢?

Git 有一个限制:分支切换时,需要决定在当前分支上的修改内容是否需要提交,如果选择忽略改动的话,所有文件的修改就被丢弃。
在这里插入图片描述

就是说分支可以随便切,但是必须决定如何处理本地变更。

回顾一下 SVN 的分支管理:创建新分支,导出项目源码到本地,导入到 IDEA,开发。创建的分支越多,就需要重复执行代码检出操作,占据的磁盘空间就会堆积越多。开发过程中,不同分支直接的切换操作也很麻烦。对比来看,Git 的分支管理确实很方便。

最后一个疑问:一个 Git 库下所有分支的代码是共用同一份源代码的磁盘空间的吗?SVN 的不同分支,检出来源码都是独占一份磁盘空间的,Git 是这样的吗?感觉 Git 不同分支的源码存储空间跟 SVN 不一样的,但是没找到说明依据。

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

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

相关文章

助力工业数字化!TDengine 与恩菲 MIM+ 工业互联网平台实现兼容性互认

在云计算、物联网、5G等新兴技术快速发展的当下,制造企业想要运用新兴技术实现数字化转型,工业互联网平台的应用和打造是非常关键的转型要素。在工业互联网平台的发展中,数据处理上存在的问题一直都是令企业所头疼的,越来越多的案…

Java并发编程第11讲——AQS设计思想及核心源码分析

Java并发包(JUC)中提供了很多并发工具,比如前面介绍过的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、FutureTask等锁或者同步部件,它们的实现都用到了一个共同的基类——AbstractQueuedSynchronizer&…

汽车网络安全渗透测试概述

目录 1.汽车网络安全法规概述 1.1 国外标准 1.2 国内标准 2.汽车网络安全威胁分析 2.1 汽车网络安全资产定义 2.2 汽车网络安全影响场景及评级示例 3.汽车网络安全渗透测试描述 3.1 参考法规 3.2 渗透测试内容 4.小结 1.汽车网络安全法规概述 近年来,汽车…

【UE4】UE编辑器乱码问题

环境:UE4.27、vs2019 如何解决 问题原因,UE的编码默认是UTF-8,VS的默认编码是GBK 通过"高级保存选项" 直接修改VS的 .h头文件 的 编码 为 UTF-8 步骤1. 步骤2. 修改编码后,从新编译,然后就可以解决编辑器…

很多个pdf怎么合并在一起?

很多个pdf怎么合并在一起?作为一个办公室的伙伴,对于PDF格式肯定不会陌生。它强大的功能为我们的工作提供了许多便利。由于PDF文件格式的稳定性和安全性较高,我们通常在工作或学习中使用它来传输文件,很多人都喜欢将办公文件都做成…

Java用log4j写日志

日志可以方便追踪和调试问题,以前用log4net写日志,换Java了改用log4j写日志,用法和log4net差不多。 到apache包下载下载log4j的包,解压后把下图两个jar包引入工程 先到网站根下加一个log4j2.xml的配置文件来配置日志的格式和参…

自动驾驶行业观察之2023上海车展-----车企发展趋势(3)

合资\外资发展 宝马:i7、iX1新车亮相,未来将持续发力电动化、数字化(座舱) 宝马在本次车展重点展示了电动化产品,新发车型为i7 M70L、iX1、及i vision Dee概念车等车型。 • 展示重点:电动化数字化&#…

STM32H750之FreeRTOS学习--------(五)临界段代码保护

FreeRTOS 文章目录 FreeRTOS五、临界段代码保护临界段代码保护函数任务级进入临界段任务级退出临界段中断级进入临界段中断级退出临界段 任务调度器的挂起和恢复挂起任务调度器恢复任务调度器挂起任务调度器恢复任务调度器 五、临界段代码保护 临界段代码也叫做临界区&#xf…

Android EditText 实现强制性弹出只能输入英文的键盘

如果 EditText 控件不做任何特殊处理,例如笔者手机默认弹出的是百度输入法的软键盘,可实现中英文切换,并且自带英文单词智能联想功能(与系统安装输入法和设置相关)。但在某些应用场景下,例如在英语APP里练习…

RabbitMQ(高级特性):限流

消费端限流 在rabbitmq中,使用消费端限流必须开启手动签收信息 过MQ可以对请求进行“削峰填谷”,即通过消费端限流的方式限制消息的拉取速度,达到保护消费端的目的。 生产者批量发送消息: Test public void testSendBatch() {…

DBever 连接trino时区问题 The datetime zone id ‘GMT+08:00‘ is not recognised

DBever连接trino 测试连接成功,但是执行sql报时区不对、如果你默认使用的是大于jdk8的版本 会存在这个问题,因为jdk版本 jdk8 和jdk17 版本默认时区是不同的 trino官网明确说明了时区默认跟jdk走 解决方案 可以先行查看JDK本地时区库版本,执…

Django初窥门径-自定义用户模型

前言 自定义用户模型在Django应用中是一个重要的话题,它涉及到如何根据您的项目需求以及特定的用户身份验证和授权需求来调整用户模型。在以下前言中,我将讲述为什么自定义用户模型是如此重要以及其潜在的优势: 随着Web应用的不断发展&…

工业路由器网关的网络协议之NAT技术

在物联网通讯领域,NAT技术能将内网的一个私有IP转换成一个公网IP去接入互联网,解决组建局域网络时私有IP地址无法在公网上进行路由的问题。 NAT(Network Address Translation)的三种方式: 静态NAT 1、一个私有IP对应…

在微信小程序中怎么实现刮刮卡抽奖活动

在当今的数字化时代,微信小程序已经成为一种广泛使用的营销工具。通过各种互动活动,企业可以吸引用户的关注,提升品牌影响力。其中,刮刮卡抽奖活动是一种特别受欢迎的形式。本文将为你详细介绍如何在微信小程序中实现刮刮卡抽奖活…

Python中通过socketserver库创建服务端

socketserver库是Python的标准库,提供了套接字服务端的框架,通过该框架可以简化服务端的创建流程。 1 socketserver库的导入 通过如图1显示的代码导入socketserver库。 图1 导入socketserver库 2 通过socketserver库创建TCP服务端 通过socketserver库…

SpringCloud——服务容错——Hystrix

1.现在的微服务存在哪些问题? 在大型的微服务项目中,肯定少不了服务之间多条链路调用,如果调用中有一个服务出现了问题,如果不做任何的处理,就会造成大量的阻塞,可能会导致整个服务雪崩。 2.要解决的问题 …

C盘清理指南(三)——文件目录更改

各位小伙伴你们好,今天的推送是C盘清理系列的第三期——文件路径更改,分为文件夹路径和软件默认路径两个模块。 一.文件夹路径更改 点击进入C盘,依次点击上方“查看——隐藏的项目”,可以看到C盘中各种隐藏目录。 单击…

深度图(Depth Map)

文章目录 深度图深度图是什么深度图的获取方式激光雷达或结构光等传感器的方法激光雷达RGB-D相机 双目或多目相机的视差信息计算深度采用深度学习模型估计深度 深度图的应用场景扩展阅读 深度图 深度图是什么 深度图(depth map)是一种灰度图像&#xf…

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图,错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…

为机器学习算法准备数据(Machine Learning 研习之八)

本文还是同样建立在前两篇的基础之上的! 属性组合实验 希望前面的部分能让您了解探索数据并获得洞察力的几种方法。您发现了一些数据怪癖,您可能希望在将数据提供给机器学习算法之前对其进行清理,并且发现了属性之间有趣的相关性&#xff0c…