Windows下版本控制器(SVN)-TortoiseSVN使用+权限配置+合并深度介绍+分支介绍

在这里插入图片描述

基础知识-Windows下版本控制器(SVN)

3.4 TortoiseSVN使用

3.4.1 SVN检出(SVN Checkout)

在这里插入图片描述
在这里插入图片描述

3.4.2 SVN更新(SVN Update)

在这里插入图片描述
在这里插入图片描述

3.4.3 SVN提交(SVN Commit)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4.4 SVN还原(SVN Revert)

指代项目版本回滚之前的某个版本

在这里插入图片描述
在这里插入图片描述
点击显示日志可以查看版本信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4.5 解决文件冲突

在这里插入图片描述

选中冲突文件,鼠标右键选择“编辑冲突”

在这里插入图片描述

在下方进行复制编辑,最后点击“保存”即可。

在这里插入图片描述

在这里插入图片描述

到现在文件状态就已经变了

在这里插入图片描述

3.4.6 授权访问

总结:

  • 如果是匿名访问(就是不用输入用户名+密码的访问方式),请只开启anon-access = write
  • 如果授权访问,请先设置anon-access = none,然后打开3个:auth-access = write、password-db = passwd、authz-db = authz

注意:必须设置anon-access = none,否则会代码提交报错失败。

①要设置授权访问就需要创建用户,并为用户设定权限

打开授权访问的配置

[1]打开 D:\DevRepository\Subversion\CRM\conf\svnserve.conf (svnserve.conf文件: 核心配置文件)

在这里插入图片描述

在这里插入图片描述

[2]将第 19 行 anon-access = write 注释掉:# anon-access = write

表明该版本库不接受匿名访问

[3]将第 20 行# auth-access = write 注释打开:auth-access = write

表明该版本库使用授权访问

[4]将第 27 行注释打开:password-db = passwd

表明使用同目录下的 passwd 文件保存用户信息

[5]将第 36 行注释打开:authz-db = authz (authz文件: 权限认证相关)

[6]打开 passwd 文件创建用户 (passwd文件: 用户密码相关)

tom = 123456
jerry = 123456
nick = 123456
tester = 123456

在这里插入图片描述

[7]打开 authz 文件:#后面注释的是例子

在这里插入图片描述

[/]表示该仓库下的所有路径

[CRM:/oneLayer/1]中CRM为仓库名,表示该仓库下的“/oneLayer/1”路径

@developer= rw 表示developer该组的所有成员访问权限为可读可写,设置组权限需要用@符号表示,而直接设置用户权限则不需要添加@

[CRM:/oneLayer/1]

jerry = rw,表示jerry 用户只拥有CRM仓库下/oneLayer/1路径下的所有读写权限访问权限,而/oneLayer/1前面的路径则没有访问权限

*= 因为后面没有写访问权限,所以表示其他人没有访问权限

<1>创建用户组

[groups] 
# harry_and_sally = harry,sally 
# harry_sally_and_joe = harry,sally,&joe 
@developer = rw

<2>指定路径,给用户和用户组授权

# [/foo/bar] 
# harry = rw 
# &joe = r 
# * =屏蔽那些未设定的用户,让它们没有任何权限 
[/]
@developer = rw
tester = r
* =
[CRM:/oneLayer/1]
jerry = rw

[CRM:/oneLayer/2]
nick = rw

<3>权限的继承性:父目录设置的权限,对子目录同样有效——除非子目录进行 了更为具体的设定(这个没验证过,需博主自己验证下)

[/subDir] 
userOther = rw 
* = 

这个例子表示当前版本库下的 subDir 目录只有 userOther 有读写权限,其它用户 无任何权限

模拟登录tom用户,验证能否提交成功。答案是可以提交。

在这里插入图片描述

模拟登录测试用户tester,验证能否提交成功。答案是不可以提交,因为权限不够。

在这里插入图片描述

在这里插入图片描述

