git教程(2)---远程仓库操作

这篇具有很好参考价值的文章主要介绍了git教程(2)---远程仓库操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

远程操作

创建远程仓库

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

可以看到此时已经创建好了一个远程仓库,仓库下会有两个默认的README文件,一个是中文版另一个是英文版,是用来介绍你这个仓库是用来干什么的。

git教程(2)---远程仓库操作,git,git

将仓库设置为开源。

git教程(2)---远程仓库操作,git,git

克隆远程仓库

HTTPS

git教程(2)---远程仓库操作,git,git

🚀直接使用git clone https://... 将仓库克隆到本地。

git教程(2)---远程仓库操作,git,git

SSH

🚀SSH协议使用了公钥加密和公钥登录机制,体现了实用性和安全性,使用此协议的时候需要将我们的公钥放在服务器上,由Git服务器进行管理。使用HTTPS协议没有要求,直接就能克隆到本地。

git教程(2)---远程仓库操作,git,git

直接使用SSH协议克隆远程仓库到本地是不行的。所以要遵循以下步骤:

  • 在用户目录下创建.ssh目录(如果存在就不用创建,并且如果有id_rsa 和 id_rsa.pub 两个文件可以直接跳过下一步,将 id_rsa.pub 中的内容添加到Git服务器上即可),生成SSH密钥对。
    ssh-keygen -t rsa -C "git服务器绑定的邮箱"生成密钥对(一路回车就可以)。
    git教程(2)---远程仓库操作,git,git

  • 将公钥添加到远程仓库。
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    此时就能够成功克隆远程仓库到本地
    git教程(2)---远程仓库操作,git,git

🚀当我们把远程仓库克隆到本地后,Git会将远程仓库的master分支和本地仓库的master分支对应起来,远程仓库的名称默认是origin(使用git remote 查看)。
git教程(2)---远程仓库操作,git,git
或者使用git remote -v查看更详细的信息
git教程(2)---远程仓库操作,git,git

向远程仓库推送

例如:创建一个文件,然后同步到远程仓库。

在推送到远程仓库之前一定要配置一下本地仓库的user.name 和 user.email 保持与远程仓库一致。

git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名>

git教程(2)---远程仓库操作,git,git

git教程(2)---远程仓库操作,git,git

拉取远程仓库

例如:在远程仓库进行一次修改,然后同步到本地仓库(这是为了实验,不要在远程仓库做修改)。

git教程(2)---远程仓库操作,git,git

git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>

git教程(2)---远程仓库操作,git,git

.gitignore文件

🚀如果创建仓库时没有勾选.gitignore文件,可以自己创建。写在.gitignore文件中的文件,会被git忽略掉。

例如:忽略掉 .i 和 .o为结尾的文件:

git教程(2)---远程仓库操作,git,git
🚀在工作区创建以.i和.o为结尾的文件,使用git status查看仓库的状态。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

可以看到这两个文件确实被git忽略掉了,证明.gitignore文件已经生效了。

特殊情况

  • 如果想添加某个文件,但是这个文件已经被忽略掉了,可以使用git add filename -f强制添加
  • 你想添加某个以.i结尾的文件,返现该文件被忽略了,你想可能是.gitignore文件内容写错了,可以使用git check-ignore -v 进行检查
    git教程(2)---远程仓库操作,git,git
    显示在.gitignore文件的第三行,表明了忽略掉以.i为结尾的所有文件
  • 想要忽略某一类文件,但是不想忽略掉这一类中的某一个或几个文件。例如:忽略掉所有以.开头的文件,但是不想忽略掉.gitignore文件,这样的情况可以在.gitignore文件中特殊标注。
.* #表示忽略掉所有以.开头的文件
!.gitignore #表示不忽略.gitignore文件

给git指令起别名

git config [--global] alias.别名 原本名称

🚀例如,给status起别名为st,这样以后查看仓库状态就可以使用git st了。

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

Issues

git教程(2)---远程仓库操作,git,git

该功能作用就是,当某个人发现代码存在bug时,可以创建一个Issues来告诉仓库的人员代码存在bug,让他们进行修复。

git教程(2)---远程仓库操作,git,git

