当前位置: 首页 > news >正文

快速入门安装及使用git与svn的区别常用命令

一、导言

1、什么是svn?

    SVN是Subversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个文件的修改历史,包括作者、时间和具体更改内容等信息。

        使用SVN时,团队成员需要从中央代码仓库中检出项目的最新代码,并在本地进行开发和修改。一旦完成工作,他们将代码推送回中央代码仓库以共享变更。SVN提供了一系列命令和功能,如更新代码、提交代码、查看历史记录、比较文件差异等,以便团队成员协同工作和管理代码版本。然而,由于SVN是集中式的,当网络连接中断或者服务器出现故障时,团队成员可能无法提交或获取最新代码。

1.1、svn的利 

简单易用:相对于Git而言,SVN的命令和操作相对简单,学习曲线较为平缓。对于一些非技术背景或刚接触版本控制的开发者来说,使用SVN更容易上手。
集中化管理:SVN采用集中式的工作方式,所有代码都保存在服务器端,可以集中管理和控制代码的访问权限,方便团队协作、控制代码质量和安全性。
安全性:由于所有代码保存在服务器上,避免了本地代码丢失的风险,并且管理员可以管理和监控每个用户的操作,保证了代码的安全性。

1.2、svn的弊 

需要网络连接:由于SVN是集中式的,需要与中央代码仓库进行交互,因此必须有稳定的网络连接。如果网络中断或服务器故障,将无法提交或获取最新代码,从而影响开发流程。
不支持离线工作:SVN需要与远程服务器交互,开发者无法在离线情况下进行代码修改和提交,限制了在没有网络连接的环境下的自由开发能力。
分支管理复杂:相比于Git,SVN的分支管理相对较为复杂。分支的创建、合并和删除需要手动操作,并且可能会面临一些冲突解决的挑战。
存储效率低:由于SVN采用基于差异的版本控制方式,每次提交只保存进行的更改,存储效率相对较低。尤其是在大规模项目中,占用的存储空间较大。

2、什么是Git? 

  Git是一个分布式版本控制系统,用于管理和跟踪软件开发项目的源代码。它能够记录整个项目的历史更改,包括每个文件的修改、添加和删除,以及每次提交的作者和时间等信息。通过使用Git,团队成员可以协同工作并共享代码,并且能够轻松地撤销或回滚更改,解决合并冲突以及自动识别和处理代码更新。Git也提供了分支功能,使得开发者能够在独立的分支上开展工作,最后再将分支合并到主线上。这使得多人同时开发同一项目变得更加容易和安全。

2.1、Git的利 

分布式版本控制:Git是一个分布式版本控制系统,每个开发者都可以拥有完整的代码库复本,并且可以离线工作。这使得团队成员可以独立进行开发和提交变更,而不会受到网络连接或服务器故障的影响。
强大的分支管理:Git的分支管理功能非常强大和灵活。开发者可以轻松地创建、合并和删除分支,实现独立开发和并行工作。这对于团队协作和多个功能或修复并行进行时非常有益。
快速操作和高性能:由于Git本地存储了完整的代码副本,可以在本地进行快速的代码查看、提交和切换。相比于集中式的版本控制系统,Git的操作通常更快速,尤其在大型项目中表现更优秀。
丰富的工具生态系统和社区支持:Git拥有庞大的用户群体和活跃的开源社区,提供了丰富的工具和扩展。还有许多第三方工具和服务,如GitHub,提供了代码托管、协作和Code Review等功能。

2.2、Git的弊 

学习曲线较陡:相对于SVN等集中式版本控制系统,Git的学习曲线较为陡峭。它有许多高级功能和命令,对于初学者来说,可能需要一定的时间和精力来熟悉和掌握。
存储占用较大:由于Git存储了完整的代码副本,每次提交都会增加存储空间的消耗。尤其是在项目历史变得庞大时,会产生更多的磁盘空间需求。
强大的功能和灵活性带来复杂性:Git的强大功能和灵活性可以使其变得复杂和难以理解。例如,分支合并和解决冲突可能需要一些技巧和经验来处理。

3、区别 

  Git相对于SVN在分布式特性、分支管理和强大的版本控制能力上有优势。但SVN由于简单易用和集中式的特点,在某些场景下仍然被广泛使用。选择使用哪种版本控制系统取决于项目的需求、团队的工作流程和开发者的偏好。它们的设计思想和工作方式上存在一些显著区别。