做一个小测验,需求:假设我的项目结构如图,假设每一个包含text.txt的文件夹都是一个真实的项目,且存在多层级结构,我现在想实现tom用户具有CRM路径(目前CRM路径就是SVN的某一仓库的根目录)下的所有读写访问权限,而jerry用户只CRM/oneLayer/1路径下的读写权限,而nick用户只有CRM/oneLayer/2路径下的读写权限,而tester测试用户只有读权限没有写权限。

  • 这个项目想模拟的就是新建的tom用户具有管理员权限,jerry和nick用户只有部分路径的访问读写权限,而测试用户只有读没有写的权限。对应的真实场景就是:我自己搭建了SVN,我自己创建管理员账户并授权,但是新建别的用户我想控制权限,让他们只有自己项目的访问权限,而别人的项目没有拉取代码的权限,想演练下如何实现。

在这里插入图片描述

  • 前提说明:目前CRM路径就是SVN的某一仓库的根目录,就是对应auth配置文件中的[/]

  • passwd文件

    tom = 123456
    jerry = 123456
    nick = 123456
    tester = 123456
    
  • auth文件

    [groups]
    # 控制新增用户权限
    [/]
    @developer = rw
    tester = r
    * =
    [CRM:/oneLayer/1]
    jerry = rw
    
    [CRM:/oneLayer/2]
    nick = rw
    
  • 演练场景1,验证tom用户能否checkout下载/CRM/oneLayer/1下的项目oneLayerProject,如图,答案是可以成功下载,说明它拥有/路径下的所有权限。

在这里插入图片描述

  • 演练场景2,验证nick用户能否checkout下载/CRM/oneLayer/2下的项目twoLayerProject,如图,答案是可以成功下载,说明它拥有/oneLayer/2路径下的所有权限。

在这里插入图片描述

  • 演练场景3,验证nick用户能否checkout下载/CRM/oneLayer/1下的项目oneLayerProject,如图,答案是不可以成功下载,说明它没有/oneLayer/1路径下的所有权限。

在这里插入图片描述

3.4.7 显示日志(Show log)

通过此功能可以查到谁,什么时候,对那个目录下的那些文件进行了那些操作,如下图:

在这里插入图片描述
在这里插入图片描述

3.4.8 版本库浏览(Repo-browser)

此功能是用来浏览需要查看的资料库,在本地文件夹下点击右键,选择TortoiseSVNàRepo-browser,在弹出的对话框中输入资料库地址,再输入用户名和密码,就能查看到你需要查看到版本库的内容,在这你还能看到那些文件被谁锁定了,如下图:

在这里插入图片描述

3.4.9 TortoiseSVN更换或重置登录用户

1,打开SVN的settings

在这里插入图片描述

2,找到Saved Data栏,右侧Authentication data项点击清除按钮clear

在这里插入图片描述

3,再次打开SVN,会要求输入username和password

在这里插入图片描述

3.4.10 如何修改提交仓库地址

如果项目提交地址编写不规范,想重新命名提交个新的地址,但是不用IDEA只用TortoiseSVN情况下如何操作

答案:可以打开“版本库浏览器”,在左侧的目录树中进行创建、移动目录即可。

在这里插入图片描述

在这里插入图片描述

3.4.11 TortoiseSVN中创建版本库和导入区别
  • 创建版本库:对于真实的项目,您将在安全的地方设置一个存储库,并使用Subversion服务器对其进行控制。每个项目都需要创建版本库,才会有.svn文件,才能将项目进行SVN管理(实际是相当于创建了个某一种分类类型的仓库,它里面可以存放很多路径的项目,比如版本库叫“CRM仓库”,那么该路径下存储客户关系管理系统相关的项目;如果版本库叫“粮食仓库”,那么该路径下存储粮食管理系统相关的项目)
  • 导入:就是将某些文件导入到已创建版本库中。
3.4.12 合并分支代码

