[Git]大话Git

本篇博客分享目标:

  • 即使版本控制概念也能明白Git是在做什么
  • 可以熟练使用Git基础指令进行操作
  • 掌握Git GUI操作方法
  • 简单了解Git的工作机制

目录

1 Git介绍

本章节主要从五个W(Who、What、When、Why、Where)介绍Git,在开始介绍本章节之前,先抛出两个问题:

  • 什么是版本控制
  • 为什么需要Git

1.1 什么是Git(Who)

在这里插入图片描述
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git易于学习,占用面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1.2 什么是版本控制(What)

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够中查看历史版本,方便版本切换。
在这里插入图片描述

1.3 为什么要使用版本控制系统(When、Why)

  • 可以更加快速高效地管理文件
  • 从个人开发过渡到团队协作
    在这里插入图片描述

1.4 版本控制系统有哪些(Where)

1.4.1 本地版本控制系统

在这里插入图片描述
代表:RCS
本地版本控制系统就是在计算机的磁盘中保存文件修订前后的变化,对每一个版本生成一个版本号,通过应用所有的补丁,可以计算出各个版本的文件内容,方便个人进行版本的来回切换.
优点:实现了个人对文件的版本控制
缺点:没办法进行团队协作
在这里插入图片描述

1.4.2 集中式版本控制系统

在这里插入图片描述
代表:SVN
集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
在这里插入图片描述

1.4.3 分布式版本控制系统

在这里插入图片描述
代表:Git
分布式版本管理解决了本地版本管理中无法团队协作和集中式版本管理单点故障的问题,因为在分布式管理当中,既有本地版本管理的能力又同时拥有远程版本管理的能力。每个客户端保存的都是包含所有历史记录的完整的
在这里插入图片描述

1.5 Git工作机制

在Git中,文件可处于以下三种状态之一:

  • 已提交(committed)
    • 表示数据已经被安全地存入本地数据库中
  • 已修改(modified)
    • 表示文件被改动了,但是还没有提交到数据库
  • 已暂存(staged)
    • 表示对已修改文件的当前版本做出了标识并将其加入下一次要提交的快照中。
      由此便引入了Git项目中三个主要的区域:Git目录、工作目录以及暂存区。
      在这里插入图片描述
  • Git目录:保存项目元数据和对象数据库的地方。
  • 工作目录:项目某个版本的单次检出
  • 暂存区:位于Git目录中的一个文件,它保存了下次所要提交内容的相关信息。

Git的基本工作流程如下:

  • 修改工作目录中的文件
  • 暂存文件,将这些文件的快照加入暂存区
  • 提交暂存区中的文件,将快照永久地保存在Git目录中。

1.6 Git代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单成为远程仓库。

  • 局域网
    • GitLab
  • 互联网
    • GitHub
    • Gitee

2 Git的使用

本章节将介绍如何快速使用Git(How),将从如下三个方面进行介绍:

  • Git基础命令
  • Git分支操作
  • Git团队协作机制

2.1 Git基础常用命令

本小节将介绍Git本地操作的基础命令,主要涵盖如下指令:

  • 设置用户签名
  • 初始化本地库
  • 查看文件状态
  • 添加暂存区
  • 撤销已暂存的文件
  • 回滚操作
  • 移除文件(取消追踪)
  • 提交本地库
  • 查看提交历史
  • 版本穿梭
2.1.1 设置用户签名

用户签名的作用是为了区分不同操作者的身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
在这里插入图片描述

git config --global user.name 用户名
git config --global user.email 邮箱

如果传入了–global选项,那么只需要设置一次就好了,之后不管执行什么操作,Git都会使用这些已设置好的信息。
在这里插入图片描述

git config --list

通过上述指令即可看到自己配置好的用户签名及其他Git配置项

2.1.2 初始化本地库

要想在Git中对现有的项目进行跟踪管理,就需要对项目进行本地库初始化操作。
在这里插入图片描述
在这里插入图片描述

git init

上述指令会创建一个名为.git的子目录(隐藏目录)。

ll -a

可在工作区路径下使用上述指令查看隐藏目录。
这个子目录包含了构成Git仓库骨架的所有必需文件,在后续会对该目录稍做介绍。

2.1.3 查看文件状态

检查文件所处状态的主要工具是git status命令。

2.1.3.1 文件状态介绍

工作目录下的每一个文件都处于两种状态之一:

  • 已跟踪(tracked)
  • 未跟踪(untracked)
    已跟踪的文件是指上一次快照中包含的文件。这些文件又可以分为未修改、已修改、已暂存三种状态。而未跟踪的文件则是工作目录中出去已跟踪文件之外的所有文件,也就是即不在上一次快照中,也不在暂存区中的文件。
    在这里插入图片描述
