Linux初体验之git

git

基本命令

1.强制推送(慎用,除非你认为其他冲突等可以丢弃 或者不是很重要)

git push -- force

2.创建文件等小命令

touch a // 创建一个a文件  
echo 1234 >> a // 把1234这个内容放入a文件  
cat a // 打开a文件 读取出a文件中的内容  
mkdir test // 创建test文件夹  
rm 文件名 // 删除文件  
pwd // 打印当前工作路径

3.安装git的时候 都会安装git bash和git GUI 我们完全也可以使用git GUI来提交版本 与sourcetree等功能相同

gitk // 用git命令快速打开git GUI

4.文件信息

ls // 查看当前路径下面的所有文件名
ls 文件夹名 // 查看对应文件夹中的内容
ls -l // 拉出最近git提交记录以及对应修改的文件名
ls -l -a // 拉出最近git提交记录以及对应修改的文件名,隐藏的文件也会显示

5.cd快速切换路径

cd ~ // 将工作路径快速切换到root
cd - // 将工作路径切换到上一状态
cd ../ // 切回到上一个工作路径
cd 文件夹名 // 进入某个目录
cd / // 进入根目录

6. vim模式

vim 文件名 // 新建一个文件
i 插入内容
按下esc :wq 保存并退出
按下esc :q 直接退出
vim 模式下 文件中#号开头的为注释
.project 忽略.project文件
*.obj 或者 *.exe 忽略一类文件 例如以.obj .exe 结尾的文件
​
git check-ignore -v .project 查看ignore中.project的位置

7.常用git 命令

git init // 初始化 在工作路径上创建主分支
git clone 地址 // 克隆远程仓库
git clone -b 分支名 地址 // 克隆分支的代码到本地
git status // 查看状态
git add 文件名 // 将某个文件存入暂存区
git add b c //把b和c存入暂存区
git add . // 将所有文件提交到暂存区
git add -p 文件名 // 一个文件分多次提交
git stash -u -k // 提交部分文件内容 到仓库 例如本地有3个文件 a b c 只想提交a     b到远程仓库 git add a b 然后 git stash -u -k 再然后git commit -m "备注信息"     然后再push push之后 git stash pop 把之前放入堆栈的c拿出来 继续下一波操作
git commit -m "提交的备注信息"  // 提交到仓库
若已经有若干文件放入仓库,再次提交可以不用git add和git commit -m "备注信息"     这2步, 直接用
git commit -am "备注信息" // 将内容放至仓库 也可用git commit -a -m     "备注信息"
* git commit中的备注信息尽量完善 养成良好提交习惯 例如 git commit -m     "变更(范围):变更的内容"

8.存储密码凭证 设置别名 获取config信息以及配置

git config --list // 获取config信息
git config --global core.safecrlf false // 去掉git add 命令后 出现的一堆CR     LF提示信息
其中CR是回车的意思 LF是换行
git config --global credential.helper wincred // 存储凭证     (可用于输入一次用户密码后,不再输入 有时我们已经用SSH key 绑定关联好了     但是每次git提交的时候 还是需要你输入用户名密码 在这个时候 敲入这个命令     将凭证存储起来 用户名密码就不需要再次输入了)
git config --global alias.ci commit // 将commit命令设置别名ci git     commit命令将由git ci来代替

9.查看git常用命令

git helper -a // 查看全部git子命令

10.逐行查看文件的修改历史

git blame 文件名 // 查看该文件的修改历史
git blame -L 100,10 文件名 // 从100行开始,到110行 逐行查看文件的修改历史

11.清除

git clean -n // 列出打算清除的档案(首先会对工作区的内容进行提示)
git clean -f // 真正的删除
git clean -x -f // 连.gitignore中忽略的档案也删除
git status -sb (sb是 short branch) // 简洁的输出git status中的信息

12.删除放入暂存区文件的方法(已commit后)

git rm 文件名 // 将该文件从commit后撤回到add后
git reset HEAD^ --hard // 删除后 可以用git rm 文件名再回撤一步

13.查看提交内容

