Git-Study

Git


第1章 概述

1.1 是什么

  • 介绍

  • 源代码管理

  • Git 是目前世界上最先进的分布式版本控制系统

  • Git 诞生

Linux之父

  • 在Linus Torvalds开发出了Git分布式版本控制系统11年后,BitKeeper宣布在Apache 2.0许可证下开源。Linus 是在BitKeeper停止向开源社区提供免费版本后开发了Git,今天Git和其它自由软件版本控制系统已经统治了编程社区,BitKeeper 变得无关紧要了。BitKeeper 由BitMover公司开发,该公司CEO Larry McVoy与Linus曾是好友,Larry 说服Linus在内核开发中使用BitKeeper。而BitKeeper在免费使用的许可证中加入很多限制条件,惹恼了内核开发者,最终促使Linus开发出了毁灭BitMover的Git。

  • 版本控制软件

    • 集中式版本控制工具
      • CVS、SVN(Subversion)、VSS……
    • 分布式版本控制工具
      • Git、Mercurial、Bazaar、Darcs……

1.2 能干嘛

  • 作用
    git作用

  • 工作机制

git工作机制

  • 代码托管中心

    代码托管中心负责维护远程库

    • 局域网
      • Gitlab
    • Internet
      • GitHub
      • gitee
  • 集中式版本控制系统

集中式版本控制系统

  • SWN 是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器下载最新的%本,然后开发代码,写完代码后需要把自己的代码推送到中央服务器。
  • 缺点:
    • 服务器单点故障
    • 容错性差
分布式版本控制系统

分布式版本控制系统

  • Git 是 分布式版本控制系统(Distributed Version Control System,简称 DVCS)
  • 仓库:
    • 本地仓库:是在开发人员自己电脑上的Git仓库
    • 远程仓库:是在远程服务器上的Git仓库
      • 团队内合作
      • 跨团队协作
  • 操作:
    • clone:克隆,就是将远程仓库赋值到本地
    • push:推送,就是将本地仓库代码上传到远程仓库
    • pull:拉取,就是将远程仓库代码下载到本地仓库
    • commit:提交,就是将本地工作区代码上传到本地仓库中
  • 优点:
    • 容灾能力强
    • 本地版本管理
    • 异地协作
    • 灵活分支

1.3 去哪下

命令行工具

下载地址:Git-2.23.0-bit.exe

https://git-for-windows.github.io/

https://git-scm.com/download

git官网

操作系统中可视化工具:TortoiseGit(了解)

下载地址:http://tortoisegit.org/

TortoiseGit 2.8.0-64-bit

TortoiseGit

第2章 安装、环境搭建

2.1 安装

  1. Git Bash 安转 其他默认下一步
  2. Configuring extra选项中,默认开启文件缓存即可(推荐)
  3. Adjusting your PATH environment选项中,勾选第二个,支持第三方软件使用git

2.2 设置全局用户签名

Git 是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识——即:用户签名

  • 说明
    • 签名的作用是区分不同操作者身份。用户签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。
    • 注意:这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系
  • 命令:
    • git config --global user.name “用户名”
    • git config --global user.email “用户邮箱”
  • –global 表示全局属性,所有的git项目都会共用属性
  • 查看配置信息:git config --list
  • 在当前登录的系统用户目录下,生成.getconfig隐含文件,里面可以看到刚刚设置的信息。如果不用命令设置,也可以直接打开文件进行设置。

第3章 相关概念

3.1 理解工作区、版本库、暂存区概念

  • 工作区(Workinf Directory):就是你电脑本地硬盘目录,一般是项目当前目录
  • 版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
  • 暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
  • 分支(Branch) : Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git版本库

3.2 提交git版本库分两步执行

第一步git add 把文件纳入Git管理,实际是把本地文件修改添加到暂存区

第二步git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。

可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是 “干净” 的。即:nothing to commit (working directory clean)。

其他操作

  1. 用 “git diff HEAD --filename” 命令可以查看工作区和暂存区里面最新版本的区别。
  2. 新建过撤销未add: git checkout --文件名
  3. 撤销已add未commit: 先git reset HEAD 文件名,再git checkout --文件名
  4. 撤销已add已commitgit reset --hard HEAD^

