Git和SVN

1、Git

Git是一个分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是开源的,采取了分布式的版本库的方式,不需要服务器端软件就可以运行。

Git的核心概念

以下是Git中的一些核心概念,这些概念是使用Git时需要了解的。

  • 版本库(Repository):版本库是一个存储目录,其中包含了所有的版本信息、配置信息等。在Git中,每个开发者的机器上都有完整的版本库。
  • 暂存区(Staging Area/Index):用户提交文件之前,文件首先放在暂存区,然后用户可以选择性地提交这些更改到版本库中。
  • 提交(Commit):提交是版本历史中的一个节点,它包含了自上一次提交以来对文件的更改。
  • 分支(Branch):分支是指向提交对象的可变指针。Git的默认分支名为master。在多数情况下,master指向最近一次提交,然后随着新的提交逐渐前移。
  • 远程(Remote):远程版本库是指托管在网络或互联网上的项目的版本库,可以有多个远程版本库。
  • 合并(Merge):把不同分支的更改整合到一起。
  • 冲突(Conflict):当不同的分支修改了同一部分代码后,尝试合并时可能会发生冲突,需要手动解决。
  • 标签(Tag):为了标识特定的重要提交,如发布的版本(v1.0等),可以给这些提交打上标签。
  • 检出(Checkout):切换分支或恢复工作树文件。

Git的基本操作

初始化和克隆仓库
git init            # 初始化本地Git仓库
git clone [url]     # 克隆远程Git仓库到本地
文件的添加、提交和推送
git status              # 查看文件状态
git add [file]          # 将文件添加到暂存区
git commit -m "message" # 提交更改
git push [remote] [branch] # 推送本地提交到远程仓库
分支管理
git branch              # 列出分支
git branch [branch]     # 创建新分支
git checkout [branch]   # 切换分支
git merge [branch]      # 合并分支
git branch -d [branch]  # 删除分支
查看历史和差异
git log                 # 查看提交历史
git log --oneline --graph --decorate # 图形化展示提交历史
git diff                # 查看文件更改详情
远程操作
git remote add [name] [url]  # 添加远程仓库
git fetch [remote]           # 从远程获取代码库到本地
git pull [remote] [branch]   # 下载远程代码并合并
标签操作
git tag                    # 列出标签
git tag [name] [commit]    # 在特定的提交上打标签
git push [remote] [tag]    # 推送标签到远程仓库

Git工作流

Git支持多种工作流程,其中几个广泛使用的包括:

  • 集中式工作流:所有开发者都在master分支上工作,适合小团队。
  • 功能分支工作流:每个功能开发在各自的分支上进行,然后合并回master
  • Gitflow工作流:拥有开发分支、功能分支、以及用于发布的分支,适合大型项目。
  • Forking工作流:每个开发者拥有公共仓库的完整fork,适合开源项目。

Git的内部原理

Git的存储和数据模型是其强大性能的基础:

  • 数据模型:Git的数据模型是基于简单的键值对。Git存储每个文件及其每次提交作为对象。每个对象都有一个SHA-1哈希作为键,通过这个键你可以获取存储的文件内容或提交信息。
  • 存储机制:Git使用了一种被称为快照的机制。在提交时,Git保存一个提交对象,它指向一个项目树的快照。
  • 引用和对象:Git使用引用来管理指向对象(如提交和树)的指针。

以上是Git的高级概览。实际使用中,根据项目的具体需求和团队的工作流程,Git提供了足够的灵活性和配置选项来适应不同的环境。

2、Git常用指令

Git指令非常多,每个指令都有其特定的用途和一系列可选的参数。以下是一些常用Git指令和它们的详细用法。

基础指令

  • git init
    初始化新的Git仓库。在项目的根目录执行这个命令,会创建一个新的.git目录,其中包含了所有的仓库元数据。

  • git clone [url]
    用来复制一个已存在的Git仓库。这个命令会将远程仓库的数据克隆到本地,并创建一个远程跟踪分支。

  • git status
    查看工作目录和暂存区的状态,包括那些被修改、暂存或者未跟踪的文件。