2.1.3.2 初始化本地库后首次查看

在这里插入图片描述

git status

在初始化本地库之后首次查看文件状态可看到左侧图片中的输出,这表示当前项目是干净的,也就是说,工作目录下没有任何已跟踪的文件被修改过。
Git也没有找到任何未跟踪的文件,否则这些文件会被列出。
最后,该命令还会显示当前所处的分支。

2.1.3.3 创建文件后查看

在这里插入图片描述
现在,我们在工作目录创建一个hello.txt文件,并写入十行hello git

在这里插入图片描述
再次查看文件状态,我们可以看到新的hello.txt文件处于未跟踪(untracked)状态。
未跟踪的文件就是Git在上一次快照(提交)中没有发现的文件。Git并不会主动把这些文件包含到下一次提交的文件范围中。

2.1.4 添加暂存区
2.1.4.1 跟踪新文件

在这里插入图片描述

git add <file>

可以使用git add命令让Git开始跟踪新的文件。

在这里插入图片描述[图片]
在使用git add命令后再次查看文件状态,可以看到hello.txt文件已处于跟踪状态,并被添加到暂存区等待提交。

2.1.4.2 暂存已修改的文件

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

此时对hello.txt进行修改,对其增加五行hello git,并再次查看文件状态。
此时的hello.txt文件同时出现在了"Changes to be commited"(要提交的更改)和"Changes not staged for commit"(已更改但未添加到暂存区)的区域中,这是因为Git保存的是执行git add时文件的样子,如果此时进行了提交,那么本地库中的hello.txt只有十行hello git

在这里插入图片描述
使用git add将hello.txt添加到暂存区并再次查看文件状态,可以看到hello.txt已经完全加入到了暂存区

2.1.4.3 git add小结

由前面几个例子可以看到,git add是一个多功能命令,既可以用来跟踪新文件,也可以用来暂存文件,除此之外,git add还可以把存在合并冲突的文件标记为已解决(后续会说明)。所以,对于git add命令的理解,把它看成"添加内容到下一次提交中"更容易理解。

撤销已暂存的文件

如果在我们需要进行提交操作时不再需要提交某个文件,我们可以撤销文件的暂存状态(仍处于追踪状态)
在这里插入图片描述
在这里插入图片描述

git diff

在hello.txt中添加五行hello git,并通过上述指令查看未加入暂存区文件的差异。
然后将hello.txt添加到暂存区并检查文件状态。

在这里插入图片描述

git restore --staged <file>

我们可以使用上述命令对已经添加到暂存区的文件进行撤销操作。
最后我们检查文件状态,可以看到hello.txt已经从暂存区移除了。

2.1.6 回滚操作

接着上述的情况,如果从暂存区移除文件是因为不需要这部分功能了,那不仅需要从暂存区移除,还需要将文件状态恢复成未修改之前的版本,这个时候就可以使用回滚操作了。
在这里插入图片描述
在这里插入图片描述

首先检查文件状态,发现确实是新增了五行。

git restore <file>

然后执行上述指令,该指令就是使不在暂存区的文件恢复到修改前的状态。
最后查看差异,发现没有不同。

2.1.7 移除文件(取消追踪)

在这里插入图片描述

git rm --cached <file>

使用上述指令可将文件从追踪状态移除。
将hello.txt从追踪状态移除后再次查看文件状态,发现此时的hello.txt已经处在了未追踪的文件列表中了。

2.1.8 提交本地库

文件添加到暂存区后,就可以进行提交了,只有暂存区中的内容才会提交到本地仓库,所有未暂存的变更都不会进入到提交的内容中,这包括任何在编辑之后没有执行git add命令添加到暂存区的新建的或修改过的文件。
在这里插入图片描述

git commit -m "commit message"

使用上述指令即可完成对暂存区的提交。从提交信息可以看到本次提交的一些信息:

  • 分支(master)
  • SHA-1校验和(b5fd073)
  • 改动文件数
  • 源文件新增和删除了多少行
2.1.9 查看提交历史

在提交之后,可以使用git log命令查看提交的历史记录
在这里插入图片描述

git log

在历史记录中,包含着SHA-1校验和、指向当前SHA-1校验和的指针(HEAD指针和master指针),作者的姓名和邮箱、提交日期以及提交信息

在这里插入图片描述
在这里插入图片描述
跳过暂存区提交:

git commit -a -m "commit message"

现在我们修改hello.txt文件,删除五行hello git并添加暂存区然后提交。

-p 查看每次提交所引入的差异
-1 查看最近的一次提交