第4章 Git本地库实战

  • 常用命令预览:
命令名称命令作用
git init初始化本地仓库
git config --global user.name “用户名”设置用户签名的用户名部分
git config --global user.email “邮箱”设置用户签名的邮箱部分
git status查看本地仓库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

4.1 实战(初始化版本库)

  • 要使用Git对我们的代码进行版本控制,首先需要获取Git仓库,获取Git仓库通常有两种方法:

    • 在本地初始化一个Git仓库
    • 从远程仓库克隆
  • 本地初始化操作步骤:

    • 创建目录(用作本地版本库)

    • 当前目录打开Git Bash窗口,初始化仓库

      git bash 窗口

    • 命令:git init

    • 查看当前目录产生.git隐藏文件夹

    • 注意:当前的.git是一个隐藏文件夹,需要在电脑上面设置隐藏文件夹显示设置,否则,看不到这个.git目录

显示隐藏文件设置

git仓库初始化

4.2 实战(新建\提交\状态)

  1. 新建文件

    • 命令:touch a.txt
    • 命令:vim a.txt

    vim编辑

  2. 查看文件状态

    • 命令:git status

      • On branch master:表示主分支
      • Untracked files:表示未跟踪状态
    • 说明:

      • Git 工具目录下的文件状态信息:

        • Untracked 未跟踪(未被纳入版本控制)
        • Tracked 已跟踪(被纳入版本控制)
        • Unmodified 未修改状态
        • Modified 已修改状态
        • Staged 已暂存状态
      • 这些文件的状态会随着我们执行Git的命令发生变化

        • 红色表示新建文件或者新修改的文件,都在工作区

        • 绿色表示文件在暂存区

        • 新建的文件在工作区,需要添加到暂存区并提交到仓库区

          工作区

      • 也可以使用 git status -s 使输出信息更加简洁

        • ??:表示未跟踪状态

          红色??为未跟踪状态

  3. 添加到暂存区

    • 命令:

      • git add <文件名称>

        • 只是增加到栈空间(index文件)中,还没有添加到本地仓库中、初始化时没有这个index文件。这还是一个新文件,需要将栈空间文件提交到本地仓库。
      • git add .

        • 添加项目中所有文件
      • git add 未存在文件

        • 添加未存在文件会出错:fatal:pathspec ‘未存在文件’ did not match any files

        add命令将文件添加到暂存区

  4. 撤销暂存区的文件

    • 命令:git reset <文件名称>
    • 撤销后,查看文件状态(git status)文件由绿色变为红色

    reset指令撤销未提交文件

  5. 将暂存区文件提交到本地仓库

    • 命令:

      • git commit

        • 执行命令时需要填写提交日志,进入编辑模式(vim)
      • git commit -m “注释内容”

        • 直接用 -m 参数指定日志内容,推荐
        • commit 会生成一条版本记录,add 只是添加暂存区,不会生成版本记录,建议多次add后,一次性commit,避免每次add都commit产生版本信息爆炸。

        commit 提交指令

      • git commit -am “注释内容”

        • 代码编辑完成后即可进行 add 和 commit 操作
        • 提示:添加和提交合并命令

        commit -am 快速添加提交

4.3 实战(查看日志)

  • 命令:

    • git log

    • git log a.txt

      • 查看文件日志(查看所有的日志或某个文件日志)
      • q退出
    • git log --pretty=oneline

      • 如果日志很多,可在一行显示(只显示当提交版本之前的日志,显示全部哈希id)

      日志,显示全部版本号

    • git reflog

      • 查看历史操作(哈希id显示前几位)

      reflog 指令 查看历史

