SVN版本控制软件

news2024/11/24 20:42:43

尚硅谷SVN版本控制软件教程(一套掌握svn操作)

学习网址:https://www.bilibili.com/video/BV1mW411M7yR/?spm_id_from=333.999.0.0&vd_source=461545ff50a35eaeaa8218ecdc5f7152

学习时长:1小时46分钟

未学习
5.启动服务器
6.命令行
12.权限

1.提出问题

开发中的实际问题

  1. 小明负责的模块就要完成了,就在即将 Release 之前的一瞬间,电脑突然蓝屏, 硬盘光荣牺牲!几个月来的努力付之东流——需求之一:备份
  2. 这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这 被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦 A 梦的时光机啊? 需求之二:代码还原
  3. 小刚和小强先后从文件服务器上下载了同一个文件: Analysis.java 。小刚在Analysis.java 文件中的第 30 行声明了一个方法,叫 count(),先保存到了文件服务器上;小强在 Analysis.java 文件中的第 50 行声明了一个方法,叫 sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记忆中了——需求之三:协同修改
  4. 老许是一位项目经理,我会告诉你他把每一个版本都保存一份吗?我会告诉你这些工程里其实有很多文件都是重复的吗?我会告诉你老许为这事删了很多电影吗?——需求之四:多版本项目文件管理
  5. 老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个该死的 Bug 调试了 30 多个小时才知道是因为相关属性没有在应用初始化时赋值!可是二胖、王东、刘流和正经牛都不承认是自己干的!——需求之五:追溯问题代码的编写人和编写时间
  6. 小温这两天幸福的如同掉进了蜜罐里,因为他成功的得到了前台 MM 丽丽的芳心, 可他郁闷的是这几天总是收到 QA 小组的邮件,要求他修正程序中存在的 Bug, 可他自己本地电脑上是没有这些 Bug 的,“难道我的代码被哪个孙子给改了?”。是的,小温没来的时候,丽丽是 QA 小组小郑的女朋友啊!——需求之六:权限控制

2.SVN简介