需求:这里为了演练一种场景,我主分支trunk_V01创建一个新的开发分支trunk_V02,然后主分支和新分支一起开发不同通能,最后我要把trunk_V02新分支合并到主分支trunk_V01上,要求是主分支新创建的文件要存在,新分支trunk_V02新创建的文件也要存在,冲突的相同文件名内容解决冲突即可。

说明:主分支trunk_V01里面只有一个文件text.txt文件,内容如图,然后将依照当前主分支创建新分支命名叫trunk_V02

在这里插入图片描述

接下来模拟两个分支不同开发,主分支创建新文件trunk_V01_01.txt,并且修改text.txt内容,然后新分支trunk_V02创建新文件trunk_V01_02.txt,并且修改text.txt内容,项目目录如图1,主分支如图2,新分支如图3

在这里插入图片描述

如图1

在这里插入图片描述

如图2

在这里插入图片描述

如图3
TortoiseSVN有2种合并方式

TortoiseSVN有2种合并方式:

在这里插入图片描述

  • 合并一个版本范围 Merge a range of revisions:此类型应用最为广泛,主要是把分支中的修改合并到主干上来。在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本。合并的源URL填写的是要合并的分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。如果只是选择其中一个版本,或者几个版本,那么就表示只是将制定的n个版本的变化合并到主干上。如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。
  • 合并两个不同的树 Merge two different trees:此类型与前1种类型不同,第一种类型可以选择分支合并的版本,主干不能选择版本;而这种类型则是无论是主干还是分支都可以选择合并的版本,即可以选择过去的一个主干版本与分支的某个版本进行合并。合并的时候以选择的分支版本为主,如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃
    • 起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)。
    • 结束URL:选择要合并的分支的URL。
    • 起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。
演示场景1:(合并一个版本范围 Merge a range of revisions)

演示场景1:(合并一个版本范围 Merge a range of revisions)

  1. 第一步,在文件夹trunk_V01点击右键“合并”

在这里插入图片描述

  1. 选择第一种合并类型

在这里插入图片描述

  1. 合并源url选择trunk_V01的地址,将要合并的修改版本范围选择所有版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,主分支trunk_V01新创建的文件trunk_V01_01.txt依然存在,新分支trunk_V02新创建的文件trunk_V02_01.txt也存在。(即:最终效果正确,就是我们想要的)

在这里插入图片描述

演示场景2:(合并两个不同的树 Merge two different trees),不设置主分支版本

演示场景2:(合并两个不同的树 Merge two different trees),不设置主分支版本

  1. 重复上面的第一步
  2. 选择第2种合并类型

在这里插入图片描述

  1. 选择起始、结束url,版本都用最新的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,但主分支trunk_V01新创建的文件trunk_V01_01.txt被删除了,新分支trunk_V02新创建的文件trunk_V02_01.txt存在。(即:最终效果不正确,新分支的确实都存在,但主分支新创建的文件全丢了)

在这里插入图片描述

问题:思考为啥这种方式对导致主分支新创建的文件丢失?

答案:因为创建新分支trunk_V02的时候主版本只有text.txt文件,而trunk_V01_01.txt是主分支后面新开发创建的,在合并的时候由于主分支采用最新版本情况下导致合并的时候不认识,所以导致合并会删除它。而场景3由于设置了主分支版本号,就相当于合并代码的时候是从主分支在最开始刚创建新分支的时候版本进行合并的,因此主分支新创建的文件trunk_V01_01.txt会被保留。

(我用大白话再表述一遍:当前主分支trunk_V01版本号为1的时候,主分支trunk_V01只有text.txt文件,这时候创建的新分支trunk_V02版本号为2,这时候分别开发提交自己代码,主分支trunk_V01新创建trunk_V01_01.txt文件并提交此时版本号为3,新分支trunk_V02也新创建trunk_V02_01.txt文件并提交此时版本号为4,此时再进行合并代码的时候由于新分支trunk_V02是从主分支trunk_V01版本号为1时创建过来的,所以SVN只认识主分支上版本号为1之前的所有改动,即只认识text.txt文件,而后来的trunk_V01_01.txt文件是主分支trunk_V01新创建的,所以SVN不认识,这就导致合并的时候给它删了。即:所谓的分支版本合并,就是把两个分支设置版本号之前的所有改动给统一合并代码。)