4.4 实战(回退\穿梭\撤销)

  1. 回退到历史版本

    • 命令:

      • git reset --hard HEAD^

        • 一次回退一个版本,一个 ^ 代表一个版本数量

        回退一个版本

      • git reset --hard HEAD~n

        • 回退 n 次版本

        回退n个版本

  2. 版本穿梭

    • 命令:

      • git reflog a.txt

        • 查看历史操作
      • git reset --hard 版本号

        • 回到最新的版本

        按版本号穿梭版本

        穿梭版本

  3. 撤销

    • 未 add , 未 commit

      • vim 修改文件,没有 add 和 commit ,进行撤销

      • 命令:git checkout – a.txt

        • 撤销修改(还原原本的文件)

        在这里插入图片描述

        撤销未add未commit的文件

    • 补充 git status -s

      git status -s 为 git status --short的缩写

      用于以简洁的格式显示工作目录的状态,其中每个文件都由两个字符组成。这两个字符分别表示文件的状态和暂存区的状态

      • ??:未跟踪的文件
      • A:新增的文件
      • M:被修改的文件
      • D:被删除的文件
      • R:被重命名的文件
      • C:被复制的文件
      • U:存在冲突的文件
    • 已 add ,未 commit

      • vim 修改文件,添加 add ,但没有 commit ,进行撤销

      • 命令:git reset

        • 软回退
        • 查看文件内容:cat a.txt
        • 查看日志:git reflog a.txt

        软回退

4.5 实战(删除)

命令:rm 文件名
测试删除文件找回准备

通过回退版本恢复文件

4.6 实战(分支)

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git的master分支并不是一个特殊分支。它跟其它分支没有区别。之所以几乎每一个仓库都有master分支,是因为git init 命令默认创建它,并且大多数人都懒得去改动它。

4.6.1 分支概念

在使用版本控制工具开发的过程中,同时推进多个任务

版本分支

4.6.2 分支好处

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.6.3 分支操作
命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上
4.6.4 分支操作详情

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.7 实战(版本冲突)

冲突产生的原因

合并分支时,两个分支在同一个文件同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

冲突解决
  1. 编辑有冲突的文件,删除特殊符号,决定要使用的内容

在这里插入图片描述

  1. 添加到暂存区,执行提交(注意:git commit 命令时不能带文件名)

在这里插入图片描述

避免冲突
  • 容易冲突的操作方式
    • 多个人同时操作了同一个文件
    • 一个人一直写不提交
    • 修改之前不更新最新代码
    • 提交之前不更新最新代码
    • 擅自修改同事代码
  • 减少冲突的操作方式
    • 养成良好的操作习惯,先pull在修改,修改完立即 commitpush
    • 一定要确保自己正在修改的文件是最新版本的
    • 各自开发各自的模块
    • 如果要修改公共文件,一定要先确认有没有人正在修改
    • 下班前一定要提交代码,上班第—件事拉取最新代码
    • 一定不要擅自修改同事的代码

第5章 GitHub 远程库实战

5.1 Git 代码托管服务

  • github:地址:https://github.com/ 是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一版本库格式进行托管,故名github
  • 码云:地址:https://gitee.com 是国内的一个代码托管平台,由于服务器在国内,所以相比GitHub,gitee速度会更快
  • GitLab:地址:https://about.gitlab.com/ 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

5.2 GitHub 简介

  1. 是什么?:github是一个git项目托管网站,主要提供基于git的版本托管服务
  2. 能干嘛?: github是一个基于git的代码托管平台,Git并不像SVN那样有个中心服务器。目前我们使用到的Git命令都是在本地执行,如果你想通过Git分享你的代码或者与其他开发人员合作。你就需要将数据放到一台其他开发人员能够连接的服务器上。

https://github.com/

5.3 GitHub 实战——团队内协作

团队内协作

  1. 创建项目,初始化项目,并设置项目账号

    1. 创建项目 D:\CodeTest\GitStudy\gitHubTest

    2. 初始化本地仓库:在当前目录下,执行命令 git init 生成 .git 文件夹(本地库 隐藏文件)

    3. 设置项目账号(局部账号:.git/config),优先生效局部

      • git config user.name “xxxx”

      • git config user.email “xxx@xx.com”

      • 如果不设置采用全局账号(~/.gitconfig)

  2. 开发代码,并进行提交

    1. git add .
    2. git commit -m “xxx”
  3. 注册GitHub账号,并在github上创建一个远程库

    创建了远程库会生成两个url,客户端可以通过url远程访问远程库

    在这里插入图片描述

  4. 映射远程库地址,给url定义一个别名,简化操作,push本地库代码到远程库上

    git remote add origin https://github.com/GitYunA/gitHubTest.git( origin 是为url起的别名)

    git push origin master 将本地的master分支提交到 origin 远程库

    在这里插入图片描述

    根据弹出框提示选择登录账号

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    查看远程仓库