git hi -5 // 查看前5条内容
git hi --grep hello // 过滤提交信息里有hello字眼的内容

14.修改文件名以及移动

git mv a b // 把a文件名字改成b 并且直接放入git add后的暂存区
git mv b ./demos/ // 把b文件移动到demos文件夹下

15.对比工作区,暂存区,仓库的差异

git diff // 查看变更 工作区与暂存区的差异比对
git diff --cached // 暂存区与提交版本的差异
git diff HEAD // 工作区与仓库中最后一次提交版本的差别
git diff 版本哈希值 版本哈希值 // 查看这2个版本哈希之间的区别
或者 git diff HEAD~数字 HEAD~数字  
 
git tag tt HEAD~4 给倒数第5次提交打一个tag tag名字是tt 
git diff tt 就是倒数第5个版本与第一个版本之间的差异
git diff --cached tt 暂存区与倒数第5个版本之间的比对

16.查看提交信息

git show HEAD // 查看最后一次提交修改的详细信息 也可以用git show 哈希值查看对应的内容
git show HEAD^ // 查看倒数第二次的提交修改详细信息
git show HEAD^^ 或者git show HEAD~2 查看前2次变更
git show HEAD 或 git show 哈希值 或者git show tag(标签名)都可以查看最近一次提交的详细信息

17.查看信息

git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
// 获取git log里的树形详细信息 包括hasg 日期 提交信息 提交人等
git log --oneline //拉出所有提交信息 q是退出
git log -5 // 查看前5次的提交记录
git log --oneline -5 // 打印出的日志里面只有哈希值和修改的内容备注
git log 文件名 // 查看该文件的提交
git log --grep // 想过滤看到的内容   过滤日志
git log -n // 查看近期提交的n条信息内容
git log -p // 查看详细提交记录

18.变基操作,改写历史提交 把多次提交合并起来

git rebase -i HEAD~3 
变基之后的哈希值与之前的不同 证明变基是重新做的提交 把多次提交合并成了几次提交

19.回撤操作

git commit --amend -m "提交信息" // 回撤上一次提交并与本次工作区一起提交
git reset HEAD~2 --hard // 回撤2步
git reset --files // 从仓库回撤到暂存区
git reset HEAD // 回撤暂存区内容到工作目录
git reset HEAD --soft 回撤提交到暂存区
git reset HEAD --hard // 回撤提交 放弃变更 (慎用)
git reset HEAD^  // 回撤仓库最后一次提交
git reset --hard commitid // 回撤到该次提交id的位置

git push -f -u origin 分支名 所有内容都回撤完了     将回撤后的操作强制推送到远程分支

20.标签操作

git tag // 查看列出所有打过的标签名
git tag -d 标签名 // 删除对应标签
git tag 标签名字 // 在当前仓库打个标签
git tag foo -m "message" // 在当前提交上,打标签foo 并给message信息注释
git tag 标签名 哈希值 -m "message" // 在某个哈希值上打标签并且写上标签的信息
git tag foo HEAD~4 // 在当前提交之前的第4个版本上 打标签foo
git push origin --tags // 把所有打好的标签推送到远程仓库
git push origin 标签名 // 把指定标签推送到远程仓库
git stash // 把暂存区的内容 暂时放在其他中 使暂存区变空
git stash list // 查看stash了哪些存储
git stash pop // 将stash中的内容恢复到当前目录,将缓存堆栈中的对应stash删除
git stash apply // 将stash中的内容恢复到当前目录,不会将缓存堆栈中的对应stas    h删除
git stash clear // 删除所有缓存的stash
git pull --tags // 把远程仓库的标签也拉取下来
git push origin :refs/tags/远程标签名 // 删除远程仓库的标签

21.分支