在这里插入图片描述

演示场景3:(合并两个不同的树 Merge two different trees),设置主分支版本

演示场景3:(合并两个不同的树 Merge two different trees),设置主分支版本

  1. 重复上面的前两步
  2. 主分支版本设置为创建新分支trunk_V02时候的版本,具体方法可查看“版本分支图”,选中新分支trunk_V02文件夹点击右键“版本分支图”查看,可以查看起始版本是116,说明主分支当时的版本是115(即在主分支115版本时进行创建了新分支trunk_V02,所以第三步这里输入115)

在这里插入图片描述

在这里插入图片描述

  1. 选择起始、结束url,主分支版本进行设置,新分支采用最新的版本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 打开合并后的文件夹查看,最终效果是:text.txt冲突了但解决了冲突之后拥有全新的代码,主分支trunk_V01新创建的文件trunk_V01_01.txt依然存在,新分支trunk_V02新创建的文件trunk_V02_01.txt也存在。(即:最终效果正确,就是我们想要的)

在这里插入图片描述

结论总结:

结论总结:

结论1:“合并一个版本范围”方式是默认合并方式。

结论2:“合并一个版本范围”方式相当于往主分支最新版本上面合代码,因为它不像第二种方式可以指定主分支版本号。

结论3:“合并两个不同树“方式相当于更细化的合并操作,可以分别指派主分支和新分支的版本号进行两两合并,效果更自由。

结论4:“合并一个版本范围”方式和“合并两个不同树且设置主分支版本”方式效果是一样的。

结论5:“合并两个不同树且不设置主分支版本”方式,那么最终的效果就是:如果选择的主干版本与分支版本有不同的地方,合并时主干部分将被放弃。(这就是为什么演练场景2时发现主分支丢文件了,被删除了。)

3.4.13 删除分支

假设我想删除copyCRM项目分支代码

  • 选中文件夹,鼠标右键打开“版本库浏览器”

在这里插入图片描述

在这里插入图片描述

  • 在“版本库浏览器”页面中选中文件夹,点击右键直接删除

在这里插入图片描述

3.4.14 Import(导入)

选择要提交到服务器的目录,右键选择TortoiseSVN----Import,系统弹出导入提示框,在URL of repository输入框中输入服务器仓库地址,在Import Message输入框中输入导入日志信息,点击确定,则文件导入到服务器仓库中。

3.4.15 Add(加入)

如果有多个文件及文件夹要提交到服务器,我们可以先把这些要提交的文件加入到提交列表中,要执行提交操作,一次性把所有文件提交,如图,可以选择要提交的文件,然后点击执行提交(SVN Commit),即可把所有文件一次性提交到服务器上。

3.4.16 Revision Graph(版本分支图)

查看文件的分支,版本结构,可以点击Revision Graph,系统以图形化形式显示版本分支。

3.4.17 Branch/Tag(分支/标记)

当需要创建分支,点击Branch/Tag,在弹出的提示框中,输入分支文件名,输入日志信息,点击确定,分支创建成功,然后可查看文件的版本分支情况。

3.5 权限配置

3.5.1 单一版本库权限配置

①要设置授权访问就需要创建用户,并为用户设定权限

②打开授权访问的配置
[1]打开 D:\DevRepository\Subversion\ERP\conf\svnserve.conf
[2]将第 19 行 anon-access = write 注释掉:# anon-access = write 或者放开写成anon-access = none

表明该版本库不接受匿名访问
[3]将第 20 行# auth-access = write 注释打开:auth-access = write