在这里插入图片描述

  1. 克隆别人的仓库

    git clone https://github.com/GitYunA/gitHubTest.git <项目名称> (默认clone的项目名称)

    注意:指定克隆仓库路径以及克隆到本地项目自定义名称。可以克隆提交者配置的ur1映射。但是不能克隆提交者的账母(.git/config)。

  2. 配置账号,不用在初始化仓库了,clone就初始化好了这个仓库

  3. 修改代码并提交

  4. push代码到远程库,需要建立合作伙伴关系,否则不允许push

    • 不是合作伙伴会报 403 无权访问库

    • 建立合作关系

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    当同意成为合作伙伴后(需登录github和邮箱查看邀请),再push

  5. 将远程库代码拉取到本地

    • git pull <origin> <master>

5.4 GitHub 实战——团队协作冲突

在上传或同步代码时,由于你和他人都改了同一文件的同一位置的代码,版本管理软件无法判断究竟以谁为准,就会报告冲突,需要程序员手工解决。

  1. git diff:查看不同冲突
  2. 手动解决冲突
  3. add
  4. commit
  5. push

5.5 GitHub实战——跨团队协作

Fork
  • git跨团队协作过程如下:
    1. B公司将代码fork到自己公司的远程库
    2. B公司进行内部开发
    3. B公司将开发好的代码向A公司发起拉取请求 pull request
    4. A公司审核B公司代码,审核通过合并代码 merge

在这里插入图片描述

5.6 解决重复输入密码问题

两种模式:https VS ssh

ssh 模式比 https 模式的一个重要好处就是,每次 push,pull,fetch等操作时不用重复填写用户名密码。
前提是你必须是这个项目的拥有者或合作者,且配好了ssh key

如何配置 ssh key
  1. 检查电脑家目录下是否已经生成了SSH key,如果有.ssh目录删除即可

  2. 创建SSH Key : ssh-keygen -t rsa -C GitHub账号名

    在这里插入图片描述

    成功的话(执行命令不需要输入任何内容),会在~/下生成.ssh文件夹,

    查看生成两个文件

    id_rsa

    id_rsa.pub

    在这里插入图片描述

    打开id_rsa.pub,复制里面的内容,到 github 上

  3. 补充SSH协议支持多种类型的公钥/私钥对,其中比较常见的包括

    1. RSA: RSA是最常见的密钥类型之一,它可以用于SSH协议的认证和加密。
    2. DSA: DSA是另一种常见的密钥类型,与RSA类似,用于SSH协议的认证和加密。
    3. ECDSA: ECDSA是一种基于椭圆曲线的加密算法,它可以提供比RSA和DSA更高效的加密和更短的密钥长度。
    4. Ed25519: Ed25519是一种基于椭圆曲线的数字签名算法,它可以提供非常高的安全性和性能。
  4. 登录账户
    打开用户设置
    点击[SSH and GPG keys]填写Title和Key,点击[Add SSH key]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试:提交不需要重新输入密码

给远程仓库的ssh url起别名

在这里插入图片描述

在这里插入图片描述

注意:

一个账户只能设置一个默认密码

如果有多个账号存在的话,只能选择设置其中一个

5.7 配置Git忽略文件

那些文件要忽略
  1. Eclipse特定文件

    在这里插入图片描述

  2. IDEA特定文件

    在这里插入图片描述

  3. Maven工程的target目录
    在这里插入图片描述

为什么要忽略他们

与项目的实际功能无关,不参与服务器上部署运行,把它们忽略掉能够屏蔽IDE工具之间的差异