对于仓库人员,修复完问题后可以将此Issues的状态进行修改。

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

Pull Requests

🚀在实际的开发中,开发者都是在dev分支上进行开发,然后再合并到master分支上的,但是并不是随意就能合并到master分支上的,要在合并之前给仓库的管理员提交合并分支的申请,在申请得到同意后才能够进行合并。这个Pull Requests就是提交申请用的。

git教程(2)---远程仓库操作,git,git

标签管理

操作标签

🚀标签就相当于对某一次commit起一个别名,其作用有:

  • 在项目中发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来标识v1.0版本已经完成,具有里程碑意义。
  • 对于commit id来说是比较让人记住的,tag能很好的解决这个问题,tag更容易被人记住,所以在tag起名字的时候一定要容易记住并且有一定的意义。当我们要回退到某个重要的版本的时候,可以直接通过tag定位到那个版本。

🚀创建标签

  • git tag v1.0 默认是给最后一次提交打上v1.0的标签
    git教程(2)---远程仓库操作,git,git
  • git tag v0.5 commit id 指定某次提交打一个标签
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • git tag -a v0.6 -m"" commit id 可以在打标签的时候写一些备注信息
    git教程(2)---远程仓库操作,git,git
    这样是看不到tag的备注信息的。
    git show 标签名 来查看标签的详细信息
    git教程(2)---远程仓库操作,git,git
    🚀 查看有哪些标签
  • git tag
    git教程(2)---远程仓库操作,git,git

🚀在本地删除标签

  • git tag -d 标签名 删除标签
    git教程(2)---远程仓库操作,git,git

推送标签

git教程(2)---远程仓库操作,git,git

在远程仓库也是有标签的,所以我们可以将本地仓库的标签提交的远程仓库中。

🚀推送标签

  • git push origin v1.0 将此标签推送到远程仓库
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • git push origin --tags 将本地所有标签推送到远程仓库
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • git push origin :v1.0 将本地删除的v1.0标签推送的远程仓库
	git tag -d v1.0

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

多人协作

场景一

两个开发人员A和B同时开发一个文件file.txt,A在文件中写入aaa的内容,B在文件中写入bbb的内容,最终推送到远程的master分支上。
在这里就用Windows端和Linux端替代两个开发人员。

🚀首先,在Windows端先将仓库克隆到本地。
git教程(2)---远程仓库操作,git,git
🚀将Windows端的开发人员给予仓库的提交权限。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

🚀开发一个新的文件肯定是不能在master分支上进行开发的,所以要先创建一个dev分支。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀开发人员A使用git pull拉取仓库信息。
git教程(2)---远程仓库操作,git,git
git branch -r 查看远程的分支
git教程(2)---远程仓库操作,git,git
🚀开发人员A在本地创建dev分支,并与远程的dev分支建立链接关系git checkout -b dev origin/dev(建立链接关系后可以直接使用git pull 或者 git push 进行分支上数据的拉取与推送)。
git教程(2)---远程仓库操作,git,git
git branch -vv查看本地分支与远程分支的链接关系。
git教程(2)---远程仓库操作,git,git
🚀对于开发者B也要在本地创建dev分支,并且和远端的dev分支建立链接关系。
git教程(2)---远程仓库操作,git,git

🚀开发人员A在本地开发file文件,然后push到远程仓库。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

🚀开发人员B也在file文件下开发,开发完后推送到远程的dev分支。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

可以看到在开发人员B提交自己开发的代码时候,push会报错。这是因为此时B人员的本地仓库中dev分支已经不是最新状态了,要先git pull拉取最新的分支信息。

git教程(2)---远程仓库操作,git,git