分布式 vs 集中式:最明显的区别是Git是一个分布式版本控制系统,而SVN是一个集中式版本控制系统。在Git中,每个开发者都拥有完整的代码仓库副本,可以离线工作并提交变更。而SVN中的代码仓库位于服务器上,开发者通过向服务器提交和获取代码来进行工作。
版本管理方式:Git以增量快照方式保存代码的不同版本,每次提交都会创建一个新的快照,并记录父快照的引用关系,从而构建出一棵提交历史的有向无环图。SVN则采用基于差异的方式,只存储每次提交的差异,相较于Git,SVN对存储空间的占用更为高效。
分支管理:Git的分支管理非常灵活和强大,可以轻松创建、合并和删除分支,并且支持同时存在多个独立开发的分支。而SVN的分支管理相对简单,通常需要手动创建分支,并且在合并分支时较为复杂。
性能:由于Git拥有完整的代码仓库副本,在大型项目中可以提供更快的操作速度。SVN的性能在大规模项目上可能受到网络连接和服务器性能的限制。

这里是我所理解的一个区别:

去中心化
GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。     
git仓库的任何一个拷贝都可以独立作为一个服务器来使用
在Git中文件有四种状态:
未跟踪(untrack):表示文件为新增加的
已修改(modified):表示修改了文件,但还没保存到git仓库中。
已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
已提交(committed):表示文件已保存在git仓库中。
 其它
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
直接记录快照,而非差异
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
直接记录快照,而非差异
     GIT分支和SVN的分支不同,分支在SVN中一点不特别,就是版本库中的另外的一个目录。
git存在分支。

 二、git的使用

1、创建仓库 

  1. 进入工作台 - Gitee.com官网进行登录注册。
  2. 在首页点击创建仓库,填写完之后创建即可。
    1. 仓库名称路径根据你自己的来进行填写,这两个也是必须要填写的。
    2. 如果你是新手我建议这边选中开源

2、Windows安装Git 

进入Git - Downloads (git-scm.com)下载2.22以上的版本。

【注意】不要安装在C盘(win10会有权限问题)。

  1. 下载完成后双击安装选中安装路径。
  2. ①默认不会在桌面创建图标,并且增加了一个新的特性
    ②将GItBash添加到Windows terminal中,建议勾选。

 选择一个默认的编辑器,默认为Vim(Linux的),里面还有Notepad,我选择使用Vim

在Git创建分支后的默认的名字(master),如果没有特别的使用默认的设置,点击next即可默认推荐为第二个,不包含全部的工具。第三个是git 和 Unix全部工具开启https连接,保证数据传输数据的安全,按照默认的选择即可额外的配置选项,这里面默认都没有选,可以将这两个选框勾选上,支持(node、python)然后选择install启动git Bash 查看发行说明  可以不用选中win + R cmd 输入:git --version 查看版本 

或者在电脑的任意位置右键看见这两个就说明安装成功了

3、上传仓库 

创建一个新的仓库,创建完成后记住或者保存这个界面,会用到。在本地新建一个用来上传的文件夹,右键点击 Git Bash Here ,会出现一个命令窗口。一次运行创建仓库出现的命令。①运行第一个命令会在你的用户下面 出现一个文件。
②执行第二个框选的命令,当我们执行到git init的命令后会有一个隐藏的文件夹我们执行完命令之后会弹出一个登录的窗口,登录即可。

  1. 上传完成

快速上传:

  1. 把我们的文件放入已经创建好的仓库文件夹里面
  2. 在命令窗口里面 输入命令 : git add .
  3. git commit -m "新提交的文件" : 提交之后在git是看不到你的文件的
  4. git push :推送到git

 4、仓库下载资源

拿到我们需要克隆的地址。创建一个新的文件夹用于克隆。

  1. 输入命令:git clone [url]:克隆远程仓库到本地。
  2. 克隆完成

三、git常用命令 

Git有许多其他命令和选项可供使用。可以通过运行git --help或查阅Git文档来获取更详细的命令说明和用法。以下是一些常见的Git命令及其功能:

git init:初始化一个新的Git仓库。
git clone [url]:克隆远程仓库到本地。
git add [file]:将文件添加到暂存区。
git commit -m "message":提交暂存区的文件,并添加提交信息。
git status:查看工作区和暂存区的状态。
git log:查看提交历史记录。
git branch:查看分支列表。
git checkout [branch]:切换到指定分支。
git merge [branch]:将指定分支合并到当前分支。
git pull:拉取远程仓库的最新代码。
git push:推送本地代码到远程仓库。
git remote add origin [url]:关联本地仓库与远程仓库。
git diff:查看工作区与暂存区的差异。
git reset [commit]:撤销提交,并将HEAD指针移动到指定的提交。
git stash:将当前修改保存到临时存储区,以便切换分支或恢复后再次应用。

四、git常用命令理论 

这些命令是Git的基础,可以帮助你管理你的项目和协作与他人。在使用这些命令时,你需要理解其背后的理论,包括版本控制、分支管理、合并和解决冲突等概念,才能更好地使用Git来管理你的项目。

下面是一些常用的Git命令及其理论:

git init:这个命令用于创建一个新的Git仓库。当你运行这个命令时,Git会在当前目录下创建一个新的.git目录,这个目录包含了所有Git需要的数据和元数据。
git clone:这个命令用于克隆一个Git仓库到本地。你可以通过这个命令下载一个远程仓库到你的本地机器上,这样你就可以查看该项目,或者对其进行修改。
git add:这个命令用于将文件添加到暂存区,准备提交。根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
git commit:这个命令用于提交暂存区中的文件到仓库。你可以通过这个命令将暂存区中的文件提交到你的本地仓库。
git push:这个命令用于将本地仓库中的文件推送到远程仓库。你可以通过这个命令将你本地的修改推送到远程仓库,以便其他人可以看到和共享你的更改。
git pull:这个命令用于从远程仓库中拉取文件到本地。你可以通过这个命令从远程仓库中下载最新的更改到你的本地机器上,以便你可以查看和修改这些文件。
git merge:这个命令用于合并两个分支。你可以通过这个命令将两个分支的更改合并到一起。
git rebase:这个命令用于将一个分支的更改应用到另一个分支上。你可以通过这个命令将一个分支的更改应用到另一个分支上,而不是合并两个分支。

相关文章:

快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn? SVN是Subversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个…...

超详细介绍如何使用 OpenCV 和 BGS 库进行背景扣除

深入研究这些 CV 系统背后的想法,我们可以观察到,在大多数情况下,初始步骤包含背景减除 (BS),这有助于获得视频流中对象的相对粗略和快速的识别,以便对其进行进一步的精细处理。在当前的文章中,我们将介绍几种在准确性和处理时间 BS 方法方面值得注意的算法:SuBSENSE和基…...

STM32F4、GD32F4 内部硬件CRC使用方法和踩坑实录

背景 某项目用到了IC卡刷卡启动功能,程序中对读取IC卡的相关数据后要进行CRC校验,本文介绍如何在STM32F4 GD32F4 平台上使用标准库函数进行CRC硬件校验。 摘要 本文介绍如何在STM32F4、GD32F4 平台上使用标准库函数进行CRC硬件校验。包括容易出现的问题和解决方法。涉及STM3…...

【SpringBoot】序列化和反序列化介绍

一、认识序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程;deserialization(反序列化)是一种将这些字节重建成一个对象的过程。将程序中的对象,放入文件中保存就是序列化&…...

Android 升级软件后清空工厂模式测试进度

Android 升级软件后清空工厂模式测试进度 最近收到项目需求反馈:升级软件后,进入工厂模式测试项,界面显示测试项保留了升级前的测试状态(有成功及失败),需修改升级软件后默认清空测试项测试状态,具体修改参照如下: /…...

Promise原理、以及Promise.race、Promise.all、Promise.resolve、Promise.reject实现;

为了向那道光亮奔过去,他敢往深渊里跳; 于是今天朝着Promise的实现前进吧,写了四个小时,终于完结撒花; 我知道大家没有耐心,当然我也坐的腰疼,直接上代码,跟着我的注释一行行看过去…...

mysql---MHA(高可用)