git branch 分支名 // 新建分支
git branch // 查看当前所有分支
git checkout 分支名 // 检出分支
git checkout -b 分支名 // 创建并切换分支
git branch -v // 查看分支以及提交hash值和commit信息
git merge 分支名 // 把该分支的内容合并到现有分支上
git branch -d 分支名 // 删除分支
git branch -D 分支名 // 强制删除 若没有其他分支合并就删除 d会提示 D不会
git branch -m 旧分支名 新分支名 // 修改分支名
git branch -M 旧分支名 新分支名 // 修改分支名 M强制修改     若与其他分支有冲突也会创建(慎用)
git branch -r // 列出远程分支(远程所有分支名)
git branch -a // 查看远程分支(列出远程分支以及本地分支名)
git fetch // 更新remote索引
git push -u origin 分支名 //将本地分支推送到origin主机,同时指定origin为默认主机,
//后面就可以不加任何参数  
//使用git push 也可解决 git建立远程分支关联时出现fatal ...upstram的问题


    
    git fetch origin
    git log -p master.. origin/master
    git merge origin
    
    git add .
    git commit -m "message"
    git push
    
    
    git fetch [remote]
    git pull [remote][branch]
    
    
    2.放弃本地修改,直接覆盖之
    git reset --hard
    git pull
    The following untracked working tree files would be overwritten by merge
    解决方案
    git clean -d -fx
    延伸阅读
    $ git clean -f -n         # 1
    $ git clean -f            # 2
    $ git clean -fd           # 3
    $ git clean -fX           # 4
    $ git clean -fx           # 5
    (1): 选项-n将显示执行(2)时将会移除哪些文件。
    (2): 该命令会移除所有命令(1)中显示的文件。
    (3): 如果你还想移除文件件,请使用选项-d。
    (4): 如果你只想移除已被忽略的文件,请使用选项-X。
    (5): 如果你想移除已被忽略和未被忽略的文件,请使用选项-x。

使用gitlab发起merge request

git remote add origin git@xxx.git

git fetch origin

git pull origin master

1. 添加变更到暂存区,并提交到本地仓库

# cd /path/to/repository # git add . # git commit -m "imageclean solution"

2. 代码库命令行,手动创建分支,并push

  • 查看本repository所有的branch,包括本地与远程,以及它们的上游分支和最后一次commit信息

# git branch -a --help

List both remote-tracking branches and local branches.

# git branch -v --help show hash and subject, give twice for upstream branch

查看本地分支与远程追踪分支

# git branch -a -vv

master 9ed5c7c [origin/master: ahead 1] imageclean solution

remotes/origin/3-docker ebea172 python package 依赖

remotes/origin/HEAD -> origin/master remotes/origin/front-end-dev d17bfaf 提交前端修改

remotes/origin/master ebea172 python package 依赖

  • 创建分支image-clean-cron,并设置其为远程跟踪分支

创建本地分支image-clean-cron

# git branch image-clean-cron

切换本地分支image-clean-cron

# git checkout image-clean-cron

查看本地分支与远程追踪分支

# git branch -a -vv *

image-clean-cron 9ed5c7c [origin/image-clean-cron] imageclean-solution

master 9ed5c7c [origin/master: ahead 1] solution

remotes/origin/3-docker ebea172 python package 依赖

remotes/origin/HEAD -> origin/master

remotes/origin/front-end-dev d17bfaf 提交前端修改

remotes/origin/master ebea172 python package 依赖

提交本地分支代码到远程分支

# git push origin image-clean-cron -u

git: 'credential-gnome-keyring' is not a git command. See 'git --help'. Counting objects: 4, done.

Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done.

Writing objects: 100% (4/4), 1.45 KiB | 1.45 MiB/s, done.

Total 4 (delta 1), reused 0 (delta 0)

remote:

remote: To create a merge request for image-clean-cron, visit: remote: http://202.38.69.240:10070/LeiNao/pai-maintain/merge_requests/new?merge_request%5Bsource_branch%5D=image-clean-cron

remote:

To http://202.38.69.240:10070/LeiNao/pai-maintain.git

* [new branch] image-clean-cron -> image-clean-cron Branch 'image-clean-cron' set up to track remote branch 'image-clean-cron' from 'origin'.

查看推送后的本地分支与远程分支

** # git branch -a -vv * **

image-clean-cron 9ed5c7c [origin/image-clean-cron] imageclean solution