git pull 后提示出现冲突,所以要手动的修改这个冲突。

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀开发人员B解决完冲突后,重新推送。
git教程(2)---远程仓库操作,git,git
🚀在远程仓库的dev分支下已经达到了想要的成果。
git教程(2)---远程仓库操作,git,git
🚀最后还要将dev分支合并到master分支上,可以选择走pull requests,也可以在本地先完成合并再推送到远端上,最终再删除dev分支。下面展示让开发人员A在本地合并好后在推送到远程仓库。

  • 在dev分支下git pull拉取最新的dev分支信息。
    git教程(2)---远程仓库操作,git,git
  • 切换到master分支,保证master分支处于最新状态。
    git教程(2)---远程仓库操作,git,git
  • 方式在master分支上合并dev分支出现合并冲突,先在dev分支上合并master分支,出现问题在dev分支上解决。
    git教程(2)---远程仓库操作,git,git
  • 再切换到master分支上,合并dev分支。
    git教程(2)---远程仓库操作,git,git
  • 将本地master分支最新状态推送到远程仓库。
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • 删除dev分支
    git教程(2)---远程仓库操作,git,git

场景二

开发人员A和B共同开发一个项目,A负责funcA功能,B负责funcB功能,这个场景中与上个场景不同之处在于针对每个功能都创建一个独立的分支去完成,不是在一个dev分支下完成开发的。

🚀开发人员A在本地创建一个分支feature-A分支,进行开发。
git教程(2)---远程仓库操作,git,git
由于在推送到远程仓库时,远程仓库中并没有feature-A分支,更没有与本地的feature-A分支建立链接关系,所以直接使用git push是不可以的,要使用git push origin feature-A,这样在远程仓库中会自动创建feature-A分支
git教程(2)---远程仓库操作,git,git
🚀开发人员B也在本地创建一个分支feature-B分支,进行开发。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀但是B突发情况,有一些急事要去处理,所以他先将完成的这部分代码推送到远程。
git教程(2)---远程仓库操作,git,git
🚀此时B的工作交给A来继续开发,所以A要先pull拉取feature-B分支,然后再继续在B的基础上开发func2。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
在本地创建feature-B分支,并与远程的feature-B分支建立起链接关系。
git branch --set-upstream-to=origin/feature-B feature-B建立链接关系。
git pull拉取feature-B分支的最新状态。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀在A的帮助下又开发了三分之一,此时B又回到岗位继续开发了。所以A要将最新的状态提交到远程。
git教程(2)---远程仓库操作,git,git
🚀开发人员B需要从远程仓库拉取feature-B分支的最新状态,继续开发,完成后推送到远程仓库。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀此时在远程仓库的featrue-A分支和feature-B分支已经达到了预想的效果。
git教程(2)---远程仓库操作,git,git

🚀将两个分支合并到master分支上。

  • 在将feature-A分支合并到master分支之前,为了防止合并冲突,先将master分支合并到feature-A分支上,如果出现冲突现在本地解决。然后提交pull requests请求。
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • 在将feature-B分支合并到master的时候,可能会发生冲突(如果A和B设计同时开发统一文件时),所以与上面做法一致先将master合并到feature-B上,出现冲突后现在本地解决,然后再将feature-B合并到master分支上。
    先将最新的master分支状态拉取到本地
    git教程(2)---远程仓库操作,git,git
    将master分支合并到feature-B分支上
    git教程(2)---远程仓库操作,git,git
    将feature-B分支合并到master分支,采用提PR的方式
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    完成合并后删除没用的分支

🚀解决在远程仓库删除分支后,在本地使用git branch -r还能查看到已经删除的分支。
git教程(2)---远程仓库操作,git,git
使用命令 git remote show origin,可以查看remote地址,远程分⽀,还有本地分⽀与之相对应关系等信息。
git教程(2)---远程仓库操作,git,git
git remote prune origin移除已经删除的分支还能在本地显示。
git教程(2)---远程仓库操作,git,git

开发模型

🚀在实际的项目开发中主要会经历三个重要的阶段:开发阶段 测试阶段 运维阶段,开发阶段主要涉及项目的规划,写代码,构建等工作,测试阶段主要涉及项目的测试工作,运维阶段主要涉及项目的发布,部署,维护工作。针对不同的阶段,都会有与之匹配的工作环境。