git log -p -1

然后再次查看最近的一次提交记录并查看其版本差异,可以看到与上一版本相比较,hello.txt减少了五行hello git

2.1.10 版本穿梭

如果某次提交后部署在线上,结果发现当前版本存在重大BUG,需要紧急版本回退,这个时候Git可提供版本穿梭操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在hello.txt中添加一行bug并提交。
这个时候线上出现重大问题,需要紧急版本回退。

git reset --hard <SHA-1校验和>

这个时候就可以使用上述指令进行版本穿梭。
先使用git log 查看上个版本的SHA-1校验和的值,然后使用上述指令进行穿梭。
再次执行git log可以看到我们已经在第二次提交的版本。

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

2.2 Git分支操作

有些人把Git的分支模型称为Git的“杀手锏特性”,而这些特性也确实使得Git从众多版本控制系统中脱颖而出,本小节将会介绍Git的这一“杀手锏特性”。

2.2.1 分支概述和优点
2.2.1.1 什么是分支

在版本控制过程中,同时推进多个任务,我们就可以为每个任务创建它们的单独分支。使用分支意味着操作者可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,可以理解为指针指向了不同的版本。
在这里插入图片描述

2.2.1.2 分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支可以删除掉重新开始一个新的分支或者切换到其他分支。

2.2.2 查看&创建&切换
2.2.2.1 查看分支

在这里插入图片描述

git branch

通过上述指令就可以查看当前Git目录中的全部分支,可以添加 -v 参数查看分支详情

  • 所在分支名
  • SHA-1校验和
  • 提交信息
2.2.2.2 创建分支

在这里插入图片描述

git branch 分支名

可使用上述指令创建一条新的分支,创建完成后可以查看分支详情。

在这里插入图片描述
在这里插入图片描述
当创建一条新的分支的时候,Git创建了一个可移动的新指针指向了创建分支时所在分支所指向的版本。

2.2.2.3 切换分支

在这里插入图片描述

git checkout <branch>

可使用上述指令进行分支的切换。切换后可查看分支详情,发现目前所在分支已经切换到了hot-fix

在这里插入图片描述
实际上进行分支切换的时候,HEAD指针从之前指向master变成指向了hot-fix。
而hot-fix指向的又是third commit这个版本快照。

2.2.3 分支合并
2.2.3.1 正常合并

在合并之前,我们首先需要在hot-fix中准备一个全新的版本快照。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在hot-fix分支上创建hot-fix.txt文件并提交

在这里插入图片描述
在这里插入图片描述
切换到master分支上查看工作目录内容,发现并没有hot-fix.txt文件。

git merge <branch>

合并之后再次查看文件,发现多了hot-fix.txt文件,查看日志发现有三个指针指向了当前SHA-1校验和(HEAD,master,hot-fix)
在这里插入图片描述
在这里插入图片描述

2.2.3.2 冲突合并

在演示冲突合并前,我们同样需要先准备些会导致文件合并冲突的文件。
在准备数据之前,我们首先需要明白Git的合并冲突是如何产生的:如果我们在要合并的两个分支上都改了同一个文件的同一部分内容,Git就没办法干净地合并这两个分支,它就会暂停整个合并过程,等待操作者来解决冲突。
在这里插入图片描述
在这里插入图片描述

首先切换到hot-fix分支并修改hello.txt文件的第一行,然后添加暂存区并提交。
然后切换到master分支修改hello.txt文件的第二行,然后添加暂存区并提交。

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

git merge <branch>

使用上述指令进行合并。会提示自动合并失败,并且分支状态变成了(master|MERGING),然后查看文件状态,发现hello.txt的状态是both modified。
查看hello.txt文件的内容,发现hello.txt中多了几行特殊内容:

<<<<<< HEAD
======
>>>>>> HEAD

<<<<<< HEAD
当前分支(master)上的代码块
======
hot-fix分支上的代码块
>>>>>> HEAD

这种时候就需要我们进行手动合并了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们手动合并完成后,使用git add标识该文件的冲突已经解决。此时再查看文件状态,可以看到"All conflicts fixed but you are still merging"。
接下来对其进行提交,可以发现此时退出了MERGING状态。
最后我们看下历史记录,发现本次的合并产生了一个新的SHA-1校验和。
与之前简单地移动分支指针的做法不同,本次Git会基于合并的结果创建新的快照。这种方式的特殊性就在于它拥有不止一个父提交。
在这里插入图片描述
在这里插入图片描述

2.3 Git团队协作机制

2.3.1 团队内协作和跨团队协作
2.3.1.1 团队内协作

在这里插入图片描述