master 9ed5c7c [origin/master: ahead 1] solution remotes/origin/3-docker ebea172 python package 依赖

remotes/origin/HEAD -> origin/master

remotes/origin/front-end-dev d17bfaf 提交前端修改

remotes/origin/image-clean-cron 9ed5c7c imageclean solution

remotes/origin/master ebea172 python package 依赖

3. gitlab网页端,手动创建merge request

uploading.4e448015.gif转存失败重新上传取消

uploading.4e448015.gif转存失败重新上传取消

uploading.4e448015.gif转存失败重新上传取消

https://blog.csdn.net/yjk13703623757/article/details/89083274

在执行git pull origin master时出现:

  fatal: 'origin' does not appear to be a git repository

  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights and the repository exists

 

 

解决方案:

git remote add origin git@github:bx_reader/bx-reader-api.git

 

检出,在本地审查和合并

Step 1. 获取并检出此合并请求的分支

git fetch origin git checkout -b mapbox-uploader origin/mapbox-uploader

Step 2. 本地审查变更

Step 3. 合并分支并修复出现的任何冲突

git fetch origin git checkout origin/master git merge --no-ff mapbox-uploader

Step 4. 推送合并的结果到 GitLab

git push origin master

 

git配置

首先这篇文章适用于Windows和Linux的配置,本人没有条件去验证Mac,所以不确定是否可以,不过和Linux一样属于Unix系统,应该理论上都是可以的,如果有人实验了可以给我个反馈。

这段时间在Ubuntu上做开发,又一次发现命令是真好用,加上这段时间把服务器从Windows迁到CentOS,也渐渐习惯了Vim。

之前一直在Winodws下开发,开发中使用的版本管理工具是SVN和Git,不过都会使用Tortoise类似的客户端工具,对于Git多帐号的情况,它可以动态管理SSH-KEY。不顾我在在Ubuntu下开发时没有发现这样的工具,几个IDE也需要配置SSH,于是干脆用命令了,在配置多个SSH-KEY花了我一个多小时才搞定,中间也由于细节不熟悉浪费了点时间,现在仅仅做个记录,如果能帮到其它遇到同样问题的同学也就更棒了。

SSH之于Git的原理

Git提交时有Https和SSH两种验证方式,Https的方式需要帐号和密码比较好理解,
 不过它需要在每次提交时输入帐号和密码,有点麻烦;
 而SSH的功能可以粗暴的理解为记住帐号密码,不过对这个过程有人会有点疑惑。
 首先,我们用SSH命令生成一个公钥-私钥对,我们会把公钥添加到Git的服务器,把私钥放在本地。
 提交文件的时候Git服务器会用公钥和客户端提交私钥做验证(具体细节不究),如果验证通过则提交成功,
 那么我们在把公钥添加到服务器的时候肯定是需要登录Git服务器的,这个过程其实可以理解为帐号和密码托管给SSH了,
 所以也是相当于输入了帐号密码,但是由SSH帮你记住了。
 这么理解是可以,但是SSH的意义不仅仅是这样,
 关于SSH的更详细内容看客可以自行再了解。

生成SSH-KEY

打开命令行、终端,用命令进入到你要保存SSH-KEY文件的文件夹,我们先用命令测试下终端是否支持SSH:
ssh -V

如果你的终端支持SSH,那么你可能看到类似如下的版本信息:

OpenSSH_7.3p1, OpenSSL 1.0.2j  26 Sep 2016

测试时如果提示不识别SSH命令,需要安装SSH。 Ubuntu安装SSH:

sudo apt-get install openssh-client openssh-server

CentOS安装SSH:

yum install openssh-client openssh-server

Windows可以在当前文件夹右键,选择Git Bash Here,会自动在当前文件夹打开一个MINGW的命令行窗体,它是自带SSH的。

接下来在刚才的文件夹,使用SSH命令在当前文件夹生成一对SSH-KEY:

ssh-keygen -t rsa -C "邮箱地址"
ssh-keygen -t rsa -C "smallajax@foxmail.com"
接下来会出来提示信息,完整的大概是这样:
$ ssh-keygen -t rsa -C "smallajax@foxmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
这里需要输入SSH-KEY的文件名字,这里名字理论上可以随便取,
 但是我们今天要说配置多个SSH-KEY,所以请分别查看以下两节:

单个Git帐号的配置——全局Git配置

多个Git帐号的配置——局部Git配置

单个Git帐号的配置——全局Git配置

大部分人使用Git一般是一个帐号,所以接着上面的讲。

上面说到输入ssh-keygen命令生成SSH-KEY密钥对文件时需要输入文件名称,如果你仅仅要配置一个帐号,那么我们输入默认名称即可:id_rsa。

接着会要求输入私钥的密码,并且需要确认密码,为了安全在密码输入的时候不会反显,什么都看不到,这个密码你自己设置,但是你一定要记住:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

到这里生成SSH-KEY的事就完成了,你在当前文件夹会看到两个文件:

id_rsa id_rsa.pub

SSH-KEY生成了,接着给服务器和客户端配置SSH-KEY。

第一步把id_rsa.pub中的公钥内容添加到Git的SSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
第二步把SSH-KEY配置给SSH,让系统的SSH知道这个KEY。

Linux把id_rsa文件拷贝到~/.ssh文件夹下,命令如下:

cp id_rsa ~/.ssh/

Window把id_rsa文件拷贝到C:/Users/你的用户名/.ssh文件夹下。

拷贝完成后,把.ssh文件夹下的id_rsa文件添加到SSH-Agent,命令如下:

ssh-add id_rsa文件的路径

例如Linux:ssh-add ~/.ssh/id_rsa,如果命令行此时正在.ssh文件夹下:ssh-add id_rsa即可,Windows同理。

此时添加时如果遇到错误,请参考本文最后一节:添加SSH到SSH-Agent时报错。

最后,执行以下命名配置Git全局用户和邮箱:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

例如:

git config --global user.name "YanZhenjie"
git config --global user.email "smallajax@foxmail.com"

配置全局用户和邮箱完成后,我们可以查看: Linux用户打开~/.gitconfig文件即可看到配置:

vim ~/.gitconfig

Windows用户打开C:/Users/你的用户名/.git/config即可看到配置,内容大概如下:

[user]
	name = YanZhenjie
	email = smallajax@foxmail.com

此时配置全部结束,请查看下方测试SSH-KEY配置是否成功进行测试。 多个Git帐号的配置——局部Git配置

又有很多人同时使用多个Git帐号,比如Github、OSChina、Gitlib等,再接着上面讲配置多个Git帐号。

上面说到输入ssh-keygen命令生成SSH-KEY密钥对文件时需要输入文件名称,如果你要配置多个帐号,就根据爱好输入KEY文件的名字吧,例如为Github配置就输入:id_rsa_github,为OSChina配置就输入:id_rsa_oschina。

接着会要求输入私钥的密码,并且需要确认密码,为了安全在密码输入的时候不会反显,什么都看不到,这个密码你自己设置,但是你一定要记住:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

到这里生成SSH-KEY的事就完成了,你在当前文件夹会看到两个文件:

id_rsa_github  id_rsa_github.pub

SSH-KEY生成了,接着给服务器和客户端配置SSH-KEY。

第一步把id_rsa_github.pub中的公钥内容添加到Git的SSH中,如果你使用Github或者Gitlib,在个人设置中会找到。
第二步为SSH配置私钥位置,这里和上面配置单个Git帐号不一样,不过单个帐号也可以按照多个帐号的配置方法来配置。

下面我们需要在.ssh文件夹新建一个名为config的文件,用它来配置多个SSH-KEY的管理。

Linux进入.ssh文件夹:cd ~/.ssh,新建config文件:touch config;或者:touch ~/.ssh/config。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

Window进入C:/Users/你的用户名/.ssh文件夹,右键新建一个文本文件,改名为config即可。这里要注意,没有.ssh文件夹的要新建一个.ssh名的文件夹。