处理更改

  • git add [file]
    将更改添加到暂存区。如果指定的是一个目录,它会递归地添加所有更改过的文件。

  • git commit -m “[commit message]”
    记录对仓库的更改。提交时需要提供一个消息来描述这次提交。

  • git push [remote] [branch]
    将本地分支的更新推送到远程仓库。remote是远程仓库的别名,默认为originbranch是要推送的分支。

  • git pull [remote] [branch]
    从远程仓库获取最新版本,并合并到本地仓库。实际上是执行了git fetch之后的git merge

分支管理

  • git branch
    列出、创建或删除分支。不带参数时列出本地分支,-r查看远程分支,-a查看所有分支。

  • git branch [branch]
    创建新分支。

  • git branch -d [branch]
    删除分支。-d是–delete的简写,表示删除已合并的分支,-D--delete --force的简写,表示强制删除分支。

  • git checkout [branch]
    切换到指定的分支。使用-b选项可以创建并切换到新分支。

  • git merge [branch]
    将指定分支的更改合并到当前分支。

查看历史

  • git log
    查看提交历史。有多个选项可以显示不同格式的历史,如--oneline--graph--decorate等。

  • git diff
    查看未暂存的更改。--staged--cached查看已暂存的更改。

撤销更改

  • git checkout – [file]
    丢弃工作目录中对文件的更改。

  • git reset – [file]
    将文件从暂存区移出,但保留其在工作目录中的更改。

  • git reset --soft [commit]
    撤销到指定的提交,但保留更改在暂存区。

  • git reset --hard [commit]
    撤销到指定的提交,并丢弃自那以后的所有更改。

远程操作

  • git remote
    管理配置的远程仓库。-v选项可以显示远程仓库的URL。

  • git fetch [remote]
    从远程仓库下载新分支和数据,但不自动合并。

标签

  • git tag
    列出所有标签。-a添加带注释的标签,通常用于发布。

  • git push [remote] [tag]
    将本地标签推送到远程仓库。

高级指令

  • git rebase [base]
    将一系列提交按照原有次序应用于另一分支上,通常用于保持一个干净的提交历史。

  • git cherry-pick [commit]
    将某一个分支的提交应用到当前分支。

  • git stash
    暂时存储当前工作目录的更改,以便可以切换分支而不影响当前的工作进度。

这些指令只是Git功能的一小部分。Git的强大之处在于,它提供了大量的命令和参数来满足几乎任何级别的版本控制需求。对于复杂的情况,如合并冲突、交互式rebase或高级合并策略,可能需要更多的学习和实践。

3、SVN

Apache Subversion(简称SVN)是一种集中式版本控制系统,它与Git在某些方面相似,但在结构和概念上有所不同。SVN中最显著的差异是它使用了集中式的服务器来保存所有的历史版本信息,而不是像Git那样每个克隆都有完整的仓库数据。

SVN的核心概念

  • 仓库(Repository):集中存放所有文件的地方,包括所有的历史记录和版本跟踪信息。
  • 检出(Checkout):从仓库中获取项目的副本到本地。
  • 工作副本(Working Copy):用户从仓库中检出得到的项目本地副本。
  • 提交(Commit):将更改从本地工作副本发送到仓库。
  • 更新(Update):将来自仓库的更改同步到本地工作副本。
  • 修订号(Revision):每次提交都会增加的版本号,这是一种全局版本控制的方式。
  • 分支(Branch)标签(Tag):在SVN中,分支和标签都是仓库中的目录,用于分别表示开发的分支和特定的静态快照(如发布)。

SVN的基本操作

仓库创建与管理
  • svnadmin create [repository path]
    在服务器上创建一个新的SVN仓库。

  • svnserve -d -r [repository path]
    运行SVN服务器,-d表示守护进程模式,-r用于指定仓库的根路径。