2.3.1.2 跨团队协作

在这里插入图片描述

2.3.2 添加远程库

我们可以在代码托管平台创建远程库,常见的代码托管平台有GitHub、Gitee以及GitLab,这里以GitHub作为一个演示。
在这里插入图片描述
首先在添加远程库之前,我们首先需要有一个远程库(过程略)。

git remote

可以上述指令查看Git目录中添加的远程库。

git remote add <远程库别名> 远程库URL

可以使用上述指令添加远程库。

2.3.3 推送至远程库

在这里插入图片描述

git push 远程库别名 分支名

可使用上述指令将本地仓库中的版本快照提交至远程仓库

2.3.4 克隆远程库到本地

在这里插入图片描述

git clone 远程库地址

我们创建一个新的工作目录,然后执行上述指令即可克隆远程库版本信息。

2.3.5 拉取远程库

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

在拉取之前,我们需要先准备拉取环境,先在刚才克隆的工作目录中创建一个新的文件after_clone.txt并添加五行after_clone。然后提交并推送至远程库。

git pull 别名 分支名

然后切换至之前的工作目录执行上述指令进行拉取。

2.3.6 删除远程库分支

在这里插入图片描述
在这里插入图片描述
在删除之前,我们首先切换至hot-fix分支并提交至远程库。

git branch -r

可使用上述指令查看远程库分支信息

git push origin --delete <branch>

可以使用上述指令删除远程库分支

2.3.7 团队协作机制工作流图示

在这里插入图片描述

3 Git GUI的使用

市场上主流的GitGUI主要有TortoiseGit(小乌龟)、sourcetree、JetBrains家IDE提供的Git工具。
本次演示工具使用的为JetBrains PyCharm中的Git工具。
(略)

4 Git 目录

本章节将简单介绍Git目录中各文件的功能及作用,可以更加清晰的了解到Git是如何工作的。

4.1 目录结构说明

打开Git目录后,其结构如下:

└── .git
    ├── hooks    # 存放一些shell脚本,可以设置特定的git命令后触发相应的脚本
    ├── info    # 仓库的其他信息
    │   └── exclude # 本地的排除文件规则,功能和.gitignore类似
    ├── logs    # 保存所有更新操作的引用记录,主要用于git reflog等
    ├── objects    # 所有文件的存储对象
    ├── refs    # 具体的引用,主要存储分支和标签的引用
    ├── COMMIT_EDITMSG    # 保存最新的commit message
    ├── config    # 仓库的配置文件
    ├── description    # 仓库的描述信息,主要给gitweb使用
    ├── HEAD    # 指向当前分支
    └── index    # 二进制暂存区(stage)
4.1.1 hooks/

hooks就是钩子的意思,hooks文件夹里存放 git 提交的各个阶段文件,用于在 git 命令前后做检查或做些自定义动作。
在这里插入图片描述

  • prepare-commit-msg.sample* # git commit 之前,编辑器启动之前触发,传入COMMIT_FILE,COMMIT_SOURCE,SHA1

  • commit-msg.sample* # git commit 之前,编辑器退出后触发,传入 COMMIT_EDITMSG 文件名

  • pre-commit.sample* # git commit 之前,commit-msg 通过后触发,譬如校验文件名是否含中文

  • pre-push.sample* # git push 之前触发

  • pre-receive.sample* # git push 之后,服务端更新 ref 前触发

  • update.sample* # git push 之后,服务端更新每一个 ref 时触发,用于针对每个 ref 作校验等

  • post-update.sample* # git push 之后,服务端更新 ref 后触发

  • pre-rebase.sample* # git rebase 之前触发,传入 rebase 分支作参数

  • applypatch-msg.sample* # 用于 git am 命令提交信息校验

  • pre-applypatch.sample* # 用于 git am 命令执行前动作

  • fsmonitor-watchman.sample* # 配合 core.fsmonitor 设置来更好监测文件变化

如果要启用某个 hook,只需把 .sample(样本) 删除即可,然后编辑其内容来实现相应的逻辑。
例如团队规定每次commit都有一个固定的格式,“[姓名]+具体信息”的格式,如果不使用hooks,每次都需要重复去写上"[姓名]“,但利用Git的hooks功能处理每一条commit信息,在每条信息前自动添加”[姓名]"。

4.1.2 info/
4.1.2.1 exclude

info/exclude,初始化时只有这个文件,用于排除提交规则,与 .gitignore 功能类似。他们的区别在于.gitignore 这个文件本身会提交到版本库中去,用来保存的是公共需要排除的文件;而info/exclude 这里设置的则是你自己本地需要排除的文件,他不会影响到其他人,也不会提交到版本库中去。