下面来填写config文件的内容,我以Github、Gitlib、OSChina,局域网为例:

Host github.com
    HostName github.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile /home/Workspace/ssh/id_rsa_github
Host gitlib.com
    HostName gitlib.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile id_rsa_gitlib
Host oschina.com
    HostName oschina.com
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile /D/Workspace/ssh/id_rsa_oschina
Host 192.168.1.222
    HostName 192.168.1.222
    User smallajax@foxmail.com
    PreferredAuthentications publickey
    IdentityFile /D/Workspace/ssh/id_rsa_oschina

解释一下,HostName是服务器的地址,User是用户名,PreferredAuthentications照抄即可,这里主要说的是IdentityFile,上面我们看到了三种情况,所以它的书写原则是:

填私钥文件的本地路径。
不论是Linux还是Windows都可以写相对路径,比如把id_rsa_xxx私钥文件放在.ssh文件夹下。
文件放在不同跟路径下时,需要写绝对路径
Linux中没有放在.ssh文件夹内或者子文件夹。
Windows中没有放在C盘下时。注意据对路径变化,比如C盘下是/C/xo/abc、比如D盘下/D/ssh/id_rsa这样,还看不懂请参考上方例子。

拷贝完成后,把所有的id_rsa私钥文件添加到SSH-Agent,命令如下:

ssh-add id_rsa文件的路径

例如添加.ssh文件夹下的,Linux这样做: ssh-add ~/.ssh/id_rsa,

如果你在.ssh文件夹下: ssh-add id_rsa即可,Windows同理。

此时添加时如果遇到错误,请参考本文最后一节:添加SSH到SSH-Agent时报错。

最后,还剩下项目的用户和邮箱没有配置,和配个单个Git帐号的方式不同,这里我们需要为每个项目分别配置,所以要命令行进入仓库文件夹再设置。第一种情况是先从Git上pull仓库下来,第二种情况是本地初始化Git仓库,总之进入改仓库文件夹后:

git config --local user.name "你的名字"
git config --local user.email "你的邮箱"

例如:

git config --local user.name "YanZhenjie"
git config --local user.email "smallajax@foxmail.com"

不过麻烦的一点是如果是多个项目就需要挨个配置,不过我们一般是pull一个项目就配置一下,也仅仅需要配置一次即可。

注意配置单个Git帐号时,是不进入项目文件夹就可以,不过不是使用--local,而是使用--global就可以全局配置。

配置项目用户和邮箱完成后,我们可以进入项目文件夹下的.git文件夹查看config文件内容,大概内容如下:

...
[user]
	name = YanZhenjie
	email = smallajax@foxmail.com

此时配置全部结束,请查看下方测试SSH-KEY配置是否成功进行测试。如果配置成功,你就可以clone和commit了。 测试SSH-KEY配置是否成功

配置全部结束,我们来测试一下配置是否成功:

如果你是Github:

ssh -T git@github.com

如果是你Gitlib:

ssh -T git@gitlib.com

如果你是局域网192.168.1.222:

ssh -T git@192.168.1.222

其它自行举一反三吧。

此时需要输入刚才生成SSH-KEY时输入的私钥密码,输入后自行观察信息判断是否连接成功。

比如Github的信息是:

Hi yanzhenjie! You've successfully authenticated, but GitHub does not provide shell access.

比如Gitlib的信息是:

Welcome to GitLab, YanZhenjie!

如果不能执行测试命令或者提示什么错误了,请执行ssh-agent bash完后再执行测试命令,如果还不行就是配置有问题了。

添加SSH到SSH-Agent时报错

如果执行ssh-add ...命令提示如下错误:

Could not open a connection to your authentication agent.

那么请执行eval $(ssh-agent)命令后再重试,如果还不行,请再执行ssh-agent bash命令后再执行eval $(ssh-agent)后执行添加命令。另外上述测试配置的命令不能执行时也可以在ssh-agent bash执行完后再测试。

作者:严振杰 来源:CSDN 原文:https://blog.csdn.net/yanzhenjie1003/article/details/69487932 版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值