工作副本
  • svn checkout [repository URL]
    从仓库检出项目到本地工作副本,通常简称为“checkout”。
文件操作
  • svn add [file or directory]
    将新文件或目录添加到版本控制下。

  • svn delete [file or directory]
    从版本控制中删除文件或目录。

  • svn copy [source] [destination]
    在版本控制中复制文件或目录,通常用于创建分支和标签。

  • svn move [source] [destination]
    在版本控制中移动文件或目录,可以用于重命名。

提交与更新
  • svn commit -m “commit message”
    将更改提交到仓库,包括文件的添加、修改和删除。

  • svn update
    将来自仓库的更改更新到本地工作副本。

查看信息
  • svn log
    查看文件或目录的修订历史。

  • svn status
    检查本地工作副本的状态,显示文件是否已修改。

  • svn diff
    查看文件的更改详情。如果指定版本号,可以比较特定修订之间的差异。

分支和标签
  • svn copy [source] [destination] -m “message”
    创建一个分支或标签,本质上是复制操作。
解决冲突
  • svn resolve --accept [resolution] [file]
    解决文件冲突,[resolution]可以是base, working, mine-conflict, theirs-conflict等。

  • svn revert [file]
    撤销本地工作副本中的更改,返回到最后一次更新或提交的状态。

高级特性

  • svn propset [property] [value] [file]
    设置文件或目录的属性,如忽略列表(svn:ignore)或外部定义(svn:externals)。

  • svn merge [source] [destination]
    合并两个不同分支的更改到工作副本。

  • svn lock/unlock [file]
    锁定或解锁文件,防止其他人在你提交之前进行更改。

实用细节

  • 事务性提交:SVN的提交是事务性的,这意味着要么所有更改都提交,要么一个都不提交。
  • 权限控制:SVN服务器可以为不同的目录和用户设置不同的访问权限。
  • 钩子脚本(hook scripts):SVN允许在执行特定操作(如提交)之前或之后运行自定义脚本。
  • 二进制文件:SVN可以有效地处理二进制文件,并提供差异报告和版本历史。

SVN与Git相比,最大的区别是集中式版本控制和分布式版本控制的差异。SVN适用于需要严格权限控制和细粒度访问管理的环境,且对于某些大型二进制文件的处理也比Git要好。不过,Git在分布式版本控制、分支处理和社区支持方面具有明显优势。

4、Git和SVN对比

Git和SVN都是版本控制系统,它们使多人协作开发项目成为可能,并帮助开发者管理项目的历史记录。下面是对两者的一些详细深入对比:

版本控制模型

  • Git: 是一个分布式版本控制系统(DVCS)。每个开发者的本地副本都是一个完整的仓库,包含全部历史记录,不依赖于中央服务器。
  • SVN: 是一个集中式版本控制系统(CVCS)。所有的版本信息保存在中央服务器上,而开发者的工作副本则只包含最新的版本。

网络依赖性

  • Git: 可以在本地进行几乎所有的操作,因为每个仓库都包含了全部的项目历史记录。网络连接只在同步改动时(如推送或拉取)需要。
  • SVN: 对网络连接有较高的依赖性,因为许多操作(如提交、更新或查看历史记录)都需要访问中央服务器。

分支和合并

  • Git: 分支是其核心概念之一。创建、合并和删除分支非常快捷和简单,因此鼓励开发者频繁使用分支进行任务隔离。
  • SVN: 支持分支,但分支是作为目录来处理的。合并分支较Git更复杂,且由于其集中式的本质,分支操作是较重的网络操作。

性能

  • Git: 对所有类型的项目都提供了极高的性能,特别是在分支和合并操作上。因为所有操作几乎都在本地完成,所以非常快速。
  • SVN: 在处理大型二进制文件时性能较好,因为它们不需要在每次克隆时复制整个历史。但是,由于许多操作依赖于网络和中央服务器,某些操作可能比Git慢。