🚀系统的开发环境:

  • 开发环境:开发环境是程序猿们专门用于日常开发的服务器。为了开发调试方便,⼀般打开全部错误报告和测试⼯具,是最基础的环境。
  • 测试环境:⼀个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。该环境是开发环境到生产环境的过渡环境。
  • 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测而设立的⼀套环境。其配置等基本和生产环境⼀致,目的是能让我们发正式环境时更有把握!所以预发布环境是你的产品质量最后⼀道防线,因为下⼀步你的项目就要上线了。要注意预发布环境服务器不在线上集成服务器范围之内,为单独的一些机器。
  • 生产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是⽣产环境。

git教程(2)---远程仓库操作,git,git

Git分支设计规范

🚀一般来说,针对上面不同的环境来设计不同的分支,例如:

分支 名称 适用环境
master 主分支 生产环境
release 预发布分支 预发布/测试环境
develop 开发分支 开发环境
feature 需求开发分支 本地
hotfix 紧急修复分支 本地

🚀master分支

  • master 为主分⽀,该分⽀为只读且唯⼀分支。⽤于部署到正式发布环境,⼀般由合并release 分⽀得到。
  • 主分支作为稳定的唯⼀代码库,任何情况下不允许直接在 master 分支上修改代码。
  • 产品的功能全部实现后,最终在master分支对外发布,另外所有在master分支的推送应该打标签(tag)做记录,方便追溯。
  • master 分支不可删除。

🚀develop分支

  • develop 为开发分支,基于master分⽀创建的只读且唯⼀分支,始终保持最新完成以及 bug 修复后的代码。可部署到开发环境对应集群。
  • 可根据需求大小程度确定是由 feature 分支合并,还是直接在上⾯开发(非常不建议)。

🚀feature分支

  • feature 分⽀通常为新功能或新特性开发分支,以 develop 分支为基础创建 feature 分支。
  • 命名以 feature/ 开头,建议的命名规则: feature/user_createtime_feature 。
  • 新特性或新功能开发完成后,开发⼈员需合到 develop 分⽀。
  • ⼀旦该需求发布上线,便将其删除。

🚀release分支

  • release 为预发布分⽀,基于本次上线所有的 feature 分支合并到 develop 分支之后,基于 develop 分⽀创建。可以部署到测试或预发布集群。
  • 命名以 release/ 开头,建议的命名规则: release/version_publishtime 。
  • release 分⽀主要用于提交给测试⼈员进行功能测试。发布提测阶段,会以 release 分支代码为基准进行提测。
  • 如果在 release 分支测试出问题,需要回归验证 develop 分支看否存在此问题。
  • release 分支属于临时分支,产品上线后可选删除。

🚀hotfix分支

  • hotfix 分⽀为线上 bug 修复分支或叫补丁分支,主要用于对线上的版本进行 bug 修复。当线上出现紧急问题需要马上修复时,需要基于 master 分支创建 hotfix 分支。
  • 命名以 hotfix/ 开头,建议的命名规则: hotfix/user_createtime_hotfix。
  • 当问题修复完成后,需要合并到 master 分支和 develop 分支并推送远程。一旦修复上线,便将其删除。

使用Gitee的DevOps平台体验项目开发流程

🚀Gitee企业版免费版

git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
要使用上面的那种分支模型,选择生产/开发分支其他的分支后续创建即可,因为如果选择了开发/发布/缺陷分离模型的话默认提供了feature等分支,但是通常来说是需要多个feature分支的,如果采用这种模型的话是不能再去创建feature分支的,所以选择生产/开发模型即可。

git教程(2)---远程仓库操作,git,git
🚀为企业添加人员
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git
🚀在项目和仓库中添加人员。
git教程(2)---远程仓库操作,git,git
git教程(2)---远程仓库操作,git,git

🚀模拟开发流程。

在file文件下进行开发,增加一个需求。
首先,要从develop分支的基础上创建处一个feature分支,完成需求后将feature分支合并到develop分支,删除feature分支。
在develop分支的基础上创建一个release分支,测试人员在此分支上进行测试工作。
测试完毕后将release分支合并到master分支进行上线。文章来源地址https://www.toymoban.com/news/detail-735235.html

  • 创建feature分支完成需求的开发
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • 将feature分支合并到develop分支。
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
  • 将develop分支合并到release分支(与上面操作一致)。
  • 将release分支合并到master分支。
    git教程(2)---远程仓库操作,git,git
    git教程(2)---远程仓库操作,git,git
    如果线上出现问题,可能还需要hotfix分支,在hotfix分支上解决问题后,要将hotfix分支合并到master分支和develop分支上。
    在合并完分支后要及时清理那些已经没用的分支。