怎么忽略?
创建忽略规则文件(git.ignore

这个文件的存放位置原则上在哪都可以,为了方便让~/.gitconfig文件引用,建议也放在用户家目录下

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.classpath
.project
.settings
target
.idea
*.iml
在.gitconfig文件中引用忽略的规则文件
[user]
	name = xxx
	email = xxx
[core]
excludesfile = C:/Users/Lenovo/git.ignore
提示
  • SpringBoot、Vue等项目在项目根目录下会自动生成git忽略文件

第6章 IDEA集成Git

6.1 定位Git程序

在这里插入图片描述

在这里插入图片描述

6.2 初始化本地库

在这里插入图片描述

6.3 添加到暂存区

在这里插入图片描述

6.4 提交到本地库

在这里插入图片描述

在这里插入图片描述

6.5 创建分支

在这里插入图片描述

或者:

在这里插入图片描述

6.6 切换分支

在这里插入图片描述

在这里插入图片描述

6.7 合并分支

在dev分支下,新建代码,并提交

在这里插入图片描述

在这里插入图片描述

合并分支

在这里插入图片描述

在这里插入图片描述

6.8 解决冲突

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

确定后冲突解决,无需再提交

第7章 在IDEA中连接GitHub

7.1 保存GitHub账号

在这里插入图片描述

7.2 分享工程到GitHub上

在这里插入图片描述

在这里插入图片描述

7.3 Clone

在这里插入图片描述

在这里插入图片描述

7.4 Push

7.5 Pull

在这里插入图片描述

第8章 Git工作流

8.1 Git 工作流

简单来说就是,一个项目的成员们在工作中统—使用Git的工作方式。
Gitflow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

  • 简单分支

    在这里插入图片描述

  • 复杂分支

在这里插入图片描述

8.2 分支种类

  • 主干分支 master

    主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环节完全一致

  • 开发分支 develop

    主要负责管理正在开发中的代码。一般情况下应该是最新的代码

  • bug修理分支 hotfix

    要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

  • 发布版本分支 release

    较大的版本上线时,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段稳定后可视情况删除。

  • 功能分支 feature

    为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后会合并到开发分支。

第9章 Gitlab 私服

注意:要使用CentOS7版本安装,CentOS6版本不行

9.1 官网地址

首页:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation

9.2 提前下载所需rpm

yum安装gitlab-ee(或ce)时,需要联网下载几百M的安装文件,非常耗时,所以应提前把所需RPM包下载并安装好。
下载地址是: https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
下载好后上传到Linux系统,习惯上还是放在/opt目录下

9.3 安装步骤

#sudo 是切换到管理员权限 root账号下不需要 ,安装rpm
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
# 联网安装一些所需插件
sudo yum install -y curl policycoreutils-python openssh-server cronie

#sudo yum install lokkit 不报错不用装

sudo lokkit -s http -s ssh
# 安装postfix
sudo yum install -y postfix

#启动服务 sudo systemctl enable postfix.service
sudo service postfix start 
# 设置服务开机启动
sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
# 当步骤执行完后重启

在这里插入图片描述

9.4 Gitlab 服务操作

  • 初始化配置
    • gitlab-ctl reconfigure
  • 启动Gitlab服务
    • gitlab-ctl start
  • 停止Gitlab服务
    • gitlab-ctl stop

9.5 浏览器访问

访问Linux服务器IP地址即可,如果想访问EXTERNAL_URL指定的域名还需要配置域名服务器或本地hosts文件。

初次登录时需要为Gitlab的root用户设置密码
员权限 root账号下不需要 ,安装rpm
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

联网安装一些所需插件

sudo yum install -y curl policycoreutils-python openssh-server cronie

#sudo yum install lokkit 不报错不用装

sudo lokkit -s http -s ssh

安装postfix

sudo yum install -y postfix

#启动服务 sudo systemctl enable postfix.service
sudo service postfix start

设置服务开机启动

sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

sudo EXTERNAL_URL=“http://gitlab.example.com” yum -y install gitlab-ce

当步骤执行完后重启


[外链图片转存中...(img-gmoUF3lo-1690211981817)]

### 9.4 Gitlab 服务操作

- 初始化配置
  - gitlab-ctl reconfigure
- 启动Gitlab服务
  - gitlab-ctl start
- 停止Gitlab服务
  - gitlab-ctl stop

### 9.5 浏览器访问

访问Linux服务器IP地址即可,如果想访问EXTERNAL_URL指定的域名还需要配置域名服务器或本地hosts文件。

初次登录时需要为Gitlab的root用户设置密码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值