Git

概述

git 是一个分布式版本控制系统,

版本控制 是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目 (包含历史记录,更加安全)

工作机制

工作区——git add——> 暂存区——git commit——> 本地库

工作区:写代码;

暂存区:临时存储;

本地库:历史版本;

代码托管中心

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

局域网:GitLab

互联网:GitHub,Gitee码云

基础操作命令

初始化本地仓库:git init

查看本地库状态:git status

添加暂存区:git add 文件名 (git add . //将所有修改加入暂存区)

提交本地库:git commit -m “日志信息” 文件名

工作区的文件是git对象,不能看作是项目,要添加到暂存区,才能形成一个项目。

查看简易版本信息:git reflog (参看详细版本信息:git log)

版本穿梭:git reset –hard 版本号

分支

在版本控制中,要同时推进多个任务,对每个任务就可以单独创建一个分支。

使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己的分支时不会影响主线分支的运行。(分支底层是指针的引用)

分支操作:

创建分支:git branch 分支名

查看分支:git branch -v

切换分支:git checkout 分支名

将指定分支合并到当前分支上:git merge 分支名

指定分支要提交本地库,合并后,当前分支才会修改。

合并冲突:

当两个分支修改了同一个文件,并都提交到本地库,那么合并时,系统发现一个文件出现两个版本,不知道应该选择哪一个,就是发生了冲突。需要手动修改,选择。

添加远程仓库

git remote -v :查看当前所有远程地址别名

git remote add 别名 远程地址 :添加远程库地址和别名

推送本地分支到远程仓库 :git push 别名 分支

拉取远程库到本地库 : git pull 别名 分支 (自动提交到本地库)

克隆远程库到本地库:git clone 远程地址 (add + pull)

删除远程仓库: git remote rm 别名

修改远程仓库地址: git remote set-url 别名 <remote-url>

克隆结果:初始化本地仓库,创建别名

团队内协作

远程仓库的所有人需要在仓库的设置-成员设置中邀请其他团队成员加入,其他成员才能将本地分支推送到远程库

跨团队协作

团队外的人要先用fork获取远程库,修改后在界面的pull requests发送拉取请求。

SSH免密登录

生成 .ssh密钥目录: ssh-keygen -t rsa -C 账号邮箱

在.ssh目录下会有私钥id_rsa,公钥id_rsa.pub,将公钥添加到github上即可。

IDEA集成Git

环境准备:

先配置忽略文件 git.ignore,避免提交无用的文件,避免开发环境差异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//内容如下
# Compoled class file
*.class

# log file
*.log

#Blue files
*.ctxt
a
#Mobile Tools for Java(J2ME)
.mtj.tmp/

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

# virtual machine crash logs
.classpath
.project
.settings
target
.idea
*.iml

然后在 .gitconfig 中添加 :

1
2
[core]
excludesfile = C:/Users/123/git.ignore

之后再idea设置的版本控制中设置git.exe路径。

初始化:

在工具栏的vcs中选择创建git仓库即可。

GitHub

搜索—高级搜索功能:http://github.com/search/advanced 或 搜索框中使用语法进行精确搜索

快捷面板:ctrl + K

仓库内对文件搜索: T键

文件内 行号跳转: L键

查看文件改动记录: B键

仓库详情页 打开 VSCode网页版: 。键d

打开 Gitpod : 在地址前缀前加上 gitpod.io/#/

image-20220508104603843

hexo

前置操作已完成,现在 —— 初始化及部署博客:

新建文件夹 blog, 在blog 中使用git命令:

1
2
3
4
hexo init   //初始化本地博客
hexo clean //清理编译文件
hexo g //生成对应的html文件
hexo s //本地预览运行

修改 _config.yml 文件,在文件最后,修改为:

1
2
3
4
5
6
7
deploy:
type: git
repository: 仓库ssh地址
branch: master

//在17行左右,url下面,添加:
root: /仓库名

上传:

1
2
npm install hexo-deployer-git --save
hexo d

每次预览:

1
2
3
hexo clean 
hexo g
hexo s

每次上传:

1
2
3
4
hexo clean
hexo g
hexo d
还要到gitee上更新pages服务,才会生效

主题:

1
git clone 主题地址(github地址)

修改 _config.yml 文件中的 theme: 主题文件名

源文件上传git:
git push -u origin main

1
2
3
4
5
6
7
完整操作:
git add .
git commit -m "first commit"
git branch -M main
git remote add origin 地址
git push -u origin main
//推送到master分支不知为何,会出错

恢复源文件:

1
2
3
4
git clone 地址
npm install
hexo g
hexo s/d //本地预览或上传

常用hexo命令

常见命令

1
2
3
4
5
6
7
hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
hexo generate #生成静态页面至public目录
hexo server #开启预览访问端口(默认端口4000,'ctrl + c'关闭server)
hexo deploy #部署到GitHub
hexo help # 查看帮助
hexo version #查看Hexo的版本

缩写:

1
2
3
4
hexo n == hexo new
hexo g == hexo generate
hexo s == hexo server
hexo d == hexo deploy

组合命令:

1
2
hexo s -g #生成并本地预览
hexo d -g #生成并上传

a

hexo-butterfly

扉页

  • page front-matter 用于页面的配置
写法 解释
title 页面标题(必须)
date 创建日期(必须)
type 标签类型(标签,分类,友情链接三个页面必须配置)
updated 页面更新日期
description 页面描述
keywords 页面关键字
comments 显示页面评论模块(默认true)
top_img 页面顶部图片
mathjax
katex
aside 显示侧边栏(默认true)
aplayer 在需要的页面加载aplayer的js和css
highlight_shrink 代码框是否展开(默认根据配置文件)
  • post front-matter 文章页的扉页 ,用于文章页的配置
写法 解释
title 页面标题(必须)
date 创建日期(必须)
updated 页面更新日期
tags 文章标签
categories 文章分类
keywords 文章关键字
description 页面描述
keywords 页面关键字
comments 显示页面评论模块(默认true)
top_img 页面顶部图片
cover 文章封面主图,可设 false/图地址/留空
toc 显示文章toc(默认为配置中的enable)
toc_number 显示toc_number
toc_style_simple 显示 toc 简洁模式
copyright_author 文章版权 作者
copyright_author_herf 文章版权 作者的链接
copyright_url 文章版权 文章的链接
copyright_info 文章版权 的版权声明
mathjax
katex
aside 显示侧边栏(默认true)
aplayer 在需要的页面加载aplayer的js和css
highlight_shrink 代码框是否展开(默认根据配置文件)

顶部图

主页的图——index_img:
默认是文章配图——default_top_img:
归档页的主图—— archive_img
标签页的主图——tag_img
标签页的文章配图——tag_per_img
分类页的主图——category_img
分类页的文章配图——category_per_img

其他页面和文章页的top_img: 可以到文章的扉页 配置——top_img: xxx

文章置顶

  • 在文章的扉页 添加 sticky:1 ,数字越大,置顶的优先级越大;

文章封面

  • 在文章的扉页 添加 cover: 图片地址

  • 可以在配置文件里配置默认图片, default_cover: xxx

    如果要配置多张图片,随机选择一张作为cover,写法为:

    1
    2
    3
    4
    default_cover:
    - 图片地址
    - 图片地址
    - 图片地址

文章版权

1
2
3
4
5
6
post_copyright:
enable: true
decode: false
license: CC BY-NC-SA 4.0
license_url: https://creativecommons.org/licenses/by-nc-sa/4.0/

侧边栏

在配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
aside:
enable: true
hide: false
button: true
mobile: true # display on mobile
position: right # left or right
card_author:
enable: true
description:
button:
enable: true
icon: fab fa-github
text: Follow Me
link: https://github.com/xxxxxx
card_announcement:
。。。。等等等

文章打赏

在配置文件

1
2
3
4
5
6
7
8
9
reward:
enable: true
QR_code:
- img: 二维码图片
link:
text:微信
- img: 二维码图片
link:
text: 支付宝

TOC

显示目录,在配置文件

1
2
3
4
5
6
toc:
post: true
page: false
number: true
expand: false
style_simple: false

相关文章推荐

根据tags的比重来推荐,在配置文件

1
2
3
4
related_post:
enable: true
limit: 6 # 显示推荐文章数目
date_type: created # 显示创建或更新日期,created 或 updated

文章锚点

开启后,在文章中滚动时,文章链接会根据标题进行变化(每替换一次,都会留下一次历史记录,锚点过多,可能导致历史记录过多)

配置文件:

1
anchor: true

头像

配置文件

1
2
3
4
5
# Avatar (頭像)
avatar:
img: 图片地址 如: ./img/avatar1.jpg
effect: false #头像一直转圈

网站图标

配置文件

1
favicon: 

图片描述

在图片下显示描述信息,优先 title属性,然后是 alt属性

配置文件:

1
photofigcaption: true

复制

配置文件:

1
2
3
4
5
6
7
# copy settings
# copyright: Add the copyright information after copied content (複製的內容後面加上版權信息)
copy:
enable: true # 能否复制
copyright: # 复制内容后加上版权信息
enable: true
limit_count: 50 #复制文字大于限制时 加版权信息

脚页自定义文本

custom_text: 支持HTML

1
custom_text:  Hi, welcome to my <a href="https://butterfly.js.org/">blog</a>!

插入自定义代码

修改配置文件:

1
2
3
4
5
6
7
8
9
10
# 如;
inject:
head:
- <link rel="stylesheet" href="./css/footer.css">
- <link rel="stylesheet" href="./css/blog.css">
- <link rel="stylesheet" href="./css/cursors.css">
- <link rel="stylesheet" href="./css/opacity.css">
- <link rel="stylesheet" href="./css/scrollbar.css">
bottom:
# - <script src="xxxx"></script>

网站背景

默认白色

配置文件:

1
2
3
4
# Website Background (設置網站背景)
# can set it to color or image (可設置圖片 或者 顔色)
# The formal of image: url(http://xxxxxx.com/xxx.jpg)
background:

网站副标题

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 主页subtitle
subtitle:
enable: true
# Typewriter Effect (打字效果)
effect: true
# loop (循环打字)
loop: true
# source 调用第三方服务
# source: false 关闭调用
# source: 1 调用一言网的一句话(简体) https://hitokoto.cn/
# source: 2 调用一句网(简体) http://yijuzhan.com/
# source: 3 调用今日诗词(简体) https://www.jinrishici.com/
# subtitle 会先显示 source , 再显示 sub 的内容
source: false
# 如果关闭打字效果,subtitle 只会显示 sub 的第一行文字
sub:

备案信息

在页脚的custom_text也可以写代码,在此写下备案跳转链接。

1
2
3
4
5
6
footer:
owner:
enable: true
since: 2021
custom_text: <div><a onclick="window.open('')"></a></div>
copyright: true # Copyright of theme and framework

引擎收录

url持久化

hexo默认生成的文章地址路径是: 网站名/年/月/日/文章名,它的url结构超过3层,较深,对搜索爬虫不友好。

安装:npm install hexo-abbrlink –save

修改配置:

1
2
3
4
permalink: archives/:abbrlink.html
abbrlink:
alg: crc32 #算法:crc16(default)and crc32
rep: hex #进制:dec(default)and hex

添加nofollow标签:

安装:npm install hexo-filter-nofollow –save

添加配置:

1
2
3
4
nofollow:
enable: true
field: site
exclude: ''

标签外挂

(可能有移植问题,不是很推荐)

Gallery相册图库

写法:

  • name:图库名字
  • description:图库描述
  • link:连接到对应相册的地址
  • img-url:图库封面的地址
1
2
3
4
5
6
7
8
9
10
11
12
<div class="gallery-group-main">
{% galleryGroup name description link img-url %}
{% galleryGroup name description link img-url %}
{% galleryGroup name description link img-url %}
</div>

<!-- 例如: -->
<div class="gallery-group-main">
{% galleryGroup '壁纸' '收藏的一些壁纸' '/Gallery/wallpaper' https://i.loli.net/2019/11/10/T7Mu8Aod3egmC4Q.png %}
{% galleryGroup '漫威' '关于漫威的图片' '/Gallery/marvel' https://i.loli.net/2019/12/25/8t97aVlp4hgyBGu.jpg %}
{% galleryGroup 'OH MY GIRL' '关于OH MY GIRL的图片' '/Gallery/ohmygirl' https://i.loli.net/2019/12/25/hOqbQ3BIwa6KWpo.jpg %}
</div>

Gallery相册

这是新的Gallery相册,会自动根据图片进行排版,书写也更方便,与markdown格式一样;

1
2
3
{% gallery %}
markdown 图片格式
{% endgallery %}

tag-hide

可以将 一些内容隐藏起来,并提供按钮让用户点击显示;

注:内容不要用 h1~h6标题,会让目录有一些异常;

inline —— 只能隐藏文字

1
{% hideInline content,display,bg,color %}
  • content: 文本内容

  • display: 按钮显示的文字(可选)

  • bg: 按钮的背景颜色(可选)

  • color: 按钮文字的颜色(可选)

注:content部分不能用英文逗号,可用 &sbquo; 代替

block —— 隐藏多个内容

1
2
3
{% hideBlock display,bg,color %}
content
{% endhideBlock %}
  • content: 文本内容
  • display: 按钮显示的文字(可选)
  • bg: 按钮的背景颜色(可选)
  • color: 按钮文字的颜色(可选)

toggle —— 隐藏大量内容

1
2
3
{% hideToggle display,bg,color %}
content
{% endhideToggle %}