表明该版本库使用授权访问
[4]将第 27 行注释打开:password-db = passwd

表明使用同目录下的 passwd 文件保存用户信息

[5]将第 36 行注释打开:authz-db = authz

表明使用同目录下的 authz 文件保存权限信息
[6]打开 passwd 文件创建用户

userWrite01 = 123456 
userWrite02 = 123456 
userRead = 123456 
userOther = 123456

[7]打开 authz 文件:#后面注释的是例子
<1>创建用户组

[groups] 
# harry_and_sally = harry,sally 
# harry_sally_and_joe = harry,sally,&joe 
canWrite = userWrite01,userWrite02 

<2>指定路径,给用户和用户组授权

# [/foo/bar] 
# harry = rw 
# &joe = r 
# * =屏蔽那些未设定的用户,让它们没有任何权限 
[/] 
@canWrite = rw 
userRead = r 
* = 

<3>权限的继承性:父目录设置的权限,对子目录同样有效——除非子目录进行
了更为具体的设定

[/subDir] 
userOther = rw 
* = 

这个例子表示当前版本库下的 subDir 目录只有 userOther 有读写权限,其它用户 无任何权限 。

3.5.2 多版本库共享配置

在版本库根目录 D:\DevRepository\Subversion 下创建 commConf 目录
将未修改的 authz 和 passwd 文件拷贝到 commConf 目录下
修改需要设置权限的版本库的 svnserve.conf 文件

①password-db = …/…/commConf/passwd

②authz-db = …/…/commConf/authz
在 password 中创建用户

[users] 
# harry = harryssecret 
# sally = sallyssecret 
 
userERP = 123456
userOA = 123456 
userCRM = 123456

在 authz 中针对不同版本库为不同用户授予权限

# [repository:/baz/fuz] 
# @harry_and_sally = rw 
# * = r 
 
[ERP:/] 
userERP = rw 
* = 
 
[OA:/] 
userOA = rw 
* = 
 
[CRM:/] 
userCRM = rw 
* = 

3.6 合并深度介绍

在这里插入图片描述

  1. Working copy(工作副本):即你当前的工作目录,一般默认为这个选项;
  2. Recursively(递归):即你选择的目录的版本库,包括了其下面的子文件,子文件夹,包括子文件夹里面的内容;
  3. Direct children(直接子节点):即你选择的目录下面的文件,文件夹,但是不包括文件夹里面的子文件,子文件夹;
  4. Files in a folder(仅文件子节点):即你选择的目录下面的文件,但不包括文件夹,当然不包括的文件夹下面的所有内容也都不纳入合并范围;
  5. Only a folder(仅此项):没有任何合并内容。

总结:默认每次提交就选“工作副本”选项就可以的,其他的我没验证过效果。

3.7 分支介绍

大致分类为3种:trunk、branches、tags

  • trunk:主干,我们一般把项目提交到此文件夹里面,在trunk中开发。
  • branches:分支,我们一般把那些需要打分支,但是有可能会修改的项目代码,打分支到此目录。
  • tags:分支,我们一般把那些阶段性(如迭代各期)的项目代码,打分支到此目录。

本人其他相关文章链接