数据存储

  • Git: 通过快照方式存储数据。每次提交,Git几乎会为项目做一个完整的快照,并且只存储文件的变化,如果文件没有变化则存储一个链接指向之前存储的文件。
  • SVN: 保存文件的更改历史,并为文件系统中的每一项分配一个全局修订号。全局修订号是递增的。

安全和权限

  • Git: 通过SSH或HTTPS来管理对仓库的读/写权限。第三方服务(如GitHub、GitLab)通常提供更精细化的权限控制。
  • SVN: 提供了更细粒度的访问控制列表(ACL)配置,能够对目录和子目录设定不同的访问权限,适合对访问控制有严格要求的环境。

学习曲线

  • Git: 功能非常强大,但它有许多概念(如分支、远程、暂存区等)和命令,因此新用户的学习曲线可能较陡峭。
  • SVN: 概念相对简单,尤其是对于那些熟悉文件系统和客户端-服务器模型的人来说,学习起来或许更直观一些。

社区和工具

  • Git: 拥有庞大的社区支持和大量第三方工具集成。大多数现代开发工具和IDE都内置了Git支持。
  • SVN: 社区相对较小,工具也较少。虽然许多IDE和第三方工具支持SVN,但Git的支持更为广泛和深入。

典型用例

  • Git: 非常适合分布式团队和开源项目,因为它支持离线工作和强大的分支策略。
  • SVN: 对于那些需要严格的源代码控制和细粒度访问权限管理的企业环境更为适合。

应用场景

  • Git: 在小型到大型、复杂项目中表现出色,特别是在需要频繁分支和合并的敏捷开发环境中。
  • SVN: 在处理大型文件和需要严格审计跟踪的环境中更为适合。

总的来说,Git和SVN有着不同的设计哲学和最佳适用场景。Git的分布式特性、高效的分支管理和强大的社区支持使其成为当今开发者的首选。而SVN的集中式版本控制模型、细粒度权限管理则在某些组织和项目流程中仍然有其应用之处。选择哪个版本控制系统取决于项目需求、团队偏好以及现有的开发流程。

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

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

相关文章

《Python数据分析技术栈》第03章 02 数据结构(Structure of data)

02 数据结构(Structure of data) 《Python数据分析技术栈》第03章 02 数据结构(Structure of data) The data that we need to analyze could have any of the following structures, 我们需要分析的数据可能具有以下任何一种结…

RabbitMQ-数据持久化

一、持久化类型 1、交换机持久化(SpringAMQP默认) 2、队列持久化(SpringAMQP默认) 3、消息持久化 二、消息持久化 1、纯内存操作 如果采用纯内存操作,那么消息存储达到队列的上限之后,会有一个page ou…

开源进程/任务管理服务Meproc使用之HTTP API

本文讲述如何使用开源进程/任务管理服务Meproc的HTTP API管理整个服务。 Meproc所提供的全部 API 的 URL 都是相同的。 http://ip:port/proc例如 http://127.0.0.1:8606/proc在下面的小节中,我们使用curl命令向您展示 API 的方法、参数和请求正文。 启动任务 …

git 常规操作及设置

git 常规操作及设置 Git是一个分布式版本控制系统,可以用来跟踪文件的修改历史并与其他人进行协作开发。下面是一些常见的Git操作及设置: 初始化仓库:使用命令git init在当前目录创建一个新的Git仓库。 克隆仓库:使用命令git clo…

TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍

一、什么是服务器 能够为其他计算机提供服务的更高级的电脑 尺寸:Unit 1u1.75英寸44.45mm4.445cm IDC(机房) C/S结构 Client/Server客户端和服务端 二、TCP/IP协议 计算机与计算机之间通信的协议 三要素: IP地址 子网掩码 IP路由 I…

基于一次应用卡死问题所做的前端性能评估与优化尝试

问题背景 在上个月,由于客户反馈客户端卡死现象但我们远程却难以复现此现象,于是我们组织了一次现场上门故障排查,并希望基于此次观察与优化,为客户端开发提供一些整体的优化升级。当然,在尝试过程中,也发…