4.1.2.2 refs

info/refs,如果新建了分支后,还会有info/refs文件 ,用于跟踪各分支的信息。此文件一般通过命令 git update-server-info 生成,里面的内容:
在这里插入图片描述
在这里插入图片描述

当你创建了多个分支并更新,会把新分支的信息添加上去。

git checkout -b optfuture-test
git update-server-info

info/refs其中一个作用就是用于git clone过程。执行git clone…后,它做的第一件事就是获取 info/refs 文件,这样就知道远程仓库的所有分支和引用信息。这个文件是在服务端运行了 update-server-info 所生成的。

4.1.3 logs/

logs就是用来记录操作信息的,git reflog 命令以及像 HEAD@{1} 形式的路径会用到。经过上面例子的操作后,它的目录如下:

| -- refs
|   -- heads
|       -- master
|       -- test
|       -- optfuture-test
| -- HEAD

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

  • HEAD直接记录在所有分支上的操作
  • refs/heads里还有master等文件,记录各自分支的操作记录
4.1.4 objects/

在初始化的时候,objects里有两个空的文件夹:info和pack,而在执行了git add之后,文件就已经存入objects里。
在这里插入图片描述
在这里插入图片描述
除了info和pack文件夹外其余的都是我们已经暂存的一些文件。
进入其中一个文件夹后查看文件夹内容。

git cat-file -p 文件夹+hash值

执行上述内容即可查看文件内容。
到这里,我们可以清晰的知道我们编写的文件代码具体存储在哪里了。

4.1.5 refs/

refs文件夹存储着分支和标签的引用。其当前结构为:

|-- heads
|   |-- master
|   |-- test
|   |-- optfuture-test
|-- tags

其中heads文件夹内存储的为本地分支信息,tags文件夹内存储的为标签信息,标签信息就是假如我们需要给某个重要的版本进行标记,就可使用标签做一个版本标记。
而这些文件的内容均为当前指向版本快照的hash值

4.1.5 COMMIT_EDITMSG

COMMIT-EDITMSG是一个临时文件,存储最后一次提交的message,当敲入git commit命令,不加-m的话, 会打开编辑器,其实就是在编辑此文件,而你退出编辑器后,git 会把此文件内容写入 commit 记录。 而执行git commit -m 'message’时,mssage就是COMMIT_EDITMSG的文件内容。

4.1.6 config

config 文件顾名思义就是包含项目特有的配置选项。默认配置如下:

$ cat config
[core]
        repositoryformatversion = 0
        # 视文件权限的修改是否为差异。如果为true,git把文件权限也算作文件差异的一部分
        filemode = false
        # 裸仓库。在git init初始化的时候我们可以加上--bare参数来决定是否创建一个裸仓库。在普通的git存储库中,存储库中有一个.git文件夹,其中包含所有相关数据和所有其他文件,用于构建工作副本。在一个裸仓库中,没有.git文件夹存储工作副本,会把init初始化的7个文件或文件夹直接放在项目根目录上
        bare = false
        logallrefupdates = true
        symlinks = false
        # 忽略文件的大小写,如果ignorecase为true,当文件readme.md改为Readme.md,git会忽略这个改动
        ignorecase = true
4.1.7 description

这个文件用于GitWeb。GitWeb 是 CGI 脚本(Common Gateway Interface,通用网关接口,简单地讲就是运行在Web服务器上的程序, 但由浏览器的输入触发),让用户在web页面查看git内容。

4.1.8 HEAD

此文件永远存储当前位置指针,指向当前工作区的分支。HEAD文件永远指向当前位置,表明当前的工作位置。当我们在master分支时,HEAD文件的内容为:
在这里插入图片描述

4.1.9 index

index也称为stage,是一个索引文件。当执行git add后,文件就会存入Git的对象objects里,并使用索引进行定位。所以,只要执行了git add,就算工作目录中的文件被误删除,也不会引起文件的丢失;创建了一个提交(commit), 那么提交的是当前索引(index)里的内容, 而不是工作目录中的内容。
.git/index是一个二进制文件,无法用编辑器直接打开查看内容。我们可以通过git ls-files --stage命令看到仓库中每一个文件及其所对应的文件对象。在这里插入图片描述

4.2 Git目录小结

除了上述介绍的这些文件外,执行一些特定的命令时,还会有别的文件出现。例如:

  • ORIG_HEAD(此文件会在你进行危险操作时备份 HEAD,如git reset、git merge、git rebase、git pull)
  • FETCH_HEAD(这个文件作用在于追踪远程分支的拉取与合并,与其相关的命令有 git pull/fetch/merge)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值