1.Windows下版本控制器(SVN) - 1、开发中的实际问题+2、版本控制简介
2.Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
3.Windows下版本控制器(SVN)-TortoiseSVN使用+权限配置+合并深度介绍+分支介绍
4.Windows下版本控制器(SVN)- 配置版本库
5.Windows下版本控制器(SVN)-启动服务器端程序
6.TortoiseSVN使用-授权访问
7.TortoiseSVN使用-TortoiseSVN更换或重置登录用户
8.TortoiseSVN使用-合并分支代码
9.TortoiseSVN使用-权限配置
10.TortoiseSVN使用-合并深度介绍

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: tortoisesvn-1.14.0.28885-x64-svn-1.14.0官方安装包64位中既没有包含中文语言包。罗夏公司的TortoiseSVN是一个免费开源的版本控制软件,用于Windows操作系统。TortoiseSVN支持多种语言,但默认情况下并不包括中文。您可以通过以下步骤安装中文语言包: 1. 首先,从TortoiseSVN官方网站(https://tortoisesvn.net/downloads.html)下载适用于Windows的最新版本TortoiseSVN安装包。 2. 从上述网站下载中文语言包。目前官方网站提供的中文语言包已有较久,您可以尝试下载svn-win32-1.9.6.zip中的TortoiseSVN-1.9.6.27867-win32-svn-1.9.6.msi程序进行安装。 3. 解压TortoiseSVN安装包和中文语言包。双击打开TortoiseSVN安装包的.msi文件,按照提示完成安装过程。 4. 安装完成后,打开TortoiseSVN的设置窗口。在Windows资源管理器中,右击任意文件夹,选择“TortoiseSVN”选项,再点击“设置”选项。 5. 在弹出的设置窗口中,选择“界面语言”选项卡。在下拉菜单中,选择中文语言包。 6. 点击“确定”保存设置,重新启动计算机。 7. 系统重启后,您将看到TortoiseSVN已经切换为中文界面语言。 请注意,中文语言包可能不是官方提供的,因此安装过程可能会稍有不同。您还可以在各种软件下载网站或开源社区中寻找可以与TortoiseSVN 1.14.0版本兼容的中文语言包。 ### 回答2: tortoisesvn-1.14.0.28885-x64-svn-1.14.0官方安装包64位 中文语言包是TortoiseSVN的一个附加组件,用于将软件界面和提示信息转换为中文。可以通过以下步骤下载和安装它: 1. 打开TortoiseSVN的官方网站(https://tortoisesvn.net/downloads.html)。 2. 在网站上找到"Latest stable version"(最新稳定版本)部分,并点击64位操作系统的"Full installer"(完整安装程序)链接进行下载。 3. 下载完成后找到下载文件,双击运行安装程序。 4. 在安装向导中,选择安装语言为中文,然后按照指示完成安装。 5. 安装完成后,重新启动电脑。 6. 启动TortoiseSVN时,你会发现软件界面已经转换为中文了。 值得注意的是,TortoiseSVN的官方网站提供了多个其他语言版本的安装包,你可以选择适合自己的语言进行安装。另外,为了确保软件能够正常工作,建议使用TortoiseSVN版本相匹配的中文语言包。若出现任何问题,可以在TortoiseSVN的官方网站中查找帮助文档或联系社区支持。 ### 回答3: tortoisesvn-1.14.0.28885-x64-svn-1.14.0官方安装包64位中文语言包是用于安装TortoiseSVN软件的一个组件,它使得TortoiseSVN的界面和菜单选项显示为中文,方便中文用户使用。该语言包可以在TortoiseSVN官方网站下载并安装。安装过程如下: 1. 首先,打开TortoiseSVN官方网站,找到下载页面。 2. 在下载页面中找到对应的版本号为"tortoisesvn-1.14.0.28885-x64-svn-1.14.0"的安装包。 3. 确保选择的是64位版本的安装包,因为64位版本适用于大多数现代操作系统。 4. 在同一下载页面上,找到中文语言包的下载链接。一般情况下,官方网站会提供中文语言包的下载选项。 5. 点击中文语言包的下载链接,开始下载。 6. 下载完成后,双击安装包进行安装。根据安装程序的提示,选择合适的安装选项并完成安装过程。 7. 安装完成后,打开TortoiseSVN,你会发现界面和菜单选项已经变为中文。 通过以上步骤,你可以完成tortoisesvn-1.14.0.28885-x64-svn-1.14.0官方安装包64位中文语言包的下载和安装。安装后,你可以使用TortoiseSVN来管理和版本控制你的项目文件,并享受使用中文界面带来的便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值