到了这里,关于git教程(2)---远程仓库操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git 远程仓库操作命令详解

    远程仓库(remote) 远程库可以多人协同开发 将代码上传到码云 远程库的操作的命令

    2024年02月09日
    浏览(48)
  • Git第十一讲 Git远程仓库操作

    远程仓库是与他人共享代码并进行协作开发的关键。Git 提供了丰富的功能来管理远程仓库,包括拉取、推送和解决冲突等操作。本章将介绍如何有效地进行远程仓库操作。 拉取和推送是与远程仓库进行数据同步的常用操作。通过拉取,你可以获取远程仓库中的最新更改并合

    2024年02月13日
    浏览(55)
  • Git 学习(三)—— 本地仓库 — 远程仓库的操作命令

    为了可以让其他用户看到自己的成果,我们可以将自己本地仓库的内容上传到远程仓库;如果我们希望借鉴其他用户的成果,我们可以将远程仓库里的一些内容拉取或者克隆到本地仓库。 这里先暂不考虑 本地到远程 或者 远程到本地 的一些相关操作,我们只需要知道出发点

    2024年02月16日
    浏览(68)
  • git基本命令,分支操作,远程仓库

    介绍 安装 配置 1、本地文件修改 添加到暂存区 2、本地文件修改 不添加到暂存区 3、git reset版本穿梭 合并冲突: 删除分支 局域网:gitlab(github和gitee都是使用gitlab搭建的) 自己搭需要自己的服务器 公网:gitee / github 最好不要初始化仓库(默认会创建文件) 可以拷贝创建后的远程

    2024年01月24日
    浏览(77)
  • 一些关于远程仓库操作的git指令

    1、更换项目所关联的仓库 ( 要先删除目前的远程仓库,然后再添加新的远程仓库 ) (1)git remote rm origin (2)git remote add origin   新的仓库地址 (3) git remote -v (查看现在的远程仓库) (4)git init (5)git add . (6)git commit -m \\\"项目改动了啥balabal\\\" (7)git push 新建的项目

    2024年02月07日
    浏览(46)
  • Git与Gitee远程仓库的系列操作

    ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:@逐梦苍穹 ⭐所属专栏:Git ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁 Git、Github、Gitee的区别请看我这篇文章:http://t.csdn.cn/tGEHi 我

    2024年02月09日
    浏览(52)
  • git拉取远程仓库到本地并建立远程分支+各类操作

    我决定自己写一篇文章,不然每次玩git都要找许多文章搞半天才会,很浪费时间!!!!!!!!! 本文包括如何用git将远程仓库拉取到本地、建立远程分支和一些问题的解决方案等,非常之详细!!! 首先在桌面新建一个文件夹,打开该文件夹,点击右键,选择“Git Bas

    2024年02月07日
    浏览(87)
  • 【Git 入门教程】第五节、Git远程仓库

    Git是一种分布式版本控制系统,它允许开发者在不同计算机之间协作并共享代码。在本文中,我们将介绍如何以Git为基础进行远程协作。其中包括克隆仓库、推送代码、拉取代码等操作。 要协作开发一个Git项目,需要从服务器上获取该项目的副本。 运行以下命令来克隆Git仓

    2024年02月01日
    浏览(52)
  • Git 基本操作【本地仓库与远程仓库的推送、克隆和拉取】

    Git 是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库: 本地仓库和远程仓库 工作流程如下 1.从远程仓库中克隆或拉取代码到本地仓库(clone/pull) 2.从本地进行代码修改 3.在提交前先将代码提交到暂存区 4.提交到本地仓库。本地仓库中

    2024年02月07日
    浏览(77)
  • Git教程学习:06 远程仓库的使用

    为了能在任意 Git 项目上协作,我们需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中我们项目的版本库。 我们可以有好几个远程仓库,通常有些仓库对我们只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管

    2024年01月19日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包