此文档来源于网络,如有侵权,请联系删除!
文章来源地址https://www.toymoban.com/news/detail-641779.html
前言
Git
是一个开源的分布式
版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理
。也是Linus Torvalds
为了帮助管理Linux内核
开发而开发的一个开放源码的版本控制软件
。
一、Git
1.Git-概述
Git概述
- Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
- Git 易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和ClearCase 等版本控制工具。
1.1.Git-概述-版本控制介绍
版本控制介绍
- 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
- 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
1.2.Git-概述-分布式版本控制VS集中式版本控制
分布式版本控制VS集中式版本控制
- 集中式版本控制:CVs、SVN(Subversion)、VSS
集中化的版本控制系统诸如 CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
- 分布式版本控制:Git、Mercurial、 Bazaar、 Darcs…
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
1.3.Git-概述-代码托管中心
代码托管中心
-
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为
远程库
。-
局域网
- GitLab
-
互联网
- GitHub(外网)
- Gitee码云(国内网站)
-
局域网
1.4.Git-概述-安装和客户端的使用
安装和客户端的使用
- Git官网:https://git-scm.com/
- Git下载安装:https://blog.csdn.net/weixin_44904239/article/details/131931961
2.Git-命令(常用命令)
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
2.1.Git-命令-设置用户签名
设置用户签名
-
设置用户名
git config --global user.name 用户名
-
设置邮箱
git config --global user.email 邮箱
-
查看是否配置成功
-
打开电脑C盘→用户→电脑名称用户文件夹→查看.gitconfig文件内容
-
打开电脑C盘→用户→电脑名称用户文件夹→查看.gitconfig文件内容
说明
- 签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。
Git 首次安装必须设置一下用户签名,否则无法提交代码。
注意:
这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
2.2.Git-命令-初始化本地库
初始化本地库
-
初始化本地库
git init
初始化完成以后,文件夹下就会出现一个.git的隐藏文件
2.3.Git-命令-查看本地库状态
查看本地库状态
-
查看本地库状态(首次查看,工作区没有任何文件)
git status
-
编辑文件(与Linux命令相同,文件存在则编辑,文件不存在则创建+编辑)
vim 文件名
按i进入编辑模式→输入内容→按Esc退出编辑模式→输入":wq"按回车键保存退出
-
显示当前目录下的内容
-
查看本地库状态(再次查看,检测到有未跟踪的文件)
2.4.Git-命令-添加暂存区
添加暂存区
-
添加暂存区
git add 文件名
-
查看本地库状态(添加到暂存区,再次查看)
-
删除暂存区的文件(删除暂存区的文件后,工作区文件还是存在的)
git rm --cached 文件名
-
查看本地库状态(删除暂存区的文件,再次查看,检测到有未跟踪的文件)
2.5.Git-命令-提交本地库
提交本地库
-
提交本地库
git commit -m "日志信息" 文件名
-
查看本地库状态(提交本地库后查看本地库状态,显示在分机主机上无任何可提交的东西,工作树是干净的)
-
查看引用日志信息
git reflog
-
查看详细日志信息
git log
2.6.Git-命令-修改文件
修改文件
-
修改文件(与Linux命令相同,文件存在则编辑,文件不存在则创建+编辑)
vim 文件名
按i切换编辑模式
编辑完成后按Esc退出编辑模式→输入":wq"按回车保存退出
2.7.Git-命令-版本穿梭
版本穿梭
-
查看版本信息
git reflog
-
查看版本详细信息
git log
-
版本穿梭
git reset --hard 版本号
3.Git-分支
3.1.Git-分支-概述和优点
概述和优点
- 什么是分支
在版本控制过程中,同时推进多个任务,为每个任务我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是个单独的副本。(分支底层其实也是指针的引用)
- 分支的好处
同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
命令名称 | 作用 |
---|---|
git branch -v | 查看分支 |
git branch 分支名 | 创建分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
3.2.Git-分支-查看
查看
-
查看
git branch -v
3.3.Git-分支-创建
创建
-
创建
git branch 分支名
3.4.Git-分支-切换
切换
-
切换
git checkout 分支名
3.5.Git-分支-合并分支(正常合并)
合并分支(正常合并)
-
合并分支(正常合并)
git merge 分支名
3.6.Git-分支-合并分支(冲突合并)
合并分支(冲突合并)
- 冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
案例(模拟合并冲突)
解决合并冲突
“查看状态(检测到有文件有两处修改)“
4.Git-团队协作和跨团队协作
团队协作和跨团队协作
-
团队协作
-
跨团队协作
二、Git-GitHub
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 本地库分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
GitHub官网:https://github.com/
-
注册(根据提示要求进行注册)
-
登录(根据提示要求进行登录)
-
登录以后画面显示
1.GitHub-创建远程库&创建别名
创建远程库
-
创建远程库
1.点击加号→New repository(创建新的远程仓库)
2.设置远程库名称(一般是和自己本地库同名)→Create repository(创建新的远程仓库)
3.创建成功
4.查看远程库的HTTPS链接&SSH链接
创建别名
-
查看别名(查看当前所有远程地址别名-如图所示没有查到别名)
git remote -v
-
创建别名
git remote add 别名 远程地址
创建别名以后在查看别名(别名创建成功)
2.GitHub-推送本地库到远程库
推送本地库到远程库
-
推送本地库到远程库
git push 别名 分支
提示输入yes后回车报错
再次执行命令还是报错 -
如上图所示报错解决办法:https://blog.csdn.net/weixin_44904239/article/details/132025848
推送本地库到远程库成功
GitHub查看推送内容
3.GitHub-拉取远程库到本地库
拉取远程库到本地库
-
修改Git Hub远程库内容
-
拉取远程库到本地库
git pull 远程库地址别名 本地库分支名
4.GitHub-克隆远程库到本地
克隆远程库到本地
-
克隆远程库到本地
1.拿到远程库的链接地址
2.本地电脑创建一个新的文件夹用来存储远程库克隆文件(在新建的文件夹中打开Git bash)
3.克隆远程库到本地
git clone 远程地址
4.克隆完成后查看新建文件夹中就会有从远程库克隆过来的文件等。。。
-
总结:clone会做如下操作
- 1.拉取代码
- 2.初始化本地仓库
- 3.创建别名
5.GitHub-团队内协作
团队内协作
其他人想要推送和拉取代码到远程库,需要邀请其他人加入到到这个团队中
-
邀请人员加入到团队中
1.访问GitHub官网:https://github.com/ 然后登录
2.点击需要邀请成员加入的项目
3.Setting→Collaborators→Add people
4.输入被邀请人的账号→添加成员
5.复制邀请函(将邀请行发给被邀请的成员)
6.被邀请的人需要访问GitHub→登录GitHub→将收到的邀请行复制到已经登录的浏览器地址栏然后访问→点击Accept invitation接受邀请→然后就可以看到项目内容等信息
7.被邀请的人就可以推送和拉取代码到远程库
6.GitHub-跨团队协作
跨团队协作
-
A将远程仓库的项目地址复制发送给跨团队协作的人员B。
-
搜索项目(两种方法)
方法一
:跨团队协作的人员B拿到项目地址后,将项目地址复制到已经登陆了GitHub的浏览器地址栏
方法二
:跨团队协作的人员B以 “账号名/项目名” 的方式,在GitHub网站的搜索框内进行搜索 -
跨团队协作的人员B将项目叉到自己账号中(自己账号下就会显示叉过来的项目)
-
跨团队协作的人员B就可以克隆到自己的本地库或者直接线上修改(修改完成以后只有自己能看到,A是看不到的)
-
跨团队协作的人员B修改完代码后创建拉取请求
-
A查看拉取请求
-
A合并跨团队协作人员B修改过的代码
7.GitHub-SSH免密登录
SSH免密登录
-
生成SSH密钥(打开Git Bash执行下面命令)
ssh-keygen -t rsa -b 4096 -C "邮箱号"
此处邮箱号为创建GitHub账号的电子邮件地址,途中会让你输入密码啥的,不用管,一路回车即可,则会生成SSH密钥(如果重新生成的话会覆盖之前的SSH密钥)。
-
查看公钥&私钥文件(两种方法)
方法一
:找到公钥文件所在的目录直接打开查看此处可以看到一对文件,其中以
.pub
结尾的是公钥文件,另一个没有后缀的是私钥文件。方法二
:通过打开Git Bash执行命令查看 -
将SSH公钥添加到GitHub
1.登录GitHub,点击头像
2.点击Settings
3.SSH and GPG keys→New SSH key
4.填写标题→粘贴公钥→Add SSH key
5.添加成功
三、Git-IDEA集成Git
1.IDEA集成Git-环境准备
1.1.环境准备-配置Git忽略文件
配置Git忽略文件
-
Eclipse特定文件
-
IDEA特定文件
-
Maven工程的targer目录
为什么要忽略这些文件?
与项目的实际功能无关,不参与服务器上部署运行。把他们忽略掉能够屏蔽IDE工具之间的差异。
-
配置Git忽略文件
1.创建忽略规则文件
xxxx.ignore(前缀名随便起,建议是git.ignore)
这个文件的存放位置原则上放在哪里都可以,
为了便于让 ~/.gitconfig 文件引用,建议放在用户家目录下
git.ignore
文件模板内容如下:# Compiled class file 编译后的类文件 *.class # Log file 日志文件 *.log # BlueJ files *.ctxt # Mobile Tools for Java .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
2.在
.gitconfig
文件中引用忽略配置文件(此文件在Windows的家目录中)[user] name = xiongjian email = xiongjian@163.com [core] excludesfile = C:/Users/xiongjian/git.ignore
C:/Users/xiongjian/git.ignore代表的是git.ignore文件存在的目录位置,
注意:这里要使用 "正斜线(/)",不要使用 "反斜线(\)"
1.2.环境准备-IDEA定位Git程序
IDEA定位Git程序
-
打开IDEA→File→Settings
-
Version Control→Git→选择自己本地安装的Git目录→Test测试→测试成功点击OK→OK
2.IDEA集成Git-初始化&添加&提交
2.1.初始化本地库
-
VCS→Import into Version Control→Create Git Repository
-
选择需要被Git管理的项目→OK
2.2.添加到暂存区
-
pom.xml文件显示红色,表示该文件未被追踪,未添加到暂存区
-
选择pom.xml文件,鼠标右键→Git→Add
2.3.提交到本地库
-
pom.xml文件显示绿色,表示该文件已添加到暂存区,还未提交到本地库
-
选择pom.xml文件,鼠标右键→Git→Commit File
-
可以编写提交消息→查看提交内容→Commit
2.4.同时多个文件添加到暂存区&多个文件提交到本地库
-
创建新的文件的时候会有提示是否要将创建的文件添加到Git中
-
两个文件未添加到暂存区
-
选择整个项目,鼠标右键→Git→Add
-
两个文件未添加到本地库
-
选择整个项目,鼠标右键→Git→Commit Directory
-
Commit
3.IDEA集成Git-切换版本
-
蓝色的文件表示该文件被追踪过,但是文件内容做了修改,还未添加到暂存区
-
添加暂存区
-
提交本地库(蓝色文件可以不添加暂存区直接提交本地库)
-
查看版本信息
-
切换版本(选择要切换的版本,鼠标右键→Checkout Revision)
黄色头指针指向了second commit版本,页面内容也发生了变化
4.IDEA集成Git-创建分支&切换分支
4.1.创建分支(两种方法)
方法一
-
点击项目名称,鼠标右键→Git→Repository→Branches
-
New Branch
-
起分支名→OK
方法二
-
Git:master→New Branches
4.2.切换分支
Git:master→选择要切换的分支→Checkout
5.IDEA集成Git-合并分支(正常合并)
合并分支(正常合并)
-
切换到hot-fix分支
-
在hot-fix分支上修改或添加代码
-
提交本地库
-
切换到master分支
-
将hot-fix分支合并到master分支
6.IDEA集成Git-合并分支(冲突合并)
合并分支(冲突合并)
-
切换到hot-fix分支
-
在hot-fix分支上修改或添加代码
-
提交本地库
-
切换到master分支
-
在master分支上修改或添加代码
-
提交本地库
-
这里清楚的看到针对于同一个版本修改了两次(此时合并必然发生冲突)
-
将hot-fix分支合并到master分支
-
合并成功
四、Git-IDEA集成GitHub
1.IDEA集成GitHub-IDEA安装GitHub插件
-
File→Settings
-
Plugins→搜索 “GitHub” 查看是否安装(我这边已经安装好了,如果没有安装就自行安装)
2.IDEA集成GitHub-设置GitHub账号
1.File→Settings
2.Version Control→GitHub→点击+号
3.输入GitHub账号和密码→Log In(IDEA使用账号和密码很难登录上)
4.使用口令登录
5.访问GitHub官网→登录→点击头像
GitHub官网:https://github.com/
6.Settings
7.Developer settings
8.Personal access tokens→Tokens (classic)→Generate new token
9.Generate new token (classic)
10.取名→设置口令失效时间→设置权限(勾选所有权限)→Generate token
11.复制口令(创建完成第一时间复制口令,不然刷新一下就找不到了,就要重新创建口令了)
12.粘贴口令→Log In
13.OK
3.IDEA集成GitHub-分享项目到GitHub
注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
1.VCS→lmport into Version Control→ Share Project on GitHub
2.定义远程库名称→起别名→添加描述信息→Share分享
分享前确认网络流畅,能正常访问GitHub官网,避免分享失败
分享失败解决方法参考:https://blog.csdn.net/weixin_44904239/article/details/132105434
3.创建远程库及推送中
4.用浏览器登录授权
5.在GitHub上成功共享项目
6.成功后,GitHub就能看到分享成功的远程库及推送的代码
4.IDEA集成GitHub-推送代码到远程库
1.添加或修改代码
2.提交本地库
3.推送代码到GitHub远程库(两种方法)
方法一
方法二
4.建议使用SSH链接方式
5.GitHub网站上复制项目的SSH链接
6.创建SSH链接方式
7.修改成SSH链接方式
8.推送代码到GitHub远程库
9.推送成功
5.IDEA集成GitHub-拉取远程代码合并本地库
注意:pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
1.访问GitHub官网,登录后修改代码并提交修改
2.打开IDEA→VCS→Git→Pull
3.拉取远程代码合并本地库成功
6.IDEA集成GitHub-克隆代码到本地
1.删除本地库项目代码
2.打开IDEA→Check out from Version Control→Git
3.打开GitHub官网→登录→复制项目链接
4.粘贴项目链接→选择克隆下来项目存放的位置→Test(测试是否正常)→Clone
5.等待项目克隆完成
6.项目克隆完成
五、Git-码云(Gitee)
众所周知,GitHub服务器在国外,使用GitHub作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内的项目托管网站-码云。
码云是开源中国推出的基于Git的代码托管服务中心,网址是 https://gitee.com/,使用方式跟GitHub一样,而且它还是一个中文网站,如果你英文不是很好它是最好的选择。
1.码云-账号注册登录&创建远程库
1.1.账号注册
官网:https://gitee.com/
1.2.账号登录
官网:https://gitee.com/
1.3.创建远程库
1.点击 “+” 号→创建仓库
2.输入仓库名称→创建
3.创建完成
2.码云-IDEA集成Gitee码云
2.1.IDEA集成码云
1.File→Settings
2.Plugins→Marketplace→搜索"Gitee"→Install→Restart IDE→Restart
2.2.IDEA连接码云
1.File→Settings
2.Version Control→Gitee→点击 “+” 号
3.输入账号、密码→Lon In→OK
2.3.IDEA集成码云-推送代码到远程库
1.打开Gitee官网→登录→复制项目链接
2.打开IDEA→选择要推送项目点击鼠标右键→Git→Repository→Push
3.origin→Define Remote→设置名称、粘贴项目链接→OK
4.输入Gitee账号和密码→Continue
5.origin→origin-gitee→Push
6.推送成功
3.码云-导入GitHub项目
1.创建项目→点击导入→选择导入方式,然后填写完信息点击导入即可
六、Git-GitLab
自建代码托管平台-GitLab
1.GitLab-简介和环境安装准备
1.1.GitLab简介
GitLab 是由 GitLabInc.开发,使用MIT 许可证的基于网络的Git 仓库管理工具,且具有wiki和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
- GitLab官网地址: https://about.gitlab.com/
- 安装说明:https://gitlab.cn/install/
1.2.GitLab安装准备
- 服务器准备
准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。配置好主机名和IP,保证服务器可以上网。
我这边使用虚拟机:主机名:gitlab-server IP 地址: 192.168.3.240
#修改主机名(修改完成以后重启服务器生效)
vim /etc/hostname
- 安装包准备
Yum 在线安装 gitlab-ce 时,需要下载几百M的安装文件,非常耗时,所以最好提前把所需rpm包下载到本地,然后使用离线rpm的方式安装。
下载地址:https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
下载完成后直接将rpm包上传到服务器/opt/module 目录下即可。
2.GitLab-安装&初始化服务&启动服务
2.1.GitLab安装
1.执行下面命令先安装rpm包
sudo rpm -vih /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
2.根据下面安装说明一步步操作
-
安装说明:https://gitlab.cn/install/
sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo systemctl reload firewalld
sudo yum install postfix sudo systemctl enable postfix sudo systemctl start postfix
#这步执行等待时间比较长需要耐心等待 curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash #会删除安装旧的版本,安装新的版本 sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-jh
#查看密码文件 cat /etc/gitlab/initial_root_password
2.2.GitLab初始化服务
#GitLab初始化服务(需要耐心等待,出现如下图所示表示初始化服务成功)
gitlab-ctl reconfigure
#修改gitlab.rb配置文件
vim /etc/gitlab/gitlab.rb
将如下图所示改为服务器IP地址
#修改后内容
external_url "http://192.168.3.240"
#修改完成后重新加载配置文件
gitlab-ctl reconfigure
2.3.GitLab启动服务
#启动GitLab服务
gitlab-ctl start
3.GitLab-登录GitLab&修改密码&GitLab设置为中文
3.1.登录GitLab
1.打开浏览器访问服务器IP地址
2.输入账号:root 密码:根据前面内容找到初始密码粘贴进行登录
3.2.修改GitLab密码
1.点击头像→Preferences
2.Password→输入旧的密码、新的密码→Save password
3.密码更新成功,请重新登录
3.3.GitLab设置为中文
1.点击头像→Preferences
2.Preferences→Language语言选择→选择中文→Save changes保存更改
3.退出账号重新登陆才会生效
4.GitLab-创建远程库
1.创建项目→创建空白项目
2.设置项目名称→公开→创建项目
3.创建成功
5.GitLab-IDEA集成GitLab
5.1.IDEA安装GitLab插件
1.File→Settings
2.Plugins→搜索 “gitlab” →Install→Restart IDE→Restart
5.2.IDEA添加GitLab服务器
1.File→Settings
2.Vresion Control→GitLab→Add New GitLab Server
3.输入链接地址→选择对应的方式→点击OK→OK
5.3.IDEA推送代码到GitLab服务器
1.GitLab上复制项目链接地址
2.鼠标右击要推送的项目→Git→Repository→Push
3.origin→Define Remote
4.命名→粘贴链接地址→OK
5.origin→origin-gitlab→Push
6.输入账号和密码→Continue
7.推送成功
文章来源:https://www.toymoban.com/news/detail-641779.html
此文档来源于网络,如有侵权,请联系删除!
到了这里,关于Git入门到精通——保姆级教程(涵盖GitHub、Gitee、GitLab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!