MHA概述 magterhight availabulity :基于主库的高可用环境下,主故障切换基础要求:主从架构 (一主两从)解决mysql的单点故障问题,一旦数据库崩溃,MHA会在0-30s内这东东完成故障切换。复制方式:半…...

人工智能基础_机器学习032_多项式回归升维_原理理解---人工智能工作笔记0072

现在开始我们来看多项式回归,首先理解多维 原来我们学习的使用线性回归,其实就是一条直线对吧,那个是一维的,我们之前学的全部都是一维的对吧,是一维的,然后是多远的,因为有多个x1,x2,x3,x4... 但是比如我们有一个数据集,是上面这种,的如果用一条直线很难拟合,那么 这个时候,…...

C#截取范围

string[] strs new string[]{"1e2qe","23123e21","3ewqewq","4fewfew","5fsdfds"};var list strs[1..2];Range p 0..3;var list strs[Range];...

用 winget 在 Windows 上安装 kubectl

目录 kubectl 是什么? 安装 kubectl 以管理员身份打开 PowerShell 使用 winget 安装 kubectl 测试一下,确保安装的是最新版本 导航到你的 home 目录: 验证 kubectl 配置 kubectl 是什么? kubectl 是 Kubernetes 的命令行工…...

1 Supervised Machine Learning Regression and Classification

文章目录 Week1OverViewSupervised LearningUnsupervised LearningLinear Regression ModelCost functionGradient Descent Week2Muliple FeatureVectorizationGradient Descent for Multiple RegressionFeature ScalingGradient DescentFeature EngineeringPolynomial Regress…...

Antv/G2 折线图 DataSet 数据展开成指定格式

DataSet 文档 G2 3.2 DataSet 文档 Demo&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><m…...

物理问题中常见的分析问题----什么样的函数性质较好

物理问题中常见的积分符号位置交换问题 重极限与累次极限 高数下的定义 累次极限&#xff1a;求极限时需要遵循一定的顺序重极限&#xff1a;任意方向趋于的极限 两者之间的关系&#xff1a; 两者没啥关系存在累次极限存在而不相等的函数...... 求和符号与积分符号互换--逐项积…...

8 Go的函数

概述 在上一节的内容中&#xff0c;我们介绍了Go的指针&#xff0c;包括&#xff1a;使用指针、空指针、指针数组、指向指针的指针等。在本节中&#xff0c;我们将介绍Go的函数。函数允许开发者将相关的代码组织在一起&#xff0c;并将其命名&#xff0c;以便在其他地方进行调用…...

算法笔记-第九章-二叉树的遍历(待整理)

算法笔记-第九章-二叉树的遍历 二叉树的先序遍历二叉树的中序遍历二叉树的先序遍历 //二叉树的先序遍历 #include <cstdio> #include <vector> using namespace std;const int MAXN = 50;struct Node //用结构体表示左子树和右子树的数据 {int l, r; } nodes[MAXN]…...

C语言从入门到精通之【字符串】

C语言没有专门用于储存字符串的变量类型&#xff0c;字符串都被储存在char类型的数组中。数组由连续的存储单元组成&#xff0c;字符串中的字符被储存在相邻的存储单元中&#xff0c;每个单元储存一个字符&#xff0c;每个字符占1个字节。 数组末尾位置的字符\0。这是空字符&am…...

超详细!必看!!STM32--时钟树原理

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…...

用 Golang 采集 Nginx 接口流量大小

简介 在开发和运维中&#xff0c;我们经常需要监控和分析服务器的接口流量大小&#xff0c;特别是对于部署了 Nginx 的服务器。本文将介绍如何使用 Golang 采集 Nginx 接口流量大小&#xff0c;并展示如何将这些数据进行实时监控和分析。 步骤一&#xff1a;准备工作 在开始…...

Linux java jar启停脚本(合并版)

#包文件路径及名称(目录按照各自配置) APP_NAME=/opt/whkc/gs/app-java.jar#查询进程,并杀掉当前jar/java程序 pid=`ps -ef|grep app-java.jar | grep -v grep | awk {print $2}` kill...

计算机毕业设计选题推荐-公共浴池微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验

2024年初&#xff0c;人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目&#xff08;一款融合大型语言模型能力的云端AI编程IDE&#xff09;时&#xff0c;技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力&#xff0c;TRAE在WayToAGI等…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...