版本控制简介

  1. 版本控制[Revision control],最初来源于工程设计领域,是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化, 以便将来查阅特定版本修订情况的系统。
  2. Subversion 就是一款实现版本控制的工具软件,通常也称为版本控制器,简称 SVN。Subversion 是 Apache 软件基金会组织下的一个项目。
  3. Subversion 的优良特性
    ①目录版本控制
    CVS 只能追踪单个文件的历史,但是 Subversion 实现了一个“虚拟”文件系统,可以追踪整个目录树的修改,文件和目录都是版本控制的,结果就是可以在客户端对文件和目录执行移动和复制命令。
    ②原子提交
    提交要么完全进入版本库,要么一点都没有,这允许开发者以一个逻辑块提交修改。
    ③版本控制的元数据
    每个文件和目录都有一组附加的“属性”,你可以发明和保存任意的键/值对, 属性也会像文件内容一样被纳入版本控制。
    ④可选的网络层
    Subversion 在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制,Subversion 的“高级”服务器是 Apache 网络服务器的一个模块,使用 HTTP 的变种协议 WebDAV/DeltaV 通讯,这给了 Subversion 在稳定性和交互性方面很大的好处,可以直接使用服务器的特性,例如认证、授权、传输压缩和版本库浏览等等。也有一个轻型的,单独运行的 Subversion 服务器,这个服务器使用自己的协议,可以轻松的用 SSH 封装。
    ⑤一致的数据处理
    Subversion 使用二进制文件差异算法展现文件的区别,对于文本(人类可读) 和二进制(人类不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,差异在网络上双向传递。
    ⑥高效的分支和标签
    分支与标签的代价不与工程的大小成比例,Subversion 建立分支与标签时只是复制项目,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间,以及很小的版本库空间。
  4. SVN 的工作原理:采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本,所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。SVN 支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最新改变更新到服务器端,而且后面的更新不会覆盖前面的更新,而是作为一个新 的版本被保存下来——SVN 甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。
  5. SVN 基本操作
    在这里插入图片描述
    检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。
    更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时
    或修改公共文件之前执行一次。
    提交(commit):将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。

3.服务端程序安装

参考文章:【图文详解】入职必备——SVN使用教程

SVN官网:https://svnbucket.com/

4.创建版本库

①为什么要配置版本库?
Subversion 是将文件数据信息保存到版本库中进行管理的,为了满足用户的不同需求,Subversion 允许用户对版本库目录进行定制。

②在一个非中文无空格目录下创建一个文件夹,作为版本库的根目录。例如:D:\DevRepository\Subversion

③在版本库根目录下创建与具体项目对应的子目录——这样做的目的是使一个
SVN 服务器能够同时管理多个项目,而不是为每一个项目搭建一个 SVN 服务器——这显然太浪费资源了。
例如:D:\DevRepository\Subversion\CRM D:\DevRepository\Subversion\ERP D:\DevRepository\Subversion\OA

④创建版本库命令格式
在这里插入图片描述
⑤版本库目录结构
版本库创建成功后会在指定目录下产生如下的目录结构
在这里插入图片描述

5.启动服务器

6.命令行

7.Eclipse插件安装

1.Eclipse 插件应用市场
在 Eclipse 中访问 Eclipse Marketplace Client 可以搜索 Subversion,下载插件,按提示安装即可。

2.使用压缩包
如果不能联网可以使用下载好的插件压缩包 eclipse_svn_site-1.10.5.zip,这个压缩包是从 http://subclipse.tigris.org/网站(subclipse 是这款 Eclipse 插件的名称)上下载的。安装方法是:

  1. 解压 eclipse_svn_site-1.10.5.zip 中的 features 和 plugins 这两个目录
  2. 将 features 和 plugins 复制到 Eclipse 安装目录/dropins/eclipse_svn_site-1.10.5 下面
  3. 重启 Eclipse
  4. 进入 Eclipse 依次打开 Window→Preferences→Team→SVN,看到如下界面即说明 SVN 插件安装成功

在这里插入图片描述

8.Eclipse分享和检出

共享项目
1.在 Eclipse 中创建的新项目想要发布到 SVN 服务器端,可以通过“共享”项目实现
2.在项目上点右键→Team→Share Project…→选择一种版本控制工具

在这里插入图片描述
选择一个资源库位置
在这里插入图片描述
在这里插入图片描述
切换到 Team Synchronizing 透视图,选择项目中要提交的内容,通常是项目中的全部内容
在这里插入图片描述

检出
检出(下载文件)分两种情况
1.从服务器端获取到的是一些零散的文件,不能作为项目检出
在这里插入图片描述
此时会弹出一个新建项目向导,之所以会这样是因为我们需要创建一个项目来保存从服务器端取回的文件
在这里插入图片描述
2.从服务器端获取到的是一个完整的项目
例如
在这里插入图片描述
此时必须作为项目检出
在这里插入图片描述
在这里插入图片描述
项目从服务器检出后,会成为一个工作副本,根目录下会自动创建.svn 隐藏目录

9.更新提交

提交

  1. 新创建文件后,文件图标上会以“?”标识,表示该文件尚未纳入版本控制
  2. 在新创建的文件上点右键→Team→添加至版本控制,这样文件图标上会显示“+”,表示当前文件已纳入版本控制,但还未提交至服务器。
  3. 在要提交的文件上点右键→Team→提交…会提交文件,在弹出的对话框中可以不填写日志。文件提交后,图标会变为“金色的圆柱体”表示当前文件的版本和服务器端一致。
  4. 文件修改后图标会变为“*”,表示当前文件或目录包含未提交的修改。在文件上点右键→Team→提交,进行提交

更新
①更新整个项目时可以在项目上点右键→Team→更新
②更新某个具体的文件时,可以在文件上点右键→Team→更新

10.仓库分析

创建资源库位置
1.切换到透视图 SVN 资源库研究
2.创建资源库位置
在这里插入图片描述
在这里插入图片描述
此时可以查看版本库中的文件及目录结构
补充:如何确定版本库地址?
在这里插入图片描述

11.冲突

什么情况下会发生冲突
在这里插入图片描述
1.两个开发人员,Harry 和 Sally,分别从服务器端下载了文件 A。
2.Harry 修改之后,A 变成了 A’,Sally 修改之后,A 变成了 A’’。
3.Harry 先一步提交,使服务器端文件的版本也变成了 A’
4.Sally 本地的文件 A’’已经过时了,此时她已无法提交文件,服务器会要求她先进行一次更新操作。
5.此时 Sally 的更新操作有两种可能
(1) Sally 所做的修改与 Harry 不是同一个位置,更新操作尝试合并文件成功。
(2) Sally 所做的修改与 Harry 恰好是同一个位置,更新操作尝试合并文件失败, 发生冲突。

发生冲突后,本地工作副本会发生如下变化
(1)文件 A 中的内容发生如下改变

public static void main(String[] args) { 
	System.out.println("Edit By Command!"); 
	System.out.println("Edit By Command!");
<<<<<<< .mine
	System.out.println("Edit By Eclipse!");//本地文件
=======
	System.out.println("Edit By Command!New Edit");//服务器文件
>>>>>>> .r14
	System.out.println("Edit By Command!"); 
	System.out.println("Edit By Command!");
}

其中,从mine 到=之间是发生冲突时本地副本的内容。从
=到r14 是发生冲突时服务器端的最新内容。注意这里 r 后面的数字是发生冲突时服务器端的版本号,有可能是任何整数值,r14 只是一个例子。
同时文件图标变成一个“黄色的!”。
(2)与冲突文件同目录下新增文件,扩展名为.mine,其内容是发生冲突时本地副本的文件内容。
(3)与冲突文件同目录下新增文件,扩展名为.r 小版本号,例如 MyCRM.java.r13, 其内容是冲突发生之前,服务器端的文件内容,可以作为解决冲突的参照。
(4)与冲突文件同目录下新增文件,扩展名为.r 大版本号,例如 MyCRM.java.r14, 其内容是冲突发生时,服务器端的文件内容。

解决冲突
(1)在冲突文件上点右键→Team→编辑冲突…→出现如下界面
Merged:合并(本地版本)
Theirs:他们的(服务器版本)
在这里插入图片描述
以对比的方式将本地内容与冲突内容显示出来,其中左侧为本地内容,右侧为冲突内容。其中本地内容是可以修改的。

(2)根据需要和实际情况将本地内容更正——这个过程很可能需要牵涉冲突的
两位开发人员进行必要的沟通——机器与程序目前还不能完全取代人工智能。更正后文件图标会变成一个“四角形”,同时冲突文件内的<<<<<<< .mine、======= 以及>>>>>>> .r14 等标记都会被去掉。

(3)在冲突文件上点右键→Team→标记为解决
随便选
在这里插入图片描述
此时.mine 文件和.r 版本号文件都会被自动删除,冲突文件的图标变为“*”,表示可以提交。文件本身变为解决冲突之后的状态。

(4)提交文件,文件图标变为“金色圆柱体”。

12.权限

13.时光机

回复历史版本
1.在需要回复的文件上点右键→Team→显示资源历史记录→得到如下界面
在这里插入图片描述
2.选择某一个历史记录点右键→获取内容。文件就会恢复到指定版本的状态,同时图标变为“*”。
3.获取历史记录时,如果出现如下错误提示

在这里插入图片描述
可以通过将对应版本库中的 svnserve.conf 文件中的 anon-access 设置为 none 解决。

14.TortoiseSVN

TortoiseSVN 简介
TortoiseSVN 是一个 Windows 下的版本控制系统 Apache™ Subversion®的客户端工具。
在这里插入图片描述

TortoiseSVN 的优良特性
①外壳集成
TortoiseSVN 无缝地整合进 Windows 的外壳(例如资源管理器)。
②重载图标
每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。
③图形用户界面
当你列出文件或文件夹的更改时,你可以点击任意版本查看提交注释。也可以看到更改过的文件列表 - 只要双击文件就可以查看更改内容。
提交对话框列出了本次提交将要包括的条目,每一个条目有一个复选框,所
以你可以选择包括哪些条目。未版本控制的文件也会被列出,以防你忘记添加新文件。
④Subversion 命令的简便访问
所有的 Subversion 命令存在于资源管理器的右键菜单,TortoiseSVN 在那里添加子菜单。

1.检出

①创建一个目录用来存放检出得到的文件,例如 MyCRM
②进入目录 MyCRM,点右键
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③可以看到检出得到的文件
在这里插入图片描述
此时文件图标上没有任何标识。可能你会想到通过重启电脑的方式解决这一问题——其实不用这么麻烦。文件图标是受外壳程序控制的,我们只需要重启外壳程序——explorer.exe 就可以了。打开任务管理器,选中 explorer.exe 进程,结束进程,然后新建进程 explorer.exe 就可以了。

如果一切顺利的话,你会看到文件图标变成了这样:
在这里插入图片描述

2.TortoiseSVN 图标含义

在这里插入图片描述

3.纳入版本控制

①新建文件 abc.txt
②在文件上点右键
在这里插入图片描述
③添加后文件图标发生变化
在这里插入图片描述

4.提交

1.使用 TortoiseSVN 可以提交具体某一个文件,或某一个目录下的所有改变。方法就是在想要提交的项目下点右键,然后 SVN Commit…,就可以看到如下界面
在这里插入图片描述
2.日志内容如果不填,TortoiseSVN 会提交一个空字符串作为日志信息。
3.提交后显示信息如下
在这里插入图片描述
4.没有纳入版本控制的文件默认是不在提交范围内的,直接在新创建的文件上点右键只能看到 add 操作的选项,如前所述。但在新创建的文件所在目录点右键选择 SVN commit…,可以看到如下界面
在这里插入图片描述
将文件 newFile.txt 选中
在这里插入图片描述
同样可以提交文件,TortoiseSVN 会帮我们自动将 newFile.txt 纳入版本控制
在这里插入图片描述

5.更新

在要更新的文件或目录上点右键→SVN Update
在这里插入图片描述

6.回复历史版本

①查看历史版本内容
[1]首先需要把对应版本库的匿名访问权限设置为 none:anon-access = none
[2]在要查看历史版本的文件上点右键→TortoiseSVN→Show log
在这里插入图片描述
[3]在感兴趣的历史版本上点右键,可以与当前工作副本进行比较,或直接打开。
在这里插入图片描述
②在要回复历史版本的文件上点右键→Update to revision
在这里插入图片描述
填上想要回到的版本即可
在这里插入图片描述

7.解决冲突

1.文件发生冲突时的状态和在 Eclipse 中一样,这里就不赘述了。
2.在冲突的文件上点右键→Edit Conflicts
Theirs:远程文件
Mine:本地文件
Merged:已合并文件
在这里插入图片描述
3.有“叹号”的行是发生冲突的行
在这里插入图片描述
4.在冲突行点右键
在这里插入图片描述
可以选择四种操作:
[1]使用他们的:from ‘theirs’
[2]使用我的:from ‘mine’
[3]把我的放在他们的前面:from ‘mine’ before ‘theirs’
[4]把他们的放在我的前面:from ‘theirs’ before ‘theirs’

5.在冲突解决后,直接保存——这时 TortoiseSVN 自动弹出如下确认界面
冲突解决
保留冲突
在这里插入图片描述
6.文件变为红色叹号标志,自动生成的三个文件被删除。提交修改即可。

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

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

相关文章

维视智造明星产品推荐(一) 环外侧工业镜头

维视智造明星产品推荐&#xff08;一&#xff09;环外侧工业镜头 市场洞察 产品外观质量检测及标签检测&#xff0c;是工业制造中常见的两个质检场景。根据产品特点及产线环境&#xff0c;往往可以做多种检测方案的选择。在圆柱状产品如药瓶、瓶盖、齿轮、螺母等的生产检测中&a…

11.30排序

目录 一.排序 1.概念 1.1排序 1.2稳定性 2.七大基于比较的排序 二.插入排序 3.1 直接插入排序-原理 2.折半插入排序 3.分析 二.每日一题订正 1.选择题 2.不要二 三.希尔排序 1 原理 2.代码实现 3.分析 四.选择排序 1.原理 2.代码 3.优化版 4.分析 五.测量…

使用Cpolar内网穿透开启群晖WebDAV

文章目录1.前言2.群晖组件安装2.1.软件安装&#xff08;1&#xff09;WebDav server套件下载安装&#xff08;2&#xff09;cpolar套件下载安装&#xff08;3&#xff09;RaiDrive的下载安装2.2.群晖NAS端软件的设置2.3.Cpolar云端设置2.4.Cpolar本地设置3.访问端软件设置4.公网…

Pytorch的入门操作(三)

2.7 使用Pytorch实现手写数字识别 2.7.1 目标 知道如何使用Pytorch完成神经网络的构建知道Pytorch中激活函数的使用方法知道Pytorch中torchvision.transforms 中常见图形处理函数的使用知道如何训练模型和如何评估模型 2.7.2 思路和流程分析 流程: 准备数据&#xff0c;这…

推荐系统-召回-概述(五):一切为了业务

在前面几篇文章里&#xff0c;我们介绍了主流的召回模型和算法。但算法更多地是从个性化推荐的角度来解决问题。许多业务上的问题&#xff0c;如安全问题、商业价值、用户体验、流量扶持等种种业务需求&#xff0c;仅仅基于模型&#xff0c;是无法得到完美解决的&#xff0c;它…

成长的旅途,未知的邂逅

成长的旅途&#xff0c;未知的邂逅兰舟千帆纷繁复杂&#xff0c;斑驳陆离的岁月邂逅&#xff1f;出发&#xff01;兰舟千帆 我是兰舟千帆&#xff0c;从2020年加入csdn写博客到现在差不多就是两年了。马上也就三年了。这样的时间段&#xff0c;也同样记录着我的成长。哎嘿。我现…

构建基于 Ingress 的全链路灰度能力

作者&#xff1a;涂鸦 背景 随着云原生技术不断普及&#xff0c;越来越多的业务应用开始向云原生架构转变&#xff0c;借助容器管理平台 Kubernetes 的不可变基础设施、弹性扩缩容和高扩展性&#xff0c;助力业务迅速完成数字化转型。其中&#xff0c;集群入口流量管理方式在…

清朝盛衰的六个时间点!

清朝盛衰的整个过程经历了六个时间节点&#xff1a; 一六六一年﹙顺治十八年﹚是第一个时间节点。 正月初六夜半时分&#xff0c;顺治帝预感生命垂危&#xff0c;急命太监传呼麻勒吉与王熙两人赶赴养心殿。帝对王熙说&#xff1a;“朕出痘&#xff0c;势将不起&#xff0c;尔…

[附源码]Python计算机毕业设计Django高校流浪动物领养网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

PCB信号仿真之为什么DDR走线要同组同层?

作者&#xff1a;一博科技高速先生成员 刘春 随着信号速率的不断提高&#xff0c;对信号时序的要求也越来越严格。在PCB设计中&#xff0c;我们等长的最终目的都是为了等时&#xff0c;以满足信号的时序要求。因此&#xff0c;需要我们对信号在传输线上的时延有一定的了解&…

python之文件操作相关知识

python之文件操作相关知识 一、文件的打开与关闭 1、打开文件 在Python中&#xff0c;使用 open() 函数&#xff0c;可以打开一个已经存在的文件&#xff0c;或创建一个新文件 语法如下&#xff1a; open(文件名, 访问模式) 说明&#xff1a; 访问模式决定了打开文件的模式&…

【自然语言处理(NLP)】基于SQuAD的机器阅读理解

【自然语言处理&#xff08;NLP&#xff09;】基于SQuAD的机器阅读理解 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国高等学…

vue3和vue2组件风格对比

Vue3 组合式 API&#xff08;Composition API&#xff09; 主要用于在大型组件中提高代码逻辑的可复用性。 传统的组件随着业务复杂度越来越高&#xff0c;代码量会不断的加大&#xff0c;整个代码逻辑都不易阅读和理解。 Vue3 使用组合式 API 的地方为 setup。 在 setup 中…

无代码资讯|SAP发布低代码平台;钉钉低代码应用数破500万;轻流举办无代码城市论坛......

栏目导读&#xff1a;无代码资讯栏目从全球视角出发&#xff0c;带您了解无代码相关最新资讯。 TOP3 大事件 1、SAP 召开“SAP TechEd ”大会&#xff0c;发布低代码平台 SAP Build 11 月 15 日-16 日&#xff0c;全球企服巨头 SAP 在美国拉斯维加斯召开“2022 SAP TechEd”产…

MySQL是如何实现事务的隔离级别

MySQL是如何实现事务的隔离级别 - 游生 - 博客园 摘要 本文旨在了解MySQL InnoDB引擎如何支持事务的隔离级别。 文章主要内容分两个部分。 第一部分阐述数据库的并发问题以及为之产生的ANSI SQL 标准隔离级别。 第二部分根据 MySQL 官方文档解释 InnoDB 是如何支持这些隔离…

关于python中自带的类似postman的工具

关于python中自带的类似postman的工具 1.新建一个http 请求&#xff1a; 2.添加请求方式 2.1程序运行 验证数据的运行&#xff1a; 1.post数据添加验证

打造无证服务化:这个政务服务平台有点不一样

摘要&#xff1a;华为云携手深圳市华傲数据技术有限公司针对“数字政府建设”与“数字经济发展”两大场景&#xff0c;打造华傲可信政务区块链解决方案。本文分享自华为云社区《华为云携手华傲数据打造“无证服务”政务服务平台》&#xff0c;作者&#xff1a;灰灰哒 。 当前&…

xray扫描器的使用长亭xray被动扫描

长亭xray被动扫描为了实现点到哪里扫到哪里&#xff0c;用长亭xray配合burp suite插件 插件名为Passive Scan Client GitHub - lilifengcode/Burpsuite-Plugins-Usage: Burpsuite-Plugins-Usage 就用默认端口1664就行&#xff0c;把浏览器代理设成127.0.01 &#xff1a; 1664…

【Pandas数据处理100例】(八十七):Pandas使用get_dummies构建哑变量

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

<学习笔记>从零开始自学Python-之-web应用框架Django( 十一)用户系统和身份验证

用户系统是现代网站的重要组成部分&#xff0c;对用户进行分组权限管理是非常必要的。 Django内置了一套用户和身份验证系统&#xff0c;不用太多代码开发就可以使用这个系统。 Django 的身份验证系统包括&#xff1a; • 用户 • 权限&#xff1a;二元&#xff08;是或否&…