大模型实战营Day6 作业

基础作业 使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能 环境配置 conda create --name opencompass --clone/root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd openco…

eMMC之分区管理、总线协议和工作模式

一、eMMC 简介 eMMC 是 embedded MultiMediaCard 的简称。MultiMediaCard,即MMC, 是一种闪存卡(Flash Memory Card)标准,它定义了 MMC 的架构以及访问 Flash Memory 的接口和协议。而eMMC 则是对 MMC 的一个拓展&…

android 13.0 Camera2 去掉后置摄像头 仅支持前置摄像头功能

1.概述 在定制化13.0系统rom定制化开发中,当产品只有一个前置摄像头单摄像头,这时调用相机时就需要默认打开前置摄像头就需要来看调用摄像头这块的代码,屏蔽掉后置摄像头的调用api就可以了,接下来就来具体实现相关功能的开发 2.Camera2 去掉后置摄像头 仅支持前置摄像头功…

【Docker】使用Docker安装Nginx及部署前后端分离项目应用

一、Nginx介绍 Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它…

数据结构---栈(Stack)

一、基本概念 栈是一种线性数据结构 二、特点 栈是"后进先出(LIFO---Last In First Out)"的数据结构(盘子的叠放:当服务员将新的盘子放在餐桌上时,他们通常会将盘子放在已有的盘子堆的顶部。当顾客用完盘子后,服务员会从堆顶取走…

PostgreSQL 100条命令

我会为您提供一些 PostgreSQL 中最常用的命令: 1. 创建数据库:CREATE DATABASE database_name; 2. 连接到数据库:\c database_name; 3. 创建表格:CREATE TABLE table_name (column1 datatype, column2 datatype, ...); 4. 插入数…

内网环境横向移动——利用windows服务

利用windows服务进行横向渗透主要是通过sc命令,但是注意这里跟之前windows远程命令相比多了一个条件,即当前主机需要为administrator权限。 sc命令 sc命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。SC是用于与服务控…

SDCMS靶场通过

考察核心:MIME类型检测文件内容敏感语句检测 这个挺搞的,一开始一直以为检查文件后缀名的,每次上传都失败,上传的多了才发现某些后缀名改成php也可通过,png图片文件只把后缀名改成php也可以通过,之前不成功…

uniapp组件库Popup 弹出层 的使用方法

目录 #平台差异说明 #基本使用 #设置弹出层的方向 #设置弹出层的圆角 #控制弹窗的宽度 | 高度 #内容局部滚动 #API #Props #Event 弹出层容器,用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容…

CSS:backdrop-filter实现毛玻璃的效果

实现效果 实现代码 /* 关键属性 */ background-color: rgba(255, 255, 255, 0.4); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);完整代码 <style>/* 遮罩层 */.mo-mask {position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height…

【排序算法】五、冒泡排序(C/C++)

「前言」文章内容是排序算法之冒泡排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 冒泡排序1.1 原理1.2 代码实现&#xff08;C/C&#xff09;1.3 特性总结 冒泡排序 1.1…

WorkPlus AI助理私有化部署,助力企业降本增效

在当今数字化时代&#xff0c;提供卓越的客户服务成为了企业成功的重要因素。而AI智能客服技术的兴起&#xff0c;则成为了实现高效、快捷客户服务的利器。作为一款领先的AI助理解决方案&#xff0c;WorkPlus AI助理能够私有化部署&#xff0c;为企业打造私有知识库&#xff0c…

WorkPlus Meet私有化视频会议软件-构建安全高效的内网会议体验

在企业内部&#xff0c;高效的会议协作是推动团队协同和工作效率的关键。而内网会议系统成为了构建安全高效的内部会议体验的必要工具。作为一家领先的内网会议系统&#xff0c;WorkPlus Meet以其卓越的性能和智能化的功能&#xff0c;助力企业实现高效安全的内部会议体验。 为…

爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测

目录 背影 极限学习机 爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测(代码完整,数据)资源-CSDN文库 https://d…