<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Aloys23 Blog</title><description>Drift along</description><link>https://blog.aloys233.top/</link><language>zh_CN</language><item><title>Gitea项目协作功能介绍</title><link>https://blog.aloys233.top/posts/gitea%E9%A1%B9%E7%9B%AE%E5%8D%8F%E4%BD%9C%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/gitea%E9%A1%B9%E7%9B%AE%E5%8D%8F%E4%BD%9C%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D/</guid><description>介绍 Gitea 中 Issue、Label、Assignee、Milestone、Project、Pull Request、Wiki、Release 等项目协作功能。</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;前面几篇文章主要在讲Git本身：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;怎么配置Git和Gitea&lt;/li&gt;
&lt;li&gt;怎么提交代码&lt;/li&gt;
&lt;li&gt;多人协作怎么走Pull Request&lt;/li&gt;
&lt;li&gt;遇到冲突怎么处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;到这里，基本已经能做到：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clone -&amp;gt; 开发 -&amp;gt; commit -&amp;gt; push -&amp;gt; Pull Request -&amp;gt; merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但真正做项目协作时，只会这些还不够。&lt;/p&gt;
&lt;p&gt;很多人会&lt;code&gt;clone&lt;/code&gt;、会&lt;code&gt;push&lt;/code&gt;、会创建Pull Request，但是看到仓库里的这些功能就不知道是干什么的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Issue&lt;/code&gt;（工作项）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Milestone&lt;/code&gt;（里程碑）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Label&lt;/code&gt;（标签）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Project&lt;/code&gt;（项目）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Wiki&lt;/code&gt;（项目文档）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Release&lt;/code&gt;（版本发布）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些功能看起来像是附加功能，实际上它们才是项目协作里很重要的一部分。&lt;/p&gt;
&lt;p&gt;Git解决的是“代码怎么管理”，而Gitea这些功能解决的是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;事情怎么记录
任务怎么分配
进度怎么跟踪
版本怎么发布
文档放在哪里
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这篇就从这些常见功能开始，讲一下Gitea里一个项目到底应该怎么协作。&lt;/p&gt;
&lt;h2&gt;Issue（工作项）&lt;/h2&gt;
&lt;p&gt;先讲&lt;code&gt;Issue&lt;/code&gt;，因为这是最重要的。&lt;/p&gt;
&lt;p&gt;很多人会把&lt;code&gt;Issue&lt;/code&gt;翻译成“问题”，但这样容易理解窄了。&lt;/p&gt;
&lt;p&gt;更准确地说：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Issue = 一条工作记录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它可以是很多东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bug&lt;/li&gt;
&lt;li&gt;功能需求&lt;/li&gt;
&lt;li&gt;优化建议&lt;/li&gt;
&lt;li&gt;待办任务&lt;/li&gt;
&lt;li&gt;文档补充&lt;/li&gt;
&lt;li&gt;讨论事项&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;修复登录失败问题
增加深色模式
优化首页加载速度
补充部署文档
调整用户权限逻辑
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这些都可以创建成Issue。&lt;/p&gt;
&lt;p&gt;如果没有Issue，团队协作很容易变成这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;微信群里说了一句
过几天没人记得
谁负责也不知道
做没做完也不知道
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有了Issue以后，每一件事都有一个记录，可以看到是谁提的、谁负责、现在做到哪一步、最后怎么解决的。&lt;/p&gt;
&lt;h2&gt;创建Issue（工作项）&lt;/h2&gt;
&lt;p&gt;在Gitea仓库页面里，一般可以进入&lt;code&gt;Issues&lt;/code&gt;页面，然后点击&lt;code&gt;New Issue&lt;/code&gt;创建。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/a45a272d499d6e14a93e4e8e7c389328.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/df5eeaf5d4825b1e40ce4e84f430a152.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;创建Issue时，主要看这几项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;标题&lt;/li&gt;
&lt;li&gt;描述&lt;/li&gt;
&lt;li&gt;指派人&lt;/li&gt;
&lt;li&gt;标签&lt;/li&gt;
&lt;li&gt;里程碑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标题要简短明确，不要只写“有问题”“修一下”“报错了”。&lt;/p&gt;
&lt;p&gt;比如下面这种标题就不太好：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;登录有问题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以写得更具体一点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;修复密码错误时登录页面没有提示的问题
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;描述里可以写清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现在是什么现象&lt;/li&gt;
&lt;li&gt;期望应该是什么样&lt;/li&gt;
&lt;li&gt;怎么复现&lt;/li&gt;
&lt;li&gt;有没有截图或日志&lt;/li&gt;
&lt;li&gt;影响范围大不大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bug类Issue可以这样写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### 问题描述

用户输入错误密码后，页面没有显示错误提示。

### 复现步骤

1. 打开登录页面
2. 输入已存在账号
3. 输入错误密码
4. 点击登录

### 期望结果

页面提示“账号或密码错误”。

### 实际结果

页面没有任何提示。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;功能需求可以这样写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### 需求说明

希望增加考试成绩导出功能，管理员可以导出某场考试的成绩表。

### 需要包含

- 学生姓名
- 学号
- 分数
- 提交时间

### 备注

第一版可以先支持导出 CSV。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;写清楚Issue，其实就是减少后面沟通成本。&lt;/p&gt;
&lt;h2&gt;Issue（工作项）的生命周期&lt;/h2&gt;
&lt;p&gt;一个Issue通常会经历这样的过程：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Open
↓
分配负责人
↓
处理中
↓
提交 Pull Request
↓
Review
↓
合并
↓
关闭
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;刚创建出来的Issue一般是&lt;code&gt;Open&lt;/code&gt;状态，表示这个事情还没有完成。&lt;/p&gt;
&lt;p&gt;处理完成后，可以手动关闭，也可以在Pull Request合并时自动关闭。&lt;/p&gt;
&lt;p&gt;比如在PR描述里写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Closes #12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个PR合并后，编号为&lt;code&gt;#12&lt;/code&gt;的Issue就会自动关闭。&lt;/p&gt;
&lt;p&gt;如果只是关联Issue，不想自动关闭，可以写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Related to #12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样别人看PR时，就能知道这次代码修改和哪个Issue有关。&lt;/p&gt;
&lt;h2&gt;Label（标签）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Label&lt;/code&gt;就是标签，用来给Issue或Pull Request分类。&lt;/p&gt;
&lt;p&gt;常见标签有：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bug
enhancement
documentation
question
help wanted
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大概可以这样理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bug&lt;/code&gt;：程序问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;enhancement&lt;/code&gt;：功能增强或优化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;documentation&lt;/code&gt;：文档相关&lt;/li&gt;
&lt;li&gt;&lt;code&gt;question&lt;/code&gt;：问题或讨论&lt;/li&gt;
&lt;li&gt;&lt;code&gt;help wanted&lt;/code&gt;：需要别人帮忙&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标签的作用不是装饰，而是方便筛选。&lt;/p&gt;
&lt;p&gt;比如你只想看所有Bug，就可以筛选&lt;code&gt;bug&lt;/code&gt;标签；只想看文档任务，就筛选&lt;code&gt;documentation&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;项目大一点后，如果所有Issue都没有标签，列表会很乱。&lt;/p&gt;
&lt;p&gt;一个比较简单的标签体系可以这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bug
feature
docs
ui
backend
priority-high
priority-low
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;刚开始不用设计得太复杂，够用就行。标签太多没人维护，最后也会变成摆设。&lt;/p&gt;
&lt;h2&gt;Assignee（负责人）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Assignee&lt;/code&gt;就是负责人。&lt;/p&gt;
&lt;p&gt;一个Issue创建出来以后，如果没人负责，它很容易被放在那里没人处理。&lt;/p&gt;
&lt;p&gt;比较好的做法是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Issue
↓
指定给张三
↓
张三负责跟进
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;被指派的人不一定要一个人完成所有代码，但至少要负责推进这件事。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;确认需求&lt;/li&gt;
&lt;li&gt;写代码&lt;/li&gt;
&lt;li&gt;找人Review&lt;/li&gt;
&lt;li&gt;更新进度&lt;/li&gt;
&lt;li&gt;最后关闭Issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一个Issue暂时没人处理，可以先不指派。但只要进入开发阶段，最好明确负责人。&lt;/p&gt;
&lt;h2&gt;Milestone（里程碑）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Milestone&lt;/code&gt;是里程碑。&lt;/p&gt;
&lt;p&gt;这个功能很多人不太会用，因为它不像Issue那么直观。&lt;/p&gt;
&lt;p&gt;可以简单理解成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Milestone = 一个版本或阶段的目标集合
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v1.0
v1.1
v2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一个版本通常不只包含一个任务，而是包含多个Issue。&lt;/p&gt;
&lt;p&gt;例如&lt;code&gt;v1.1&lt;/code&gt;这个里程碑里可能有：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;修复登录失败问题
增加深色模式
优化首页加载速度
补充部署文档
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这些Issue都完成后，&lt;code&gt;v1.1&lt;/code&gt;这个里程碑才算完成。&lt;/p&gt;
&lt;p&gt;所以Milestone适合回答这个问题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这个版本还有哪些事情没做完？
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只是个人小项目，不用Milestone也能写。但只要项目开始有版本计划，比如&lt;code&gt;v1.0&lt;/code&gt;、&lt;code&gt;v1.1&lt;/code&gt;，Milestone就很有用了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/79d7291830bcc6d93a4fa273fcc640fd.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/4279c3e8835e0381829d3698b4bb062d.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/66cb4c8ca950ac455371adc36a793d7a.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Project（项目看板）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Project&lt;/code&gt;可以理解成项目看板，类似常见的Kanban。&lt;/p&gt;
&lt;p&gt;最简单的看板一般有三列：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TODO
↓
Doing
↓
Done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以写成中文：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;待办
↓
进行中
↓
已完成
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Issue可以放到看板里，然后随着进度移动。&lt;/p&gt;
&lt;p&gt;比如一个任务刚提出来时，放在&lt;code&gt;TODO&lt;/code&gt;；有人开始处理后，移动到&lt;code&gt;Doing&lt;/code&gt;；完成并合并后，移动到&lt;code&gt;Done&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Project适合回答这个问题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;现在大家都在做什么？
哪些任务还没开始？
哪些任务已经完成？
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只看Issue列表，有时不太直观。Project看板能让进度一眼看出来。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/3ad9fb79902a9f926727643fe3b18e13.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/d785c49ea3a9fde18e1352b38b68a62c.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;刚开始可以只建一个简单看板：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TODO
Doing
Done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要一开始就搞太多列，比如“需求池”“待评审”“开发中”“测试中”“待发布”“已发布”。流程太复杂，反而没人愿意维护。&lt;/p&gt;
&lt;h2&gt;Pull Request（合并请求）&lt;/h2&gt;
&lt;p&gt;Pull Request前面已经单独讲过，这里简单串一下。&lt;/p&gt;
&lt;p&gt;在Gitea项目协作里，Pull Request通常不是孤立存在的。&lt;/p&gt;
&lt;p&gt;更完整的流程应该是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Issue
↓
开发
↓
Pull Request
↓
Review
↓
Merge
↓
关闭 Issue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也就是说，PR最好能对应某个Issue。&lt;/p&gt;
&lt;p&gt;比如有一个Issue：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#12 添加考试成绩导出功能
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开发者创建PR时，可以在描述里写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Closes #12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样PR合并后，Issue会自动关闭，整个任务链路就完整了。&lt;/p&gt;
&lt;p&gt;如果一个PR没有对应Issue，也不是绝对不行。比如很小的文案修改、临时修复，可以直接PR。但对于稍微复杂一点的功能，先有Issue再有PR会更清楚。&lt;/p&gt;
&lt;h2&gt;Wiki（项目文档）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Wiki&lt;/code&gt;适合放项目文档。&lt;/p&gt;
&lt;p&gt;很多人会把所有东西都写进&lt;code&gt;README.md&lt;/code&gt;，刚开始没问题，但项目复杂后，README会越来越长。&lt;/p&gt;
&lt;p&gt;这时可以把一些长期文档放到Wiki里，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;部署文档&lt;/li&gt;
&lt;li&gt;开发规范&lt;/li&gt;
&lt;li&gt;接口文档&lt;/li&gt;
&lt;li&gt;数据库说明&lt;/li&gt;
&lt;li&gt;常见问题&lt;/li&gt;
&lt;li&gt;环境变量说明&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;README更适合放项目简介、快速开始、常用链接。&lt;/p&gt;
&lt;p&gt;Wiki更适合放详细说明。&lt;/p&gt;
&lt;p&gt;比如一个后端项目，可以在Wiki里建这些页面：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;本地开发环境
生产环境部署
接口鉴权说明
数据库迁移说明
常见报错处理
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/1ac924534106a5d7385f7b7aa5ceb761.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果团队里经常有人问“这个项目怎么启动”“接口文档在哪”“部署命令是什么”，那就说明这些内容应该沉淀到Wiki里。&lt;/p&gt;
&lt;h2&gt;Release（版本发布）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Release&lt;/code&gt;是发布版本。&lt;/p&gt;
&lt;p&gt;它不是简单地给源码打个包，而是用来记录某个版本发布了什么。&lt;/p&gt;
&lt;p&gt;常见版本号大概是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v1.0.0
v1.1.0
v1.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发布Release时，可以做这些事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;写更新日志&lt;/li&gt;
&lt;li&gt;上传二进制文件&lt;/li&gt;
&lt;li&gt;记录版本变更&lt;/li&gt;
&lt;li&gt;标记这个版本对应的代码&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如一个&lt;code&gt;v1.2.0&lt;/code&gt;版本可以这样写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## v1.2.0

### 新增

- 添加考试成绩导出功能
- 添加管理员操作日志

### 修复

- 修复登录失败时没有错误提示的问题
- 修复部分页面刷新后状态丢失的问题

### 优化

- 优化首页加载速度
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样以后回头看，就知道每个版本到底改了什么。&lt;/p&gt;
&lt;p&gt;如果项目会提供可执行文件，比如桌面软件、命令行工具、服务端程序，也可以把编译好的文件上传到Release里。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/06eab711487bd4deae5efd0fc220ce9e.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Release适合回答这个问题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;这个版本发布了什么？
用户应该下载哪个文件？
出了问题应该回退到哪个版本？
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Watch（关注）、Star（收藏）、Fork（复制仓库）&lt;/h2&gt;
&lt;p&gt;如果你用过GitHub，这几个功能会很熟悉。Gitea里也有类似概念。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Star&lt;/code&gt;可以理解成收藏或点赞。&lt;/p&gt;
&lt;p&gt;它一般表示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我觉得这个项目有用，先收藏一下。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Watch&lt;/code&gt;是关注更新。&lt;/p&gt;
&lt;p&gt;如果你Watch了一个仓库，仓库有新Issue、Pull Request、Release等更新时，可能会收到通知。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Fork&lt;/code&gt;是复制仓库。&lt;/p&gt;
&lt;p&gt;它会把别人的仓库复制一份到你的账号下面。你可以在自己的副本里修改代码，然后再向原仓库提交Pull Request。&lt;/p&gt;
&lt;p&gt;简单区分：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Star：收藏项目
Watch：关注更新
Fork：复制一份仓库用于修改
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同一个团队内部开发，一般直接在原仓库开分支就行。&lt;/p&gt;
&lt;p&gt;如果你没有原仓库的写权限，比如给开源项目贡献代码，通常就先Fork，再提交Pull Request。&lt;/p&gt;
&lt;h2&gt;一个完整例子&lt;/h2&gt;
&lt;p&gt;前面每个功能单独看可能有点散，下面用一个“在线考试系统”的例子串起来。&lt;/p&gt;
&lt;p&gt;假设现在要做一个新功能：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;添加考试成绩导出功能
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比较完整的协作流程可以是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;创建 Issue：添加考试成绩导出功能
↓
添加 Label：feature、backend
↓
加入 Milestone：v1.2.0
↓
分配给开发者
↓
放入 Project 看板 TODO
↓
开发者开始处理，移动到 Doing
↓
创建 feature-export 分支
↓
提交代码
↓
创建 Pull Request
↓
关联 Issue：Closes #12
↓
Code Review
↓
合并 PR
↓
Issue 自动关闭
↓
Project 卡片移动到 Done
↓
发布 Release：v1.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样一条线下来，每一步都有记录。&lt;/p&gt;
&lt;p&gt;别人想知道这个功能为什么做，可以看Issue。&lt;/p&gt;
&lt;p&gt;想知道谁负责，可以看Assignee。&lt;/p&gt;
&lt;p&gt;想知道属于哪个版本，可以看Milestone。&lt;/p&gt;
&lt;p&gt;想知道现在进度，可以看Project。&lt;/p&gt;
&lt;p&gt;想知道代码怎么改的，可以看Pull Request。&lt;/p&gt;
&lt;p&gt;想知道最终发到哪个版本，可以看Release。&lt;/p&gt;
&lt;p&gt;这就是Gitea项目协作功能的意义。&lt;/p&gt;
&lt;h2&gt;建议的学习顺序&lt;/h2&gt;
&lt;p&gt;如果按这个系列来看，可以这样排：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. Gitea与Git配置
2. Git基础使用教程
3. Git协作流程
4. Git冲突处理
5. Gitea项目协作功能介绍
6. Gitea组织与权限管理
7. Gitea Actions使用
8. Gitea部署记录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前几篇解决的是“会不会用Git提交代码”。&lt;/p&gt;
&lt;p&gt;从这篇开始，就进入“会不会管理项目协作”。&lt;/p&gt;
&lt;p&gt;一个人写代码时，可能Issue、Milestone、Project这些东西都显得可有可无。但只要项目里有多人协作、有版本计划、有任务分配，这些功能就会变得很有用。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;Gitea不只是一个放代码的地方。&lt;/p&gt;
&lt;p&gt;如果只用它来&lt;code&gt;clone&lt;/code&gt;、&lt;code&gt;push&lt;/code&gt;、创建Pull Request，那其实只用到了一部分能力。&lt;/p&gt;
&lt;p&gt;更完整的项目协作应该是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Issue 记录事情
Label 分类任务
Assignee 明确负责人
Milestone 管理版本目标
Project 跟踪任务进度
Pull Request 合并代码
Wiki 沉淀文档
Release 发布版本
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先不用一上来把所有功能都用得很复杂。&lt;/p&gt;
&lt;p&gt;小团队可以先从三个东西开始：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Issue
Pull Request
Release
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;等任务多了，再加&lt;code&gt;Label&lt;/code&gt;、&lt;code&gt;Milestone&lt;/code&gt;和&lt;code&gt;Project&lt;/code&gt;。这样从“会写代码”慢慢过渡到“会管理项目”，协作会清楚很多。&lt;/p&gt;
</content:encoded></item><item><title>Git冲突处理</title><link>https://blog.aloys233.top/posts/git%E5%86%B2%E7%AA%81%E5%A4%84%E7%90%86/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/git%E5%86%B2%E7%AA%81%E5%A4%84%E7%90%86/</guid><description>记录 Git 开发中常见问题的处理方法，包括 merge 冲突、pull 冲突、rebase 冲突、push 被拒绝、stash、reset、revert 和 reflog。</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;上一篇文章&lt;a href=&quot;https://blog.aloys233.top/posts/git%E5%A4%9A%E4%BA%BA%E5%8D%8F%E4%BD%9C/&quot;&gt;Git协作流程&lt;/a&gt;介绍了多人协作时，一个功能从开发到合并的大致流程。&lt;/p&gt;
&lt;p&gt;真正写项目时，最容易让人头疼的往往不是提交代码，而是各种异常情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pull&lt;/code&gt;冲突&lt;/li&gt;
&lt;li&gt;&lt;code&gt;merge&lt;/code&gt;冲突&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt;被拒绝&lt;/li&gt;
&lt;li&gt;提交错了&lt;/li&gt;
&lt;li&gt;分支搞乱了&lt;/li&gt;
&lt;li&gt;改了一半代码但突然要切分支&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题刚遇到时会很吓人，尤其是终端里突然出现一堆英文提示，很容易不知道下一步该敲什么。&lt;/p&gt;
&lt;p&gt;这篇就不讲太多Git原理了，主要记录一些常见问题的处理方法。目标很简单：遇到问题时，知道先看什么，再执行什么命令。&lt;/p&gt;
&lt;h2&gt;为什么会产生冲突&lt;/h2&gt;
&lt;p&gt;先看一个最常见的场景：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;你修改 login.js
↓
同事也修改 login.js
↓
你执行 git pull
↓
Git 无法自动决定保留哪份代码
↓
产生冲突
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git能自动合并很多修改。&lt;/p&gt;
&lt;p&gt;比如你改了&lt;code&gt;login.js&lt;/code&gt;，同事改了&lt;code&gt;README.md&lt;/code&gt;，这两个文件互不影响，Git一般能自动合并。&lt;/p&gt;
&lt;p&gt;再比如你和同事都改了&lt;code&gt;login.js&lt;/code&gt;，但你改的是第10行，同事改的是第80行，Git大多数时候也能自动合并。&lt;/p&gt;
&lt;p&gt;真正容易冲突的是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;同一个文件
同一个位置
被不同人改了不同内容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时Git不知道应该保留你的版本，还是保留同事的版本，所以它会停下来，让你手动处理。&lt;/p&gt;
&lt;p&gt;冲突本身不是Git坏了，而是Git不敢替你乱选。&lt;/p&gt;
&lt;h2&gt;merge冲突&lt;/h2&gt;
&lt;p&gt;假设你在&lt;code&gt;main&lt;/code&gt;分支，想把&lt;code&gt;feature-login&lt;/code&gt;分支合并进来：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git merge feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果两边修改了同一个位置，可能会看到类似提示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CONFLICT (content): Merge conflict in login.js
Automatic merge failed; fix conflicts and then commit the result.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时先不要慌，先看状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;会告诉你哪些文件处于冲突状态。&lt;/p&gt;
&lt;p&gt;打开冲突文件后，一般会看到这种内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
本地内容
=======
另一分支内容
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的含义是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD&lt;/code&gt;到&lt;code&gt;=======&lt;/code&gt;之间，是当前分支的内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=======&lt;/code&gt;是分隔线&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=======&lt;/code&gt;到&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature-login&lt;/code&gt;之间，是待合并分支的内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature-login&lt;/code&gt;表示这些内容来自&lt;code&gt;feature-login&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;处理冲突时，不是简单删除某一边就完事，而是要根据实际需求改成最终正确的代码。&lt;/p&gt;
&lt;p&gt;处理步骤一般是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开冲突文件&lt;/li&gt;
&lt;li&gt;删除&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt;、&lt;code&gt;=======&lt;/code&gt;、&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;这些冲突标记&lt;/li&gt;
&lt;li&gt;保留或合并正确内容&lt;/li&gt;
&lt;li&gt;保存文件&lt;/li&gt;
&lt;li&gt;重新加入暂存区&lt;/li&gt;
&lt;li&gt;提交合并结果&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;命令是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add login.js
git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有多个冲突文件，就都处理完后再&lt;code&gt;git add&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 文件1 文件2
git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;pull为什么会冲突&lt;/h2&gt;
&lt;p&gt;很多人会觉得奇怪：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不是拉代码吗，为什么也会冲突？&lt;/p&gt;
&lt;p&gt;原因是&lt;code&gt;git pull&lt;/code&gt;并不是单纯下载代码，它本质上等于：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull = git fetch + git merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也就是说，&lt;code&gt;git pull&lt;/code&gt;会先把远程的新提交下载下来，然后再把远程分支合并到你当前分支。&lt;/p&gt;
&lt;p&gt;既然它内部做了&lt;code&gt;merge&lt;/code&gt;，那当然也可能产生&lt;code&gt;merge&lt;/code&gt;冲突。&lt;/p&gt;
&lt;p&gt;所以遇到&lt;code&gt;pull&lt;/code&gt;冲突时，处理方式和&lt;code&gt;merge&lt;/code&gt;冲突基本一样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
# 手动修改冲突文件
git add 冲突文件
git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你不确定哪些文件冲突了，永远先看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令会告诉你当前Git卡在哪一步。&lt;/p&gt;
&lt;h2&gt;rebase冲突&lt;/h2&gt;
&lt;p&gt;有些团队或个人习惯用&lt;code&gt;rebase&lt;/code&gt;来同步代码，比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull --rebase
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rebase main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;rebase&lt;/code&gt;也可能冲突。&lt;/p&gt;
&lt;p&gt;冲突文件里的标记看起来也差不多，还是这种形式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
当前内容
=======
你的提交内容
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 提交ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;处理文件的方式一样：打开文件，删掉冲突标记，改成最终正确内容。&lt;/p&gt;
&lt;p&gt;不同的是，&lt;code&gt;rebase&lt;/code&gt;处理完冲突后，不是执行&lt;code&gt;git commit&lt;/code&gt;，而是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 文件名
git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果后面还有冲突，就继续处理，再继续：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 文件名
git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果这次&lt;code&gt;rebase&lt;/code&gt;越处理越乱，想放弃，可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rebase --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令会取消本次&lt;code&gt;rebase&lt;/code&gt;，回到&lt;code&gt;rebase&lt;/code&gt;之前的状态。&lt;/p&gt;
&lt;p&gt;简单记：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;merge 冲突解决完：git add -&amp;gt; git commit
rebase 冲突解决完：git add -&amp;gt; git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;push被拒绝&lt;/h2&gt;
&lt;p&gt;推送时看到这种提示也很常见：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;failed to push some refs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者提示远程分支比本地更新。&lt;/p&gt;
&lt;p&gt;常见原因是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;远程仓库已经有新提交
但你本地还没有这些提交
所以Git拒绝直接推送
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如你和同事都在同一个分支上开发。同事先推送了代码，你本地还没拉取他的提交，这时你直接&lt;code&gt;git push&lt;/code&gt;，Git就可能拒绝。&lt;/p&gt;
&lt;p&gt;比较常见的解决方式是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull --rebase
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;意思是先把远程的新提交拿下来，再把你的提交放到后面，然后重新推送。&lt;/p&gt;
&lt;p&gt;如果&lt;code&gt;git pull --rebase&lt;/code&gt;过程中出现冲突，就按前面&lt;code&gt;rebase&lt;/code&gt;冲突的方式处理：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
# 手动修改冲突文件
git add 文件名
git rebase --continue
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要一看到&lt;code&gt;push&lt;/code&gt;失败就立刻强制推送。强制推送可能会覆盖别人已经推上去的提交，尤其是在公共分支上很危险。&lt;/p&gt;
&lt;h2&gt;临时保存修改&lt;/h2&gt;
&lt;p&gt;有时你代码写到一半，突然要切到别的分支修bug。&lt;/p&gt;
&lt;p&gt;这时如果直接切分支，Git可能会提示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Please commit your changes or stash them before you switch branches.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;意思是：你当前还有未提交修改，先提交或者临时保存起来。&lt;/p&gt;
&lt;p&gt;如果这些代码还没写完，不适合提交，可以用&lt;code&gt;stash&lt;/code&gt;临时保存。&lt;/p&gt;
&lt;p&gt;保存当前修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看保存列表：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;恢复最近一次保存：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash pop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;pop&lt;/code&gt;会恢复修改，并把这条stash记录从列表里删除。&lt;/p&gt;
&lt;p&gt;如果只想恢复但保留stash记录，可以用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash apply
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除某条stash：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash drop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有多条stash，可以指定名字：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git stash pop stash@{0}
git stash drop stash@{0}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;stash&lt;/code&gt;适合临时救急，不建议长期把重要代码放在里面。重要修改最好还是及时提交到分支上。&lt;/p&gt;
&lt;h2&gt;撤销未提交的修改&lt;/h2&gt;
&lt;p&gt;如果文件改坏了，还没有提交，可以用&lt;code&gt;restore&lt;/code&gt;恢复。&lt;/p&gt;
&lt;p&gt;恢复单个文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;恢复当前目录下所有未提交修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意，这个操作会丢失工作区修改。&lt;/p&gt;
&lt;p&gt;执行前最好先看一下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确认这些修改真的不要了，再执行&lt;code&gt;restore&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;取消暂存&lt;/h2&gt;
&lt;p&gt;如果文件已经&lt;code&gt;git add&lt;/code&gt;了，但还没&lt;code&gt;commit&lt;/code&gt;，想把它从暂存区拿出来：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore --staged 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令只是取消暂存，不会删除文件内容。&lt;/p&gt;
&lt;p&gt;比如你执行了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结果发现把不该提交的文件也加进去了，就可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore --staged 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后重新选择真正要提交的文件。&lt;/p&gt;
&lt;h2&gt;回退提交&lt;/h2&gt;
&lt;p&gt;如果已经提交了，但发现提交错了，可以用&lt;code&gt;reset&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;先查看提交历史：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git log --oneline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如最近一次提交写错了，想撤销这个&lt;code&gt;commit&lt;/code&gt;，但代码还想保留：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --soft HEAD~1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--soft&lt;/code&gt;的意思是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;撤销 commit
保留代码修改
保留暂存状态
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果想撤销提交，并且让修改回到未暂存状态，可以用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --mixed HEAD~1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--mixed&lt;/code&gt;是&lt;code&gt;git reset&lt;/code&gt;默认模式，通常可以不写。&lt;/p&gt;
&lt;p&gt;最危险的是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它的意思是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;撤销 commit
代码修改也一起删除
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以&lt;code&gt;--hard&lt;/code&gt;一定要慎用。执行前最好确认这次提交里的代码真的不要了。&lt;/p&gt;
&lt;p&gt;如果提交已经推送到远程，并且别人可能已经基于它继续开发，就不要随便&lt;code&gt;reset --hard&lt;/code&gt;再强推，这很容易影响别人。&lt;/p&gt;
&lt;h2&gt;使用revert撤销提交&lt;/h2&gt;
&lt;p&gt;多人协作时，更推荐用&lt;code&gt;revert&lt;/code&gt;撤销已经提交的内容。&lt;/p&gt;
&lt;p&gt;命令是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git revert 提交ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;revert&lt;/code&gt;和&lt;code&gt;reset&lt;/code&gt;的区别可以简单理解成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;reset：把历史往回挪
revert：新增一个反向提交
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如某个提交添加了三行代码，&lt;code&gt;revert&lt;/code&gt;会生成一个新的提交，把这三行代码删掉。&lt;/p&gt;
&lt;p&gt;它不会删除历史记录，所以更适合多人协作。&lt;/p&gt;
&lt;p&gt;简单建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自己本地还没推送的提交，可以考虑&lt;code&gt;reset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;已经推送到远程的提交，优先考虑&lt;code&gt;revert&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;公共分支上不要随便&lt;code&gt;reset --hard&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;reflog：Git的后悔药&lt;/h2&gt;
&lt;p&gt;如果你误删了提交，或者&lt;code&gt;reset&lt;/code&gt;过头了，可以先看&lt;code&gt;reflog&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出大概像这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;abc123 HEAD@{0}: reset: moving to HEAD~1
def456 HEAD@{1}: commit: 添加登录页面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git log&lt;/code&gt;主要看当前分支能看到的提交历史。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git reflog&lt;/code&gt;记录的是HEAD移动过的位置。很多误操作之后，提交虽然从普通日志里看不到了，但还能在&lt;code&gt;reflog&lt;/code&gt;里找到。&lt;/p&gt;
&lt;p&gt;找到想恢复的提交ID后，可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard def456
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意，&lt;code&gt;reset --hard&lt;/code&gt;会让当前代码回到那个提交对应的状态，执行前确认工作区没有要保留的修改。&lt;/p&gt;
&lt;p&gt;如果不想直接回退，也可以先新建一个分支保住现场：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch -c recover-branch def456
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样更稳一点。&lt;/p&gt;
&lt;h2&gt;强制推送&lt;/h2&gt;
&lt;p&gt;强制推送命令是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push --force
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它的风险很大，因为它可能覆盖远程分支历史。&lt;/p&gt;
&lt;p&gt;比如远程分支上有同事刚推送的提交，你本地没有这些提交，直接&lt;code&gt;--force&lt;/code&gt;可能会把同事的提交顶掉。&lt;/p&gt;
&lt;p&gt;如果确实需要强制推送，更推荐：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push --force-with-lease
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;简单理解：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--force：直接用本地历史覆盖远程历史
--force-with-lease：如果远程分支被别人更新过，就拒绝覆盖
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;--force-with-lease&lt;/code&gt;不是完全没有风险，但比&lt;code&gt;--force&lt;/code&gt;更安全。&lt;/p&gt;
&lt;p&gt;日常建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自己的功能分支，确认没人共用时，可以谨慎使用&lt;/li&gt;
&lt;li&gt;公共分支，比如&lt;code&gt;main&lt;/code&gt;、&lt;code&gt;develop&lt;/code&gt;，不要随便强推&lt;/li&gt;
&lt;li&gt;不确定时，先问团队成员，不要直接覆盖远程&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;常见问题&lt;/h2&gt;
&lt;h3&gt;commit说明写错了怎么办&lt;/h3&gt;
&lt;p&gt;如果只是最近一次提交说明写错了，还没推送，可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit --amend
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它会修改最近一次提交。&lt;/p&gt;
&lt;p&gt;也可以直接写新说明：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit --amend -m &quot;新的提交说明&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果这个提交已经推送到远程，修改后通常需要强制推送。多人协作时要谨慎。&lt;/p&gt;
&lt;h3&gt;push到错误分支怎么办&lt;/h3&gt;
&lt;p&gt;先不要继续操作，先确认当前分支和提交历史：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git branch
git log --oneline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只是把提交推到了自己的错误分支，可以把正确提交&lt;code&gt;cherry-pick&lt;/code&gt;到目标分支，再在错误分支上用&lt;code&gt;revert&lt;/code&gt;撤销。&lt;/p&gt;
&lt;p&gt;如果推到了公共分支，建议不要自己直接&lt;code&gt;reset --hard&lt;/code&gt;加&lt;code&gt;push --force&lt;/code&gt;，先和团队确认处理方式。&lt;/p&gt;
&lt;h3&gt;删除错分支怎么办&lt;/h3&gt;
&lt;p&gt;如果只是删除了本地分支，可以先用&lt;code&gt;reflog&lt;/code&gt;找提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到提交ID后重新建分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch -c 分支名 提交ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果远程分支还在，也可以直接重新拉：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git fetch origin
git switch -c 分支名 origin/分支名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;reset过头了怎么办&lt;/h3&gt;
&lt;p&gt;先看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到&lt;code&gt;reset&lt;/code&gt;之前的提交ID，然后恢复：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard 提交ID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果当前工作区还有想保留的修改，不要立刻&lt;code&gt;--hard&lt;/code&gt;，可以先&lt;code&gt;stash&lt;/code&gt;或者新建分支保存现场。&lt;/p&gt;
&lt;h3&gt;merge和rebase冲突有什么区别&lt;/h3&gt;
&lt;p&gt;冲突文件的处理方式差不多，都是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;打开文件
删除冲突标记
保留正确内容
git add
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;区别在最后一步：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;merge 冲突：git commit
rebase 冲突：git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果不想继续：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git merge --abort
git rebase --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;分别用于取消当前的&lt;code&gt;merge&lt;/code&gt;或&lt;code&gt;rebase&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;遇到Git冲突时，可以先按这条线处理：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;冲突
↓
git status
↓
编辑冲突文件
↓
git add
↓
git commit / git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要一看到冲突就乱敲命令。先用&lt;code&gt;git status&lt;/code&gt;看清楚Git现在卡在哪一步，再决定是&lt;code&gt;commit&lt;/code&gt;、&lt;code&gt;rebase --continue&lt;/code&gt;，还是&lt;code&gt;abort&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;常见场景可以记这个表：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;查看状态&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;临时保存&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;恢复修改&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git restore 文件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;取消暂存&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git restore --staged 文件名&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回退提交&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git reset&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安全撤销&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git revert 提交ID&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;查看历史&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git log --oneline&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;找回误删提交&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;继续rebase&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git rebase --continue&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;取消rebase&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git rebase --abort&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Git很多问题看起来吓人，其实大部分都有固定处理流程。只要提交前多看&lt;code&gt;status&lt;/code&gt;和&lt;code&gt;diff&lt;/code&gt;，公共分支上少用危险命令，出了问题先别急着强推，基本都能处理回来。&lt;/p&gt;
</content:encoded></item><item><title>Git协作流程</title><link>https://blog.aloys233.top/posts/git%E5%A4%9A%E4%BA%BA%E5%8D%8F%E4%BD%9C/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/git%E5%A4%9A%E4%BA%BA%E5%8D%8F%E4%BD%9C/</guid><description>记录多人协作时一个功能从开始开发到合并进主分支的完整 Git 流程，包括分支、提交、推送、Pull Request、Review、同步 main 和冲突处理。</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;上一篇文章&lt;a href=&quot;https://blog.aloys233.top/posts/git%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/&quot;&gt;Git基础使用教程&lt;/a&gt;写了Git的基础命令，比如&lt;code&gt;add&lt;/code&gt;、&lt;code&gt;commit&lt;/code&gt;、&lt;code&gt;branch&lt;/code&gt;、&lt;code&gt;merge&lt;/code&gt;、&lt;code&gt;rebase&lt;/code&gt;这些东西。&lt;/p&gt;
&lt;p&gt;这篇主要记录多人协作时最常见的一套流程。&lt;/p&gt;
&lt;p&gt;重点不是讲很多高级命令，而是搞清楚一件事：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一个功能从开始开发，到最后合并进主分支，中间到底经过哪些步骤。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只是自己一个人写代码，可能本地改完、提交、推送就结束了。但多人一起改同一个项目时，就不能每个人都直接往主分支上推代码了，不然很容易互相覆盖、互相冲突，最后谁也不知道主分支到底还能不能正常运行。&lt;/p&gt;
&lt;h2&gt;为什么不要直接改main&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;main&lt;/code&gt;或者以前常见的&lt;code&gt;master&lt;/code&gt;，一般代表项目当前比较稳定的代码。&lt;/p&gt;
&lt;p&gt;比如一个网站项目，&lt;code&gt;main&lt;/code&gt;分支上的代码可能会直接部署到线上；一个后端项目，&lt;code&gt;main&lt;/code&gt;分支可能就是大家默认拉取和测试的版本。&lt;/p&gt;
&lt;p&gt;如果所有人都直接在&lt;code&gt;main&lt;/code&gt;上开发，会出现几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;代码还没写完就被别人拉到了&lt;/li&gt;
&lt;li&gt;一个半成品功能影响其他人开发&lt;/li&gt;
&lt;li&gt;出了问题很难判断是哪次修改引起的&lt;/li&gt;
&lt;li&gt;没有机会让别人提前检查代码&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以多人协作时，更常见的做法是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main 保持稳定
每个人在自己的分支上开发
写完后通过 Pull Request 合并回 main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样主分支不会被随便改动，每个功能也有比较清楚的开发和检查过程。&lt;/p&gt;
&lt;h2&gt;常见协作流程&lt;/h2&gt;
&lt;p&gt;平时协作大概可以按这条线走：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;更新主分支
↓
创建功能分支
↓
开发并提交
↓
推送到远程
↓
创建 Pull Request
↓
代码检查 / Review
↓
合并到 main
↓
删除功能分支
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看起来步骤不少，但实际熟悉之后就是一套固定动作。&lt;/p&gt;
&lt;p&gt;简单说，就是不要把代码直接写到&lt;code&gt;main&lt;/code&gt;，而是先从最新的&lt;code&gt;main&lt;/code&gt;拉出一个自己的功能分支。功能写完以后，把这个分支推送到远程仓库，再创建一个Pull Request，让别人看一下改了什么，确认没问题后再合并。&lt;/p&gt;
&lt;h2&gt;开发前先更新主分支&lt;/h2&gt;
&lt;p&gt;开始写新功能前，先切回&lt;code&gt;main&lt;/code&gt;，把远程最新代码拉下来。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch main
git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一步是为了保证自己的新分支是从最新代码上分出来的。&lt;/p&gt;
&lt;p&gt;如果你本地的&lt;code&gt;main&lt;/code&gt;已经落后远程很多，直接从旧代码上开分支，后面更容易遇到冲突。&lt;/p&gt;
&lt;h2&gt;创建自己的功能分支&lt;/h2&gt;
&lt;p&gt;更新完&lt;code&gt;main&lt;/code&gt;后，再创建自己的功能分支。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch -c feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;-c&lt;/code&gt;表示创建并切换到这个新分支。&lt;/p&gt;
&lt;p&gt;分支名最好能看出来这个分支是干什么的，不要随便叫&lt;code&gt;test&lt;/code&gt;、&lt;code&gt;aaa&lt;/code&gt;、&lt;code&gt;new&lt;/code&gt;这种名字。&lt;/p&gt;
&lt;p&gt;常见命名方式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;feature/login
fix/login-error
docs/update-readme
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大概可以这样理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feature/xxx&lt;/code&gt;：开发新功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix/xxx&lt;/code&gt;：修复问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs/xxx&lt;/code&gt;：修改文档&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;团队里如果有固定命名规范，就按团队规范来。没有规范时，至少保证别人能从分支名看懂大概用途。&lt;/p&gt;
&lt;h2&gt;在分支上开发和提交&lt;/h2&gt;
&lt;p&gt;切到功能分支后，就可以正常改代码了。&lt;/p&gt;
&lt;p&gt;改完一部分后，可以先看状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确认这次要提交哪些文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
git commit -m &quot;添加登录页面&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里还是建议养成几个习惯：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;提交前先看&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;一个提交尽量只做一件事&lt;/li&gt;
&lt;li&gt;不要把临时文件、测试文件、编译产物误提交上去&lt;/li&gt;
&lt;li&gt;提交说明不要只写&lt;code&gt;update&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如下面这种提交说明就比较难看懂：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;update&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;过几天再看日志，根本不知道这个&lt;code&gt;update&lt;/code&gt;到底更新了什么。&lt;/p&gt;
&lt;p&gt;可以写得具体一点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;添加登录页面&quot;
git commit -m &quot;修复登录失败提示&quot;
git commit -m &quot;更新登录接口地址&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提交说明不一定要特别长，但至少要让人知道这次提交主要做了什么。&lt;/p&gt;
&lt;h2&gt;推送分支到远程&lt;/h2&gt;
&lt;p&gt;本地提交完成后，需要把自己的功能分支推送到远程仓库。&lt;/p&gt;
&lt;p&gt;第一次推送这个分支时，一般这样写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的&lt;code&gt;-u&lt;/code&gt;是设置上游分支。设置之后，以后在这个分支上再推送，就可以直接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果分支名是&lt;code&gt;feature/login&lt;/code&gt;，命令就是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin feature/login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;推送成功后，远程仓库里就能看到这个分支了，接下来就可以创建Pull Request。&lt;/p&gt;
&lt;h2&gt;创建Pull Request&lt;/h2&gt;
&lt;p&gt;Pull Request可以简单理解成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我这个分支写好了，请帮我看一下，没问题就合并到 main。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果使用的是Gitea，大概流程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开仓库页面&lt;/li&gt;
&lt;li&gt;选择&lt;code&gt;Pull Requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;点击&lt;code&gt;New Pull Request&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;base(左侧的)&lt;/code&gt;选择&lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;compare(右侧的)&lt;/code&gt;选择自己的功能分支&lt;/li&gt;
&lt;li&gt;填写标题和说明&lt;/li&gt;
&lt;li&gt;提交Pull Request&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/05de4803a534a5153d532c7863dbe26d.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;创建PR时，最重要的是确认方向不要选反。&lt;/p&gt;
&lt;p&gt;一般应该是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;base: main
compare: feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;意思是把&lt;code&gt;feature-login&lt;/code&gt;分支的修改合并到&lt;code&gt;main&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;Pull Request里应该写什么&lt;/h2&gt;
&lt;p&gt;PR不要只写一个标题就提交。别人Review时，需要快速知道你改了什么、怎么测试、有没有需要注意的地方。&lt;/p&gt;
&lt;p&gt;可以按这个模板写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### 修改内容

- 添加登录页面
- 添加登录接口调用
- 修改路由配置

### 测试情况

- 本地启动正常
- 登录成功和失败都测试过

### 注意事项

- 暂时没有接入验证码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果项目有自动化测试，也可以写测试命令是否通过：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### 测试情况

- pnpm build 通过
- pnpm test 通过
- 本地手动测试登录成功和失败场景
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;PR说明不用写成作文，但要让别人不打开代码也能先知道这次改动的大概范围。&lt;/p&gt;
&lt;h2&gt;Code Review是什么&lt;/h2&gt;
&lt;p&gt;Code Review就是别人帮你看代码。&lt;/p&gt;
&lt;p&gt;这不是找茬，也不是为了证明谁水平高，而是为了在代码合并前尽量减少问题。&lt;/p&gt;
&lt;p&gt;Review时一般会看这些东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有没有明显bug&lt;/li&gt;
&lt;li&gt;代码风格是否统一&lt;/li&gt;
&lt;li&gt;有没有误提交文件&lt;/li&gt;
&lt;li&gt;有没有安全问题&lt;/li&gt;
&lt;li&gt;功能是否符合需求&lt;/li&gt;
&lt;li&gt;命名和目录位置是否合适&lt;/li&gt;
&lt;li&gt;有没有影响到其他功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如你写登录功能时，不小心把本地测试地址、密码、&lt;code&gt;.env&lt;/code&gt;文件提交上去了，自己可能没注意，但Review的人可能一眼就能看出来。&lt;/p&gt;
&lt;p&gt;再比如一个功能能跑，但写法和项目里其他地方完全不一样，后面维护的人就会很难受。Review可以提前把这些问题拦下来。&lt;/p&gt;
&lt;h2&gt;有人改了main怎么办&lt;/h2&gt;
&lt;p&gt;多人协作时，你开发自己的功能期间，别人可能已经往&lt;code&gt;main&lt;/code&gt;合并了新的代码。&lt;/p&gt;
&lt;p&gt;这时你的功能分支就落后了。&lt;/p&gt;
&lt;p&gt;可以在功能分支上同步最新的&lt;code&gt;main&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch feature-login
git fetch origin
git rebase origin/main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以简单一点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull --rebase origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;个人功能分支用&lt;code&gt;rebase&lt;/code&gt;通常会比较清爽，因为它会把你的提交放到最新的&lt;code&gt;main&lt;/code&gt;后面，历史看起来更像一条直线。&lt;/p&gt;
&lt;p&gt;大概可以理解成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;先把 main 的新提交拿过来
再把自己的提交重新放到后面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不过要注意，&lt;code&gt;rebase&lt;/code&gt;更适合自己的功能分支。已经给很多人共同使用的公共分支，不建议随便&lt;code&gt;rebase&lt;/code&gt;，否则容易影响别人。&lt;/p&gt;
&lt;h2&gt;发生冲突怎么办&lt;/h2&gt;
&lt;p&gt;如果你和别人改了同一个文件的同一部分，就可能出现冲突。&lt;/p&gt;
&lt;p&gt;比如执行&lt;code&gt;rebase&lt;/code&gt;时提示冲突，可以先看状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后打开冲突文件，手动处理里面的冲突内容。处理完成后：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 冲突文件
git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果冲突太乱，暂时不想继续，也可以取消这次&lt;code&gt;rebase&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rebase --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;冲突本身不是什么可怕的东西，它只是Git不知道该保留哪一边，需要人来判断。&lt;/p&gt;
&lt;p&gt;处理冲突时不要只想着“让文件不报错”，还要确认功能逻辑是不是对的。尤其是两个人同时改了同一个函数、同一个配置文件时，解决完最好重新跑一下项目。&lt;/p&gt;
&lt;h2&gt;合并Pull Request&lt;/h2&gt;
&lt;p&gt;PR通过Review后，就可以合并到&lt;code&gt;main&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;常见合并方式有几种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Create merge commit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Squash and merge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Rebase and merge&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Create merge commit&lt;/code&gt;会保留分支上的提交记录，并额外生成一个合并提交。小团队、小项目直接用这个也没问题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Squash and merge&lt;/code&gt;会把这个PR里的多个提交压成一个提交再合并。如果你开发过程中提交了很多零碎记录，比如&lt;code&gt;fix&lt;/code&gt;、&lt;code&gt;debug&lt;/code&gt;、&lt;code&gt;update&lt;/code&gt;，用&lt;code&gt;squash&lt;/code&gt;可以让&lt;code&gt;main&lt;/code&gt;的历史更干净。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Rebase and merge&lt;/code&gt;会把功能分支上的提交重新放到&lt;code&gt;main&lt;/code&gt;后面，历史也比较直，但对新手来说理解成本稍微高一点。&lt;/p&gt;
&lt;p&gt;入门时可以先记一个简单建议：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;小项目可以直接merge；想让历史干净，可以squash。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果团队已经规定了合并方式，就按团队规则来。&lt;/p&gt;
&lt;h2&gt;合并后删除分支&lt;/h2&gt;
&lt;p&gt;功能已经合并进&lt;code&gt;main&lt;/code&gt;后，原来的功能分支通常就可以删掉了。&lt;/p&gt;
&lt;p&gt;远程分支可以在Gitea的PR页面里删除，一般合并后页面会有删除分支的按钮。&lt;/p&gt;
&lt;p&gt;本地分支可以这样删：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch main
git pull
git branch -d feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git branch -d&lt;/code&gt;会删除本地分支。如果Git发现这个分支还没有合并，通常会拒绝删除，避免误删。&lt;/p&gt;
&lt;p&gt;如果你用的是&lt;code&gt;feature/login&lt;/code&gt;这种分支名，就写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git branch -d feature/login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删分支不是删代码，因为代码已经合并到&lt;code&gt;main&lt;/code&gt;里了。删除的是这个开发任务用完后的临时分支。&lt;/p&gt;
&lt;h2&gt;常见问题&lt;/h2&gt;
&lt;h3&gt;为什么我push到main被拒绝&lt;/h3&gt;
&lt;p&gt;可能是主分支保护。&lt;/p&gt;
&lt;p&gt;很多团队会禁止普通成员直接推送到&lt;code&gt;main&lt;/code&gt;，只能通过Pull Request合并。这样可以避免没有Review的代码直接进入主分支。&lt;/p&gt;
&lt;p&gt;遇到这种情况，不要强行改权限，应该新建功能分支，再通过PR提交。&lt;/p&gt;
&lt;h3&gt;为什么PR不能合并&lt;/h3&gt;
&lt;p&gt;常见原因有几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有冲突没有解决&lt;/li&gt;
&lt;li&gt;自动检查没有通过&lt;/li&gt;
&lt;li&gt;没有合并权限&lt;/li&gt;
&lt;li&gt;PR方向选错了&lt;/li&gt;
&lt;li&gt;需要至少一个人Review通过&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以先看PR页面上的提示。一般Gitea、GitHub、GitLab都会告诉你当前卡在哪一步。&lt;/p&gt;
&lt;h3&gt;merge和rebase到底选哪个&lt;/h3&gt;
&lt;p&gt;简单记：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公共分支少&lt;code&gt;rebase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;自己的功能分支可以&lt;code&gt;rebase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;不确定就&lt;code&gt;merge&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;merge&lt;/code&gt;更直观，也更不容易影响别人。&lt;code&gt;rebase&lt;/code&gt;能让历史更清爽，但前提是你知道自己在改哪条分支。&lt;/p&gt;
&lt;p&gt;刚开始协作时，不需要一上来就追求特别漂亮的提交历史，先保证流程正确、代码别丢、主分支稳定更重要。&lt;/p&gt;
&lt;h3&gt;fork和branch有什么区别&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;branch&lt;/code&gt;是在同一个仓库里开分支，适合同一个团队内部协作。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;fork&lt;/code&gt;是把别人的仓库复制一份到自己的账号下面，适合外部贡献者参与项目。&lt;/p&gt;
&lt;p&gt;简单说：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;同一个团队仓库一般用 branch
外部贡献一般用 fork
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如公司内部几个人一起开发一个项目，通常直接在项目仓库里建分支。&lt;/p&gt;
&lt;p&gt;如果你想给一个开源项目贡献代码，但你没有那个仓库的写权限，就先&lt;code&gt;fork&lt;/code&gt;到自己账号，再从自己的仓库提交PR。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;日常协作可以记住这条线：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main 拉最新 -&amp;gt; 新建分支 -&amp;gt; 提交 -&amp;gt; 推送分支 -&amp;gt; PR -&amp;gt; Review -&amp;gt; 合并
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这篇的核心不是某一个单独命令，而是完整流程。&lt;/p&gt;
&lt;p&gt;不要直接在&lt;code&gt;main&lt;/code&gt;上开发。功能分支写完后，通过Pull Request合并，这样代码历史更清楚，主分支更稳定，也更适合多人协作。&lt;/p&gt;
</content:encoded></item><item><title>Git基础使用教程</title><link>https://blog.aloys233.top/posts/git%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/git%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>记录 Git 的基础使用流程，包括工作区、暂存区、提交、拉取、推送、撤回修改和 .gitignore。</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;上一篇文章&lt;a href=&quot;https://blog.aloys233.top/posts/gitea%E4%B8%8Egit%E9%85%8D%E7%BD%AE/&quot;&gt;Gitea与Git配置&lt;/a&gt;主要写了&lt;code&gt;Gitea&lt;/code&gt;和&lt;code&gt;Git&lt;/code&gt;的配置，比如安装Git、配置用户名邮箱、生成SSH密钥、连接远程仓库等。&lt;/p&gt;
&lt;p&gt;这篇文章就不继续折腾SSH了，主要讲Git最基础的一套使用流程。&lt;/p&gt;
&lt;p&gt;很多人刚开始用Git时，基本只会三板斧：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone
git pull
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;能用，但是一到自己改代码、提交代码、推送代码时就容易乱。比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;add&lt;/code&gt;到底是干什么的&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commit&lt;/code&gt;是不是已经上传了&lt;/li&gt;
&lt;li&gt;为什么提交前要看&lt;code&gt;status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;为什么&lt;code&gt;pull&lt;/code&gt;有时会冲突&lt;/li&gt;
&lt;li&gt;哪些文件不应该提交上去&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以这篇不打算把Git所有命令都讲一遍，只围绕一个最常见的问题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我改完代码以后，怎么正确提交并推送到远程仓库？
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;先记住一条线&lt;/h2&gt;
&lt;p&gt;Git日常使用可以先记住这条线：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;工作区 -&amp;gt; git add -&amp;gt; 暂存区 -&amp;gt; git commit -&amp;gt; 本地仓库 -&amp;gt; git push -&amp;gt; 远程仓库
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/22d1b6da6025e511138085e15cdbfce1.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/cd05e6fcecba4639a6fb6a29a79182e1.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这条线看懂了，&lt;code&gt;add&lt;/code&gt;、&lt;code&gt;commit&lt;/code&gt;、&lt;code&gt;push&lt;/code&gt;就没那么容易混。&lt;/p&gt;
&lt;p&gt;工作区就是你正在编辑的项目目录。你用VS Code改了文件，这些改动一开始都在工作区里。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git add&lt;/code&gt;是把准备提交的内容放进暂存区。暂存区可以理解成“这次准备提交的清单”。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git commit&lt;/code&gt;是把暂存区里的内容保存成一次本地提交。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git push&lt;/code&gt;才是把本地提交上传到Gitea、GitHub这类远程仓库。&lt;/p&gt;
&lt;p&gt;所以一定要记住：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;commit = 本地存档
push = 上传远程
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;很多新手会以为自己&lt;code&gt;commit&lt;/code&gt;以后别人就能看见，其实不是。只&lt;code&gt;commit&lt;/code&gt;不&lt;code&gt;push&lt;/code&gt;，代码还在自己电脑里。&lt;/p&gt;
&lt;h2&gt;一套最常用的日常流程&lt;/h2&gt;
&lt;p&gt;平时改完代码后，可以按这个顺序来：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
git diff
git add .
git commit -m &quot;提交说明&quot;
git pull
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;简单解释一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;：先看当前有哪些文件改了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff&lt;/code&gt;：再看具体改了什么&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git add .&lt;/code&gt;：把要提交的内容放进暂存区&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &quot;提交说明&quot;&lt;/code&gt;：提交到本地仓库&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git pull&lt;/code&gt;：推送前先拉一下远程最新代码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push&lt;/code&gt;：把本地提交推送到远程仓库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后面就按这条线展开讲。&lt;/p&gt;
&lt;h2&gt;第一步：先看状态&lt;/h2&gt;
&lt;p&gt;不知道下一步该干什么时，先敲：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/446a79f235a54c768e75dcec99370a4c.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;会告诉你几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当前在哪个分支&lt;/li&gt;
&lt;li&gt;哪些文件改了&lt;/li&gt;
&lt;li&gt;哪些文件已经&lt;code&gt;add&lt;/code&gt;了&lt;/li&gt;
&lt;li&gt;哪些文件还没有被Git跟踪&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如看到文件在&lt;code&gt;Changes not staged for commit&lt;/code&gt;下面，说明这个文件改了，但还没有加入暂存区。&lt;/p&gt;
&lt;p&gt;看到文件在&lt;code&gt;Changes to be committed&lt;/code&gt;下面，说明这个文件已经&lt;code&gt;add&lt;/code&gt;了，下一步可以&lt;code&gt;commit&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这个命令很适合用来确认现场。尤其是准备提交前，先看一眼可以避免把奇怪的文件一起提交上去。&lt;/p&gt;
&lt;h2&gt;第二步：看改了什么&lt;/h2&gt;
&lt;p&gt;只知道“文件改了”还不够，最好再看看具体改了哪些内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git diff&lt;/code&gt;默认查看工作区里还没有&lt;code&gt;add&lt;/code&gt;的改动。&lt;/p&gt;
&lt;p&gt;如果文件已经&lt;code&gt;add&lt;/code&gt;进暂存区了，想看这次准备提交的内容，可以用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff --cached
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只看某个文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我个人建议提交前尽量看一眼&lt;code&gt;diff&lt;/code&gt;，尤其是写代码时临时加过&lt;code&gt;console.log&lt;/code&gt;、测试地址、乱七八糟的注释，很容易忘记删。&lt;/p&gt;
&lt;h2&gt;第三步：选择要提交的内容&lt;/h2&gt;
&lt;p&gt;确认改动没问题后，就可以把文件加入暂存区。&lt;/p&gt;
&lt;p&gt;提交某一个文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add login.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提交当前目录下所有改动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git add .&lt;/code&gt;很方便，但也最容易把不该提交的东西带进去。比如日志文件、临时文件、编译产物、&lt;code&gt;.env&lt;/code&gt;配置文件。&lt;/p&gt;
&lt;p&gt;如果你同时改了两个文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;login.js
README.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但这次只想提交登录相关代码，就不要直接&lt;code&gt;git add .&lt;/code&gt;，而是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add login.js
git commit -m &quot;修复登录失败问题&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样&lt;code&gt;README.md&lt;/code&gt;的改动还留在工作区，不会被这次提交带上。&lt;/p&gt;
&lt;h2&gt;第四步：提交到本地仓库&lt;/h2&gt;
&lt;p&gt;文件加入暂存区后，就可以提交了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;添加登录页面&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;commit&lt;/code&gt;保存的是暂存区里的内容，也就是你前面&lt;code&gt;git add&lt;/code&gt;进去的那些改动。&lt;/p&gt;
&lt;p&gt;一个提交最好只做一件事。比如修bug就修bug，改文档就改文档，别把“修复登录问题”和“顺手调整首页样式”混成一个提交。&lt;/p&gt;
&lt;p&gt;提交说明也别总写：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;update&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种写法当时很爽，三天后自己看日志也不知道这个&lt;code&gt;update&lt;/code&gt;到底更新了什么。&lt;/p&gt;
&lt;p&gt;可以写得具体一点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;添加登录页面&quot;
git commit -m &quot;修复登录失败提示&quot;
git commit -m &quot;更新登录接口地址&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提交说明不一定要特别长，但至少要让人知道这次提交主要做了什么。&lt;/p&gt;
&lt;h2&gt;第五步：推送前先拉一下&lt;/h2&gt;
&lt;p&gt;提交完成后，很多人会直接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只有你一个人在改这个仓库，通常没问题。&lt;/p&gt;
&lt;p&gt;但如果远程仓库里已经有人提交了新内容，你本地还不知道，直接推送可能会被拒绝。所以比较稳妥的习惯是推送前先拉一下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git pull&lt;/code&gt;其实做了两件事：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull = git fetch + git merge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;fetch&lt;/code&gt;是把远程的新提交下载下来，&lt;code&gt;merge&lt;/code&gt;是把远程分支合并到你当前分支。&lt;/p&gt;
&lt;p&gt;所以&lt;code&gt;pull&lt;/code&gt;为什么会冲突？因为它本质上做了合并。&lt;/p&gt;
&lt;p&gt;如果远程有人改了同一段代码，你本地也改了同一段，Git当然不知道该保留谁的。&lt;/p&gt;
&lt;h2&gt;第六步：推送到远程仓库&lt;/h2&gt;
&lt;p&gt;确认本地提交没问题，也拉取过远程更新后，就可以推送：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;推送成功后，远程仓库页面上就能看到你的提交。&lt;/p&gt;
&lt;p&gt;如果是第一次推送一个新分支，可能需要写完整一点：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin 分支名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;-u&lt;/code&gt;是设置上游分支，设置之后以后就可以直接&lt;code&gt;git push&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;分支协作的完整流程我会放到下一篇讲，这篇先记住一件事：&lt;code&gt;push&lt;/code&gt;才是上传远程，&lt;code&gt;commit&lt;/code&gt;只是提交到本地。&lt;/p&gt;
&lt;h2&gt;改错了怎么撤回&lt;/h2&gt;
&lt;p&gt;写代码时改错文件很正常，关键是先看清楚改动在哪个阶段。&lt;/p&gt;
&lt;p&gt;如果文件还没有&lt;code&gt;add&lt;/code&gt;，想恢复到上一次提交时的样子：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;撤销当前目录下所有未暂存修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令会直接丢掉你的未提交修改，执行前最好先用&lt;code&gt;git diff&lt;/code&gt;看一下。&lt;/p&gt;
&lt;p&gt;如果文件已经&lt;code&gt;git add&lt;/code&gt;了，但还没&lt;code&gt;commit&lt;/code&gt;，想把它从暂存区拿出来：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore --staged 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这只是取消暂存，文件内容还在。&lt;/p&gt;
&lt;p&gt;简单记：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore --staged 文件名  = 从暂存区拿出来
git restore 文件名           = 丢掉工作区修改
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;哪些文件不要提交&lt;/h2&gt;
&lt;p&gt;项目里总有些东西不应该交给Git管，比如依赖目录、编译产物、日志、环境变量文件。&lt;/p&gt;
&lt;p&gt;常见的&lt;code&gt;.gitignore&lt;/code&gt;大概长这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;node_modules
dist
.env
*.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;.env&lt;/code&gt;这种文件尤其要注意，里面经常放密钥、数据库密码之类的东西，不要随便提交。&lt;/p&gt;
&lt;p&gt;如果文件已经被提交过，再写进&lt;code&gt;.gitignore&lt;/code&gt;是没用的，因为Git已经认识它了。要先取消跟踪：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rm --cached 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目录的话：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rm -r --cached 目录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后再提交一次。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt;不是删除文件，它只是告诉Git以后别继续跟踪这些文件。&lt;/p&gt;
&lt;h2&gt;简单认识一下分支&lt;/h2&gt;
&lt;p&gt;分支听起来像是团队协作才用的东西，其实一个人写项目也很有用。&lt;/p&gt;
&lt;p&gt;比如主分支&lt;code&gt;main&lt;/code&gt;现在是能正常运行的版本。你突然想大改登录逻辑，如果直接在&lt;code&gt;main&lt;/code&gt;上改，改一半发现跑不起来了，就很尴尬。&lt;/p&gt;
&lt;p&gt;这时可以开个新分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch -c feature-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看当前有哪些分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切回主分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;分支的意义就是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;我可以在一条独立的线上折腾，折腾好了再合回主分支。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;至于多人协作时怎么创建功能分支、怎么推送分支、怎么发Pull Request、怎么合并回&lt;code&gt;main&lt;/code&gt;，下一篇《Git协作流程》会继续讲。&lt;/p&gt;
&lt;h2&gt;发生冲突怎么办&lt;/h2&gt;
&lt;p&gt;冲突通常出现在&lt;code&gt;pull&lt;/code&gt;、&lt;code&gt;merge&lt;/code&gt;、&lt;code&gt;rebase&lt;/code&gt;这些操作时。&lt;/p&gt;
&lt;p&gt;冲突文件里一般会出现这种东西：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
这是你本地的内容
=======
这是远程分支的内容
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; origin/main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它的意思是：同一个位置，两边都有修改，Git不知道该选哪边。&lt;/p&gt;
&lt;p&gt;你要做的是手动改成最终想要的内容，然后把这些冲突标记删掉。&lt;/p&gt;
&lt;p&gt;如果是普通&lt;code&gt;pull&lt;/code&gt;或&lt;code&gt;merge&lt;/code&gt;产生的冲突，处理完后：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 冲突文件
git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你用的是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull --rebase
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;冲突处理完后继续：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 冲突文件
git rebase --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不想继续这次&lt;code&gt;rebase&lt;/code&gt;，可以取消：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rebase --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;冲突本身不可怕，它只是Git不敢替你做选择。解决完以后，最好重新跑一下项目，确认代码逻辑真的没问题。&lt;/p&gt;
&lt;h2&gt;看历史用log&lt;/h2&gt;
&lt;p&gt;提交多了以后，可以用&lt;code&gt;git log&lt;/code&gt;看历史：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认输出比较长，平时我更常用这个：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git log --oneline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出大概是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a1b2c3d 修复登录失败问题
e4f5g6h 添加用户设置页面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前面那串是提交ID，后面是提交说明。&lt;/p&gt;
&lt;p&gt;如果想看分支关系，可以用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git log --oneline --graph --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;刚开始不一定要看懂所有线条，至少能看出来提交历史是怎么往前走的。&lt;/p&gt;
&lt;h2&gt;常用命令速查&lt;/h2&gt;
&lt;p&gt;查看当前状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看具体改动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看暂存区里的改动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git diff --cached
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;加入暂存区：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add 文件名
git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提交到本地仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;提交说明&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拉取远程更新：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;推送到远程：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;撤销未提交修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取消暂存：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git restore --staged 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看历史：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git log --oneline
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建并切换分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch -c 分支名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切换分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git switch 分支名
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;这篇先不用死记很多高级命令，重点记住一条线：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;工作区 -&amp;gt; git add -&amp;gt; 暂存区 -&amp;gt; git commit -&amp;gt; 本地仓库 -&amp;gt; git push -&amp;gt; 远程仓库
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以及一套日常流程：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
git diff
git add .
git commit -m &quot;提交说明&quot;
git pull
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先用&lt;code&gt;status&lt;/code&gt;看现场，用&lt;code&gt;diff&lt;/code&gt;确认改动，再&lt;code&gt;add&lt;/code&gt;、&lt;code&gt;commit&lt;/code&gt;、&lt;code&gt;pull&lt;/code&gt;、&lt;code&gt;push&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;把这套流程用顺以后，再去理解分支、合并、Pull Request，就不会觉得Git那么玄学了。&lt;/p&gt;
</content:encoded></item><item><title>Gitea与Git配置</title><link>https://blog.aloys233.top/posts/gitea%E4%B8%8Egit%E9%85%8D%E7%BD%AE/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/gitea%E4%B8%8Egit%E9%85%8D%E7%BD%AE/</guid><description>记录 Gitea 配合 Git 使用时的常用配置，包括 SSH 密钥、仓库初始化、推送拉取和常见问题。</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;Gitea是一个轻量级的Git代码托管服务，功能和Github、GitLab类似，可以用来搭建自己的私有仓库。&lt;/p&gt;
&lt;p&gt;这篇文章主要记录本地Git连接Gitea时需要做的配置，包括用户名邮箱、SSH密钥、仓库推送和常见报错处理。&lt;/p&gt;
&lt;h2&gt;安装Git&lt;/h2&gt;
&lt;p&gt;Windows可以直接去Git官网下载&lt;a href=&quot;https://git-scm.com/install/windows&quot;&gt;Git for Windows&lt;/a&gt;。
&lt;img src=&quot;https://static.aloys23.link/pic/107d3111f53fd03f7003c0896acaaafb.webp&quot; alt=&quot;&quot; /&gt;
安装时如果不确定选项，基本保持默认即可。安装完成后，建议右键打开&lt;code&gt;Git Bash&lt;/code&gt;执行后面的Git和SSH命令，这样Linux里的大部分命令都能直接使用。&lt;/p&gt;
&lt;p&gt;如果习惯用PowerShell，也可以使用Git，但部分命令写法会不同，后面会单独标出来。&lt;/p&gt;
&lt;p&gt;Linux一般用系统包管理器安装：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Debian / Ubuntu
sudo apt install git

# Arch Linux
sudo pacman -S git

# Fedora
sudo dnf install git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后检查版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;配置Git用户名和邮箱&lt;/h2&gt;
&lt;p&gt;这一步会影响提交记录里显示的作者信息。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global user.name &quot;你的用户名&quot;
git config --global user.email &quot;你的邮箱&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global --list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果只想给当前仓库单独设置，不要加&lt;code&gt;--global&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config user.name &quot;你的用户名&quot;
git config user.email &quot;你的邮箱&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;生成SSH密钥&lt;/h2&gt;
&lt;p&gt;推荐使用SSH连接Gitea，这样以后推送代码不用每次输入账号密码。&lt;/p&gt;
&lt;p&gt;先检查本机是否已经有SSH密钥。&lt;/p&gt;
&lt;p&gt;Linux、macOS、Windows Git Bash：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls ~/.ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows PowerShell：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dir $env:USERPROFILE\.ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果已经有&lt;code&gt;id_ed25519.pub&lt;/code&gt;或&lt;code&gt;id_rsa.pub&lt;/code&gt;，可以直接使用现有公钥。没有的话生成一个新的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &quot;你的邮箱&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一路回车即可。Windows默认也会生成到&lt;code&gt;C:\Users\你的用户名\.ssh\&lt;/code&gt;目录。&lt;/p&gt;
&lt;p&gt;生成完成后查看公钥。&lt;/p&gt;
&lt;p&gt;Linux、macOS、Windows Git Bash：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows PowerShell：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;type $env:USERPROFILE\.ssh\id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;复制输出的整行内容，注意是&lt;code&gt;.pub&lt;/code&gt;结尾的公钥，不要把私钥复制出去。&lt;/p&gt;
&lt;h2&gt;在Gitea添加SSH公钥&lt;/h2&gt;
&lt;p&gt;登录Gitea后，进入用户设置，找到SSH/GPG密钥，将刚刚复制的公钥添加进去。
&lt;img src=&quot;https://static.aloys23.link/pic/6540346eebb8e859dfef331ed55b256a.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/1cbf88728a2a2a27b2776a992aecc213.webp&quot; alt=&quot;&quot; /&gt;
添加完成后，在本地测试连接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T git@你的Gitea域名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T git@git.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一次连接会提示是否信任主机，输入&lt;code&gt;yes&lt;/code&gt;即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/4b8ef29f34f368fda3107fc3f39fb55f.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;如果能看到类似欢迎信息，说明SSH配置成功。&lt;/p&gt;
&lt;h2&gt;配置Windows换行&lt;/h2&gt;
&lt;p&gt;Windows默认换行是CRLF，Linux默认是LF。如果项目里多人协作，建议先设置Git的换行处理。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global core.autocrlf input
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;创建并推送新仓库&lt;/h2&gt;
&lt;p&gt;先在Gitea网页端新建一个空仓库，创建时建议先不要勾选初始化README，这样本地推送最简单。
&lt;img src=&quot;https://static.aloys23.link/pic/e8cb023a8c73117b3dbb2b643293e653.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/003a74beb7c360e23a5e373841c7ffa9.webp&quot; alt=&quot;&quot; /&gt;
然后在本地项目目录执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git init
git add .
git commit -m &quot;Initial commit&quot;
git branch -M main
git remote add origin 你刚刚复制的SSH地址
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;克隆已有仓库&lt;/h2&gt;
&lt;p&gt;如果仓库已经存在，直接复制Gitea页面上的SSH地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone 你复制的SSH地址
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入目录后就可以正常拉取和推送：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd 仓库名
git pull
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;HTTPS方式&lt;/h2&gt;
&lt;p&gt;如果不想配置SSH，也可以使用HTTPS地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://你的Gitea域名/用户名/仓库名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是现在很多Git服务不再推荐直接用账号密码推送，通常需要使用访问令牌。Gitea可以在用户设置里创建Access Token，然后推送时用Token代替密码。&lt;/p&gt;
&lt;h2&gt;修改远程仓库地址&lt;/h2&gt;
&lt;p&gt;查看当前远程地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果之前用了HTTPS，想改成SSH：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@你的Gitea域名:用户名/仓库名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;多个Git账号配置&lt;/h2&gt;
&lt;p&gt;如果同时使用Github和自己的Gitea，建议给不同服务配置不同密钥。&lt;/p&gt;
&lt;p&gt;先生成一个专门给Gitea用的密钥：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t ed25519 -C &quot;你的邮箱&quot; -f ~/.ssh/id_ed25519_gitea
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后编辑&lt;code&gt;~/.ssh/config&lt;/code&gt;。Windows对应路径是&lt;code&gt;C:\Users\你的用户名\.ssh\config&lt;/code&gt;，没有这个文件就新建一个。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host gitea
    HostName 你的Gitea域名
    User git
    IdentityFile ~/.ssh/id_ed25519_gitea
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后仓库地址可以写成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin gitea:用户名/仓库名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试连接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T gitea
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;常见问题&lt;/h2&gt;
&lt;h3&gt;Permission denied (publickey)&lt;/h3&gt;
&lt;p&gt;一般是SSH公钥没有配置好，可以按下面步骤排查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认Gitea里添加的是&lt;code&gt;.pub&lt;/code&gt;公钥。&lt;/li&gt;
&lt;li&gt;确认本地远程地址是SSH地址，不是HTTPS地址。&lt;/li&gt;
&lt;li&gt;执行&lt;code&gt;ssh -T git@你的Gitea域名&lt;/code&gt;测试连接。&lt;/li&gt;
&lt;li&gt;多密钥环境下检查&lt;code&gt;~/.ssh/config&lt;/code&gt;是否写对。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;src refspec main does not match any&lt;/h3&gt;
&lt;p&gt;通常是本地还没有提交，先提交一次：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
git commit -m &quot;Initial commit&quot;
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可能是当前分支不叫&lt;code&gt;main&lt;/code&gt;，用下面命令查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;failed to push some refs&lt;/h3&gt;
&lt;p&gt;远程仓库里已经有提交，而本地没有同步。先拉取：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull --rebase origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解决冲突后再推送：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;端口不是22怎么办&lt;/h3&gt;
&lt;p&gt;如果Gitea的SSH端口不是默认的22，比如是2222，仓库地址可以写成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone ssh://git@你的Gitea域名:2222/用户名/仓库名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以写进&lt;code&gt;~/.ssh/config&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host gitea
    HostName 你的Gitea域名
    User git
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_gitea
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后使用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone gitea:用户名/仓库名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;日常使用Gitea主要就是三步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本地配置Git用户名和邮箱。&lt;/li&gt;
&lt;li&gt;生成SSH密钥并添加到Gitea。&lt;/li&gt;
&lt;li&gt;使用SSH地址克隆或推送仓库。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;配置完成后，Gitea和其他Git托管平台的使用方式基本一致，常用命令还是&lt;code&gt;git clone&lt;/code&gt;、&lt;code&gt;git pull&lt;/code&gt;、&lt;code&gt;git add&lt;/code&gt;、&lt;code&gt;git commit&lt;/code&gt;和&lt;code&gt;git push&lt;/code&gt;。&lt;/p&gt;
</content:encoded></item><item><title>Minecraft主题电脑</title><link>https://blog.aloys233.top/posts/minecraft%E4%B8%BB%E9%A2%98%E7%94%B5%E8%84%91/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/minecraft%E4%B8%BB%E9%A2%98%E7%94%B5%E8%84%91/</guid><description>整理 Minecraft 风格的 GRUB 和 SDDM 主题项目，方便打造 Minecraft 主题电脑。</description><pubDate>Wed, 24 Dec 2025 01:15:55 GMT</pubDate><content:encoded>&lt;p&gt;GRUB：https://github.com/Lxtharia/minegrub-theme&lt;/p&gt;
&lt;p&gt;SDDM：https://github.com/Davi-S/sddm-theme-minesddm&lt;/p&gt;
</content:encoded></item><item><title>Paru无法打开报错解决</title><link>https://blog.aloys233.top/posts/paru%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/paru%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3/</guid><description>记录 Paru 无法打开或编译报错时，通过卸载后重新编译安装解决问题的方法。</description><pubDate>Mon, 15 Dec 2025 13:51:10 GMT</pubDate><content:encoded>&lt;pre&gt;&lt;code&gt;paru: error while loading shared libraries: libalpm.so.15: cannot open shared object file: No such file or directory
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先卸载paru,重新编译，如果遇见编译报错，用下面的buildpkg&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Morganamilo/paru/issues/1454#issuecomment-3620788285&quot;&gt;https://github.com/Morganamilo/paru/issues/1454#issuecomment-3620788285&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Maintainer: Morgan &amp;lt;morganamilo@archlinux.org&amp;gt;
pkgname=paru
pkgver=2.1.0
pkgrel=2.1
pkgdesc=&apos;Feature packed AUR helper&apos;
url=&apos;https://github.com/morganamilo/paru&apos;
source=(&quot;$pkgname-$pkgver.tar.gz::https://github.com/Morganamilo/paru/archive/v$pkgver.tar.gz&quot;)
backup=(&quot;etc/paru.conf&quot;)
arch=(&apos;i686&apos; &apos;pentium4&apos; &apos;x86_64&apos; &apos;arm&apos; &apos;armv7h&apos; &apos;armv6h&apos; &apos;aarch64&apos;)
license=(&apos;GPL-3.0-or-later&apos;)
makedepends=(&apos;cargo&apos;)
depends=(&apos;git&apos; &apos;pacman&apos; &apos;libalpm.so&amp;gt;=14&apos;)
optdepends=(&apos;bat: colored pkgbuild printing&apos; &apos;devtools: build in chroot and downloading pkgbuilds&apos;)
sha256sums=(&apos;eea4dbb524db765d5316f540f9ee670c0bf81aae4827b5417eebb4c9b5651727&apos;)

prepare() {
  cd &quot;$pkgname-$pkgver&quot;

  patch -Np1 &amp;lt;&amp;lt;EOF
diff --git a/Cargo.toml b/Cargo.toml
index 26063f7..eb556cf 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -75,2 +75,2 @@ mock_chroot = [&quot;mock&quot;]
-#alpm = { path = &quot;../alpm.rs/alpm&quot; }
-#alpm-utils = { path = &quot;../alpm.rs/alpm-utils&quot; }
+alpm = { git = &quot;https://github.com/archlinux/alpm.rs.git&quot;, rev = &quot;b010ec79ee92b54e87f07fa4e287cbabc035c0ca&quot; }
+alpm-utils = { git = &quot;https://github.com/archlinux/alpm.rs.git&quot;, rev = &quot;b010ec79ee92b54e87f07fa4e287cbabc035c0ca&quot; }
EOF
  rm Cargo.lock

  cargo fetch --target &quot;$(rustc -vV | sed -n &apos;s|host: ||p&apos;)&quot;
}

build () {
  cd &quot;$srcdir/$pkgname-$pkgver&quot;

  if pacman -T pacman-git &amp;gt; /dev/null; then
    _features+=&quot;git,&quot;
  fi

  if [[ $CARCH != x86_64 ]]; then
    export CARGO_PROFILE_RELEASE_LTO=off
  fi

  cargo build --frozen --features &quot;${_features:-}&quot; --release --target-dir target
  ./scripts/mkmo locale/
}

package() {
  cd &quot;$srcdir/$pkgname-$pkgver&quot;

  install -Dm755 target/release/paru &quot;${pkgdir}/usr/bin/paru&quot;
  install -Dm644 paru.conf &quot;${pkgdir}/etc/paru.conf&quot;

  install -Dm644 man/paru.8 &quot;$pkgdir/usr/share/man/man8/paru.8&quot;
  install -Dm644 man/paru.conf.5 &quot;$pkgdir/usr/share/man/man5/paru.conf.5&quot;

  install -Dm644 completions/bash &quot;${pkgdir}/usr/share/bash-completion/completions/paru.bash&quot;
  install -Dm644 completions/fish &quot;${pkgdir}/usr/share/fish/vendor_completions.d/paru.fish&quot;
  install -Dm644 completions/zsh &quot;${pkgdir}/usr/share/zsh/site-functions/_paru&quot;

  install -d &quot;$pkgdir/usr/share/&quot;
  cp -r locale &quot;$pkgdir/usr/share/&quot;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Arch Linux清理垃圾</title><link>https://blog.aloys233.top/posts/arch-linux%E6%B8%85%E7%90%86%E5%9E%83%E5%9C%BE/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/arch-linux%E6%B8%85%E7%90%86%E5%9E%83%E5%9C%BE/</guid><description>整理 Arch Linux 中清理 pacman 缓存、孤立依赖、AUR 缓存和 systemd 日志的常用命令。</description><pubDate>Thu, 09 Oct 2025 14:19:32 GMT</pubDate><content:encoded>&lt;h1&gt;清理 pacman 缓存&lt;/h1&gt;
&lt;h2&gt;查看缓存大小&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo du -sh /var/cache/pacman/pkg
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;清理旧版本（保留每个包最近两个版本**）**&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo paccache -r
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;删除不再需要的依赖包&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -Rns $(pacman -Qdtq)
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;清理 AUR 助手缓存&lt;/h1&gt;
&lt;h2&gt;yay:&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo yay -Sc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;paru:&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo paru -Sc
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;清理日志文件&lt;/h1&gt;
&lt;p&gt;清理 journal 日志（systemd）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo journalctl --vacuum-time=7d
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Windows+Linux双系统时间不统一修复</title><link>https://blog.aloys233.top/posts/windowslinux%E5%8F%8C%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%97%B4%E4%B8%8D%E7%BB%9F%E4%B8%80%E4%BF%AE%E5%A4%8D/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/windowslinux%E5%8F%8C%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%97%B4%E4%B8%8D%E7%BB%9F%E4%B8%80%E4%BF%AE%E5%A4%8D/</guid><description>记录 Windows 与 Linux 双系统时间不统一的原因，以及分别在 Windows 和 Linux 侧的修复方法。</description><pubDate>Thu, 09 Oct 2025 13:54:26 GMT</pubDate><content:encoded>&lt;h1&gt;为什么会出现时间不统一&lt;/h1&gt;
&lt;p&gt;Windows 和大多数 Linux 发行版对硬件时钟（RTC）的理解不一样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 默认把主板时间当作本地时间&lt;/li&gt;
&lt;li&gt;Linux 默认把主板时间当作 UTC 时间&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以你在一个系统里把时间校准好，重启进另一个系统后，就可能会出现快 8 小时或者慢 8 小时的问题。&lt;/p&gt;
&lt;h1&gt;方案一：修改 Windows，推荐&lt;/h1&gt;
&lt;p&gt;这个方案更推荐，因为 Linux 默认使用 UTC 更合理，也更符合服务器和多系统环境的习惯。&lt;/p&gt;
&lt;p&gt;在 Windows 中按 &lt;code&gt;Win + X&lt;/code&gt;，打开 &lt;code&gt;Windows PowerShell（管理员）&lt;/code&gt; 或 &lt;code&gt;终端（管理员）&lt;/code&gt;，执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行完成后，重启 Windows。&lt;/p&gt;
&lt;p&gt;如果想立刻同步一次时间，可以再到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;设置 -&amp;gt; 时间和语言 -&amp;gt; 日期和时间&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打开“自动设置时间”&lt;/li&gt;
&lt;li&gt;点击“立即同步”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;恢复默认设置&lt;/h2&gt;
&lt;p&gt;如果后面你想撤销这个修改，可以在管理员 PowerShell 中执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;方案二：修改 Linux，让 Linux 兼容 Windows&lt;/h1&gt;
&lt;p&gt;如果你不想改 Windows，也可以反过来让 Linux 直接把 RTC 当成本地时间。&lt;/p&gt;
&lt;p&gt;在 Linux 终端执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo timedatectl set-local-rtc 1 --adjust-system-clock
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后检查当前状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果输出里出现下面这一项，说明设置成功：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RTC in local TZ: yes
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;恢复 Linux 默认行为&lt;/h2&gt;
&lt;p&gt;如果你之后想改回 Linux 默认的 UTC 方式，可以执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo timedatectl set-local-rtc 0 --adjust-system-clock
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看到下面这一项即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RTC in local TZ: no
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;两种方案怎么选&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;只改一次，长期稳定使用：推荐改 Windows&lt;/li&gt;
&lt;li&gt;不方便动 Windows 注册表：就改 Linux&lt;/li&gt;
&lt;li&gt;如果你经常折腾多系统、远程同步、时区切换：也更建议保留 Linux 的 UTC 逻辑，只改 Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;修改后建议再做一次校时&lt;/h1&gt;
&lt;p&gt;无论你选哪种方案，改完后都建议进入当前系统手动同步一次网络时间，再重启到另一个系统检查。&lt;/p&gt;
&lt;p&gt;Linux 下可以执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl set-ntp true
timedatectl status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows 下则在“日期和时间”设置里点一次“立即同步”即可。&lt;/p&gt;
</content:encoded></item><item><title>Arch+Windows双系统|Btrfs文件系统</title><link>https://blog.aloys233.top/posts/archwindows%E5%8F%8C%E7%B3%BB%E7%BB%9Fbtrfs%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/archwindows%E5%8F%8C%E7%B3%BB%E7%BB%9Fbtrfs%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/</guid><description>记录 UEFI 设备上安装 Arch 与 Windows 双系统，并使用 Btrfs 文件系统的完整流程。</description><pubDate>Sat, 04 Oct 2025 10:33:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;此教程仅适用于 UEFI 设备。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;前提与准备&lt;/h1&gt;
&lt;p&gt;开始之前，先确认这篇教程的前提：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;电脑里已经安装了 Windows&lt;/li&gt;
&lt;li&gt;目标磁盘已预留一块未分配空间给 Arch Linux&lt;/li&gt;
&lt;li&gt;安装方式使用 &lt;code&gt;archinstall&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文件系统使用 &lt;code&gt;btrfs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载Arch镜像：&lt;a href=&quot;https://archlinux.org/download/&quot;&gt;https://archlinux.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;往下翻，在中国镜像站选一个点进去
&lt;img src=&quot;https://static.aloys23.link/pic/fa6f8e523e4926f624605e50c3fa795b.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;下载iso结尾的文件
&lt;img src=&quot;https://static.aloys23.link/pic/f64903ff994297f6adafddd7eff42409.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后下载打开Rufus，&lt;a href=&quot;https://rufus.ie/zh/&quot;&gt;https://rufus.ie/zh/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;插入U盘，选择镜像，刷写镜像。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2a74251e4dee97c1d75218b98c9f63f6.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后打开磁盘管理（Disk Management）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/f9e2445f3b0436a3a361888a5f2c6c18.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;确保你想要安装linux的空间是无分区的&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8c42e01750ffb8db595ed3f7fd0c96a8.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;制作启动盘并进入安装环境&lt;/h1&gt;
&lt;p&gt;按住Shift，点击开始菜单中的重启按钮，然后稍等一会，进入这个页面，选择第二项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/0684de6966ad0faaa1b547ebf23a432c.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后选择你的U盘&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/3efe6440117b8e8d3af2e5f6baf2b4d8.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;随后会自动重启。&lt;/p&gt;
&lt;p&gt;稍等片刻进入选择启动项。&lt;/p&gt;
&lt;p&gt;BIOS：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/e008f82cc4349c30703a79845c3d8a6c.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;UEFI：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/4dae17c0a7885d296ebf4f8ebfb08819.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择第一个，或者等时间到自动选择。&lt;/p&gt;
&lt;p&gt;然后便进入了archiso安装系统。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/fa73ab3f260376fd8144d7c2970834cd.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先确保你电脑有网，可以&lt;code&gt;ping&lt;/code&gt;一下百度。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/51b73811829fa04b1e1b75e14407ccaa.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：Linux 中的 &lt;code&gt;ping&lt;/code&gt; 不会自动停止，使用 &lt;code&gt;Ctrl+C&lt;/code&gt; 退出。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;联网方式&lt;/h2&gt;
&lt;p&gt;如果 &lt;code&gt;ping&lt;/code&gt; 不通，可以根据自己的网络环境，选择下面一种方式联网。&lt;/p&gt;
&lt;h3&gt;Wi-Fi&lt;/h3&gt;
&lt;p&gt;如果你现在还没连上 Wi-Fi，可以先用 &lt;code&gt;iwctl&lt;/code&gt; 连接无线网络。&lt;/p&gt;
&lt;p&gt;先进入 &lt;code&gt;iwctl&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iwctl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看无线网卡设备名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;device list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一般会看到类似 &lt;code&gt;wlan0&lt;/code&gt; 或 &lt;code&gt;wlp3s0&lt;/code&gt; 这样的设备名。下面用 &lt;code&gt;wlan0&lt;/code&gt; 作为例子，你需要替换成自己的实际名称。&lt;/p&gt;
&lt;p&gt;扫描附近 Wi-Fi：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;station wlan0 scan
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看扫描结果：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;station wlan0 get-networks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;连接你的 Wi-Fi：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;station wlan0 connect 你的WiFi名称
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果 Wi-Fi 名称里有空格，记得加引号，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;station wlan0 connect &quot;My Home WiFi&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入密码后，等待连接完成，然后输入 &lt;code&gt;exit&lt;/code&gt; 退出 &lt;code&gt;iwctl&lt;/code&gt;，再重新测试网络：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ping baidu.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;有线宽带拨号（PPPoE）&lt;/h3&gt;
&lt;p&gt;如果你是有线连接，但网络环境需要宽带拨号（PPPoE），可以这样连接：&lt;/p&gt;
&lt;p&gt;先确认网线已经插好，然后运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pppoe-setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个命令会依次让你填写：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网卡名称，一般是 &lt;code&gt;enp3s0&lt;/code&gt;、&lt;code&gt;eth0&lt;/code&gt; 这类名字&lt;/li&gt;
&lt;li&gt;宽带账号&lt;/li&gt;
&lt;li&gt;宽带密码&lt;/li&gt;
&lt;li&gt;DNS，直接选默认即可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;配置完成后，启动拨号：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pppoe-start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拨号成功后，再测试网络：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ping baidu.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果后面需要断开拨号，可以执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pppoe-stop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入&lt;code&gt;archinstall&lt;/code&gt;进入简易的安装程序。&lt;/p&gt;
&lt;p&gt;这个页面可能会等一会。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/1ac91e86c283e4575e37a1af89e1b009.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/80a8a24e0133af5c7f4c095717a9f890.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;使用 archinstall 安装&lt;/h1&gt;
&lt;h2&gt;区域设置&lt;/h2&gt;
&lt;p&gt;语言和区域先不改。&lt;/p&gt;
&lt;p&gt;选择第三项，回车。&lt;/p&gt;
&lt;p&gt;然后选择第一项（Select regions），回车。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/841bba0156c536ed02531060e7f616af.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;找到China，&lt;strong&gt;空格选择，回车保存退出&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;然后选择Back，回到主页面。&lt;/p&gt;
&lt;h2&gt;磁盘分区&lt;/h2&gt;
&lt;p&gt;接着配置第4项，磁盘管理。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/be742612d8e8482f224b62ef0cb63e84.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;选择你的磁盘&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/7119f8f5fbf939b9de02bee46cb3c42f.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后选择刚刚的未分区空间&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/29e24a0c363f76c55300f178740cec3d.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;先分出1GiB作为&lt;code&gt;efi&lt;/code&gt;分区。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c7002bd5067ac1471584ad67b7c3c931.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;文件系统选&lt;code&gt;fat32&lt;/code&gt;，挂载点输入&lt;code&gt;/boot&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后继续分区。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/ffbdc010cf7426c170b5e24b1a080bf0.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这一次不用填大小，留空即可，然后回车。&lt;/p&gt;
&lt;p&gt;文件系统选&lt;code&gt;btrfs&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后选择刚刚创建的&lt;code&gt;btrfs&lt;/code&gt;分区。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/ba7688900ffe0b6b0407235754b28037.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;创建 Btrfs 子卷&lt;/h2&gt;
&lt;p&gt;选择创建子卷。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/9e6fdf9f21eeaf31b1e6bd83f2bf793b.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;创建&lt;code&gt;@home&lt;/code&gt;子卷&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c5a9642b107cbcb1da263092a671ff57.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后挂载到&lt;code&gt;/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/0f7a2b5c3032cfbf9c164e8102b39d89.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接下来的子卷操作一样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;子卷&lt;code&gt;@&lt;/code&gt;，挂载到&lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;子卷&lt;code&gt;@log&lt;/code&gt;，挂载到&lt;code&gt;/var/log&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后就可以保存了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/f805ee3684a90964920332dec5899d0e.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2b8c09b5b33790bfd7e98c02bb005745.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;其他安装选项&lt;/h2&gt;
&lt;p&gt;返回到主界面，其中&lt;code&gt;Bootloader&lt;/code&gt;选择&lt;code&gt;Grub&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Hostname&lt;/code&gt;主机名自己修改。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Authentication&lt;/code&gt;中创建账号，选择第二个创建用户账户。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/23977d592e6e88c9886562560ad475aa.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后这里会提示是否作为超级用户，选择是（默认）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/d0bb20799d392acfb789e4dd9097819a.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;Profile&lt;/code&gt;中可以选择你想要的桌面环境，我这里就不选了。&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;Applications&lt;/code&gt;中选择蓝牙和音频。&lt;/p&gt;
&lt;p&gt;音频选择&lt;code&gt;Pipewire&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;返回主菜单中选择网络配置（Network configuration）。&lt;/p&gt;
&lt;p&gt;如果你是有线连接的，选择第一个即可。&lt;/p&gt;
&lt;p&gt;然后在TimeZone中选择&lt;code&gt;Asia/Chongqing&lt;/code&gt;或者&lt;code&gt;Asia/Shanghai&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;最后选择Install，开始安装。&lt;/p&gt;
&lt;h2&gt;安装完成后进入 chroot 环境&lt;/h2&gt;
&lt;p&gt;安装完后选择第三个。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8ca6bfb98e33dcb5319208f6462ae62e.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;配置 GRUB 并识别 Windows&lt;/h2&gt;
&lt;p&gt;先安装grub对应的依赖：对应你 CPU 的&lt;code&gt;intel-ucode&lt;/code&gt; 或 &lt;code&gt;amd-ucode&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Intel：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S intel-ucode os-prober vim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AMD：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S amd-ucode os-prober vim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后编辑 &lt;code&gt;/etc/default/grub&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到 &lt;code&gt;GRUB_DISABLE_OS_PROBER&lt;/code&gt;，然后按&lt;code&gt;i&lt;/code&gt;进入编辑模式，删除这个&lt;code&gt;#&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/cddc7e2fbfac58041f7b9e70d13604cb.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后按&lt;code&gt;ESC&lt;/code&gt;，退出编辑模式，输入&lt;code&gt;:wq&lt;/code&gt;保存退出。&lt;/p&gt;
&lt;p&gt;随后生成配置文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;观察输出文本，看是否有 Windows 字样出现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/e3b4551d0a737863beb80f05df56ff2a.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;比如我这个就没有出现 Windows，说明没有识别到 Windows 引导。&lt;/p&gt;
&lt;h2&gt;手动挂载 Windows EFI 分区&lt;/h2&gt;
&lt;p&gt;先输入&lt;code&gt;lsblk -f&lt;/code&gt;确认分区情况。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/38b16db37dd17e614b06096f43edc855.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后找到你 Windows 的 EFI 分区，比如我这个就是 &lt;code&gt;/dev/sda1&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;创建挂载点并挂载分区：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p /mnt/win-efi
mount /dev/sda1 /mnt/win-efi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新Grub配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时 Windows 的引导就出来了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/9de1106f81a114d7d06f284491be6943.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;调整 EFI 启动顺序&lt;/h2&gt;
&lt;p&gt;接着我们查看启动顺序是否正确。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;efibootmgr -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/ee1614c4ad20d66a281feaee11625100.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;观察&lt;code&gt;BootOrder&lt;/code&gt;后面的顺序，然后和下面对比着看，我们要确保Grub在第一个，至少要比 Windows 更前面。&lt;/p&gt;
&lt;p&gt;如果 Windows 在 GRUB 前面，那就参考下面命令修改。下面命令别抄，对照你自己的实际情况：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;efibootmgr -o XXXX,XXXY
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;退出并重启&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;exit&lt;/code&gt; 退出 chroot 环境。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;umount -R /mnt&lt;/code&gt; 卸载 &lt;code&gt;/mnt&lt;/code&gt; 下的所有硬盘。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;reboot&lt;/code&gt; 重启设备。&lt;/p&gt;
&lt;p&gt;随后便会进入 GRUB 引导选择。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/bc8b72cc09ac2e377aedcca319231119.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;常见问题&lt;/h1&gt;
&lt;h2&gt;启动项没有 GRUB&lt;/h2&gt;
&lt;p&gt;执行 GRUB 安装：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后再生成配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再次查看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;efibootmgr -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/3014849a4bf196496ec5a9a3b5b20061.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Packet Tracer在Arch Linux安装教程</title><link>https://blog.aloys233.top/posts/packet-tracer%E5%9C%A8arch-linux%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/packet-tracer%E5%9C%A8arch-linux%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/</guid><description>记录 Cisco Packet Tracer 在 Arch Linux 下的安装方式、构建流程和依赖处理。</description><pubDate>Sat, 13 Sep 2025 07:30:21 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;Packet Tracer 是 Cisco 推出的一个功能强大的网络模拟与可视化工具，它通过虚拟化路由器、交换机、无线设备和终端等网络组件，让用户能够在没有真实硬件的情况下，搭建、配置和调试各种网络拓扑，学习和验证如 TCP/IP、VLAN、STP、OSPF、EIGRP 等多种网络协议的工作原理，因此广泛应用于网络技术学习、CCNA/CCNP 等认证考试备考，以及课堂教学和实验环境。&lt;/p&gt;
&lt;p&gt;首先，根据Wiki上的指南，Packet Tracer无法使用aur安装。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/packettracer/&quot;&gt;&lt;strong&gt;packettracer&lt;/strong&gt;&lt;/a&gt;AUR can &lt;strong&gt;not&lt;/strong&gt; be installed using automated methods (e.g. &lt;a href=&quot;https://wiki.archlinux.org/title/AUR_helper&quot;&gt;&lt;strong&gt;AUR helper&lt;/strong&gt;&lt;/a&gt;) because the software&apos;s tarball must be downloaded first before building the package.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这里我提供一个根据官方教程构建的软件包。（amd64）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.123684.com/s/QvNTjv-LEWO&quot;&gt;https://www.123684.com/s/QvNTjv-LEWO&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：使用软件需要登陆思科账号。&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;构建指南&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;首先打开&lt;a href=&quot;https://aur.archlinux.org/packages/packettracer&quot;&gt;https://aur.archlinux.org/packages/packettracer&lt;/a&gt;下载构建文件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c6c41cfa2ab291338ef1b29d0bc421ca.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击下载快照即可。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解压构建文件，然后在思科官网下载deb安装包，注意下载下来的文件名是&lt;code&gt;Packet_Tracer822_amd64_signed.deb&lt;/code&gt;以便于构建&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Log into &lt;a href=&quot;https://www.netacad.com/&quot;&gt;&lt;strong&gt;Cisco Networking Academy&lt;/strong&gt;&lt;/a&gt; (Skills For All / NetAcad) using your Cisco Account. Register an account if you do not have it.&lt;/li&gt;
&lt;li&gt;Once in the Networking Academy portal, &lt;a href=&quot;https://www.packettracernetwork.com/download/download-packet-tracer.html&quot;&gt;&lt;strong&gt;download Cisco Packet Tracer 8.2.2 or 9.0.0 open beta&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Rename the deb package to &lt;code&gt;Packet_Tracer822_amd64_signed.deb&lt;/code&gt; so it is recognized by the build script.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;将deb放在和PKGBUILD文件同级目录下&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Place the .deb file inside the folder where &lt;a href=&quot;https://aur.archlinux.org/packages/packettracer/&quot;&gt;&lt;strong&gt;packettracer&lt;/strong&gt;&lt;/a&gt;AUR&apos;s build files are located — that is the same folder where the &lt;a href=&quot;https://wiki.archlinux.org/title/PKGBUILD&quot;&gt;&lt;strong&gt;PKGBUILD&lt;/strong&gt;&lt;/a&gt; file is found.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;然后终端中进入这个目录（PKGBUILD同级），执行&lt;code&gt;makepkg -s&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;安装&lt;/h1&gt;
&lt;p&gt;在终端中输入&lt;code&gt;sudo pacman -U 【编译出来的软件名字】&lt;/code&gt;，如果你使用我提供的软件包，即为&lt;code&gt;sudo pacman -U packettracer-8.2.2-1-x86_64.pkg.tar.zst&lt;/code&gt;&lt;/p&gt;
</content:encoded></item><item><title>WSL(Windows Subsystem for Linux)安装指南</title><link>https://blog.aloys233.top/posts/wslwindows-subsystem-for-linux%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/wslwindows-subsystem-for-linux%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</guid><description>记录 Windows 上在线或离线安装 WSL，以及选择发行版和处理下载慢问题的方法。</description><pubDate>Fri, 12 Sep 2025 15:14:00 GMT</pubDate><content:encoded>&lt;h1&gt;1.在线安装&lt;/h1&gt;
&lt;p&gt;win+x，选择Windows Powershell（管理员）或者是命令提示符（管理员）打开。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8a9bcefbdf1a73b665eb748015237a05.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入wsl --update，或者wsl --update --web-download&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/e8ce2a068ab52eefffda08b08515d5f9.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后wsl --list --online，可以选择你要的版本。然后wsl --install 【你要的版本】。或者是打开Microsoft Store，然后选择你要的系统（Ubuntu之类的）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/a0d36261368c48d32b41b9958d7824fc.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;2.离线安装&lt;/h1&gt;
&lt;p&gt;wsl下载通常因为网络问题卡住，可以选择使用这种方式。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/WSL/releases&quot;&gt;https://github.com/microsoft/WSL/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2ea6488c5e8e8a81b40c15ac8aec26b1.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;打开wsl的github，下载离线包。&lt;/p&gt;
&lt;p&gt;如果下载慢的话，可以用github镜像站下载&lt;/p&gt;
&lt;p&gt;比如&lt;a href=&quot;https://ghfast.top/&quot;&gt;https://ghfast.top/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/401effb7a212da8cfef96a309e2a0ebb.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后步骤和上面一样&lt;/p&gt;
</content:encoded></item><item><title>Windows下实现多声卡聚合</title><link>https://blog.aloys233.top/posts/windows%E4%B8%8B%E5%AE%9E%E7%8E%B0%E5%A4%9A%E5%A3%B0%E5%8D%A1%E8%81%9A%E5%90%88/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/windows%E4%B8%8B%E5%AE%9E%E7%8E%B0%E5%A4%9A%E5%A3%B0%E5%8D%A1%E8%81%9A%E5%90%88/</guid><description>记录 Windows 下使用 Voicemeeter 实现多个声卡输入聚合与输出调节的方法。</description><pubDate>Fri, 04 Apr 2025 16:40:53 GMT</pubDate><content:encoded>&lt;p&gt;软件：&lt;/p&gt;
&lt;p&gt;https://vb-audio.com/Voicemeeter/&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/334874a8a28c28dfe45be6acf348bffa.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在左边input中选择两个不同的声卡，然后右边调节输出。实际电脑使用&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/990728cee73dccc7790f5dca58050efd.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>记一次更新python导致的apt报错</title><link>https://blog.aloys233.top/posts/%E8%AE%B0%E4%B8%80%E6%AC%A1%E6%9B%B4%E6%96%B0python%E5%AF%BC%E8%87%B4%E7%9A%84apt%E6%8A%A5%E9%94%99/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%AE%B0%E4%B8%80%E6%AC%A1%E6%9B%B4%E6%96%B0python%E5%AF%BC%E8%87%B4%E7%9A%84apt%E6%8A%A5%E9%94%99/</guid><description>记录升级 Python 后导致 apt update 报错的原因，以及通过 update-alternatives 切回 Python 版本的解决方法。</description><pubDate>Sat, 22 Mar 2025 08:33:47 GMT</pubDate><content:encoded>&lt;p&gt;这是执行sudo apt update 的报错&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;E: Problem executing scripts APT::Update::Post-Invoke-Success &apos;if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db &amp;gt; /dev/null; fi&apos;
E: Sub-process returned an error code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原因是我将python从3.12升级为了3.13。&lt;/p&gt;
&lt;p&gt;解决办法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>记录下上海Major通行证预测</title><link>https://blog.aloys233.top/posts/%E8%AE%B0%E5%BD%95%E4%B8%8B%E4%B8%8A%E6%B5%B7major%E9%80%9A%E8%A1%8C%E8%AF%81%E9%A2%84%E6%B5%8B/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%AE%B0%E5%BD%95%E4%B8%8B%E4%B8%8A%E6%B5%B7major%E9%80%9A%E8%A1%8C%E8%AF%81%E9%A2%84%E6%B5%8B/</guid><description>记录上海 Major 通行证预测结果和相关截图。</description><pubDate>Fri, 29 Nov 2024 11:51:31 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2443ca1db7a75e88e5900a56f3cdc082.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/4ca546525a95fabcb9c76f067f3f1ed6.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/15c420536944887b2958fe46a3ff147d.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>VS Code编译cpp环境配置</title><link>https://blog.aloys233.top/posts/vs-code%E7%BC%96%E8%AF%91cpp%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/vs-code%E7%BC%96%E8%AF%91cpp%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid><description>记录 Linux 下 VS Code 编译 C++ 项目所需的 c_cpp_properties、launch 和 tasks 配置。</description><pubDate>Sat, 16 Nov 2024 11:27:48 GMT</pubDate><content:encoded>&lt;p&gt;其他的网上都能找到&lt;/p&gt;
&lt;p&gt;我这只放三个文件&lt;/p&gt;
&lt;p&gt;放在.vscode下&lt;/p&gt;
&lt;p&gt;c_cpp_properties.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;configurations&quot;: [
        {
            &quot;name&quot;: &quot;Linux&quot;,
            &quot;includePath&quot;: [
                &quot;${workspaceFolder}/**&quot;
            ],
            &quot;defines&quot;: [],
            &quot;compilerPath&quot;: &quot;/usr/bin/gcc&quot;,
            &quot;cStandard&quot;: &quot;c11&quot;,
            &quot;cppStandard&quot;: &quot;gnu++11&quot;,
            &quot;intelliSenseMode&quot;: &quot;linux-gcc-x64&quot;,
            &quot;compilerArgs&quot;: []
        }
    ],
    &quot;version&quot;: 4
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;launch.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息，请访问: https://go.microsoft.com/fwlink/?linkid=830387
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: [
        {
            &quot;name&quot;: &quot;(gdb) 启动&quot;,
            &quot;type&quot;: &quot;cppdbg&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;program&quot;: &quot;${fileDirname}/${fileBasenameNoExtension}&quot;,
            &quot;args&quot;: [],
            &quot;stopAtEntry&quot;: false,
            &quot;cwd&quot;: &quot;${fileDirname}&quot;,
            &quot;environment&quot;: [],
            &quot;externalConsole&quot;: false,
            &quot;MIMode&quot;: &quot;gdb&quot;,
            &quot;setupCommands&quot;: [
                {
                    &quot;description&quot;: &quot;为 gdb 启用整齐打印&quot;,
                    &quot;text&quot;: &quot;-enable-pretty-printing&quot;,
                    &quot;ignoreFailures&quot;: false
                },
            ],
            &quot;preLaunchTask&quot;: &quot;C/C++: g++ 生成活动文件&quot;,
            &quot;miDebuggerArgs&quot;: &quot;-q -ex quit; wait() { fg &amp;gt;/dev/null; }; /bin/gdb -q --interpreter=mi&quot;,
            &quot;miDebuggerPath&quot;: &quot;/usr/bin/gdb&quot;
            
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;tasks.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;version&quot;: &quot;2.0.0&quot;,
    &quot;tasks&quot;: [
        {
            &quot;type&quot;: &quot;cppbuild&quot;,
            &quot;label&quot;: &quot;C/C++: g++ 生成活动文件&quot;,
            &quot;command&quot;: &quot;g++&quot;,
            &quot;args&quot;: [
                &quot;${file}&quot;,
                &quot;-fdiagnostics-color=always&quot;,
                &quot;-o&quot;,
                &quot;${fileDirname}/${fileBasenameNoExtension}&quot;,
                &quot;-g3&quot;,
                &quot;-pipe&quot;,
                &quot;-Wall&quot;,
                &quot;-D_DEBUG&quot;
            ],
            &quot;options&quot;: {
                &quot;cwd&quot;: &quot;${fileDirname}&quot;
            },
            &quot;problemMatcher&quot;: [
                &quot;$gcc&quot;
            ],
            &quot;group&quot;: &quot;build&quot;,
            &quot;detail&quot;: &quot;编译器: /usr/bin/g++&quot;
        },
    ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上配置文件基于linux，windows其实同理，运行就按ctrl+F5&lt;/p&gt;
</content:encoded></item><item><title>修复了老文章照片不显示问题</title><link>https://blog.aloys233.top/posts/%E4%BF%AE%E5%A4%8D%E4%BA%86%E8%80%81%E6%96%87%E7%AB%A0%E7%85%A7%E7%89%87%E4%B8%8D%E6%98%BE%E7%A4%BA%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E4%BF%AE%E5%A4%8D%E4%BA%86%E8%80%81%E6%96%87%E7%AB%A0%E7%85%A7%E7%89%87%E4%B8%8D%E6%98%BE%E7%A4%BA%E9%97%AE%E9%A2%98/</guid><description>记录修复博客老文章图片不显示问题的情况，以及部分图片无法恢复的说明。</description><pubDate>Fri, 08 Nov 2024 13:03:14 GMT</pubDate><content:encoded>&lt;p&gt;有部分图片找不到了，无法恢复&lt;/p&gt;
</content:encoded></item><item><title>节日快乐</title><link>https://blog.aloys233.top/posts/%E8%8A%82%E6%97%A5%E5%BF%AB%E4%B9%90/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%8A%82%E6%97%A5%E5%BF%AB%E4%B9%90/</guid><description>记录 1024 程序员节的简单祝福。</description><pubDate>Thu, 24 Oct 2024 01:48:06 GMT</pubDate><content:encoded>&lt;p&gt;1024,程序员节&lt;/p&gt;
&lt;p&gt;🎆🎆🎆&lt;/p&gt;
</content:encoded></item><item><title>emm别乱发评论</title><link>https://blog.aloys233.top/posts/emm%E5%88%AB%E4%B9%B1%E5%8F%91%E8%AF%84%E8%AE%BA/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/emm%E5%88%AB%E4%B9%B1%E5%8F%91%E8%AF%84%E8%AE%BA/</guid><description>记录博客评论区出现异常评论后的吐槽。</description><pubDate>Fri, 04 Oct 2024 04:10:06 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/96357c470c718cae5eb37d530e53afbf.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;有点离谱了，好久没看blog，结果都开始发这玩意了吗？&lt;/p&gt;
</content:encoded></item><item><title>OpenWrt通过Rclone开机自动挂载</title><link>https://blog.aloys233.top/posts/openwrt%E9%80%9A%E8%BF%87rclone%E5%BC%80%E6%9C%BA%E8%87%AA%E5%8A%A8%E6%8C%82%E8%BD%BD/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/openwrt%E9%80%9A%E8%BF%87rclone%E5%BC%80%E6%9C%BA%E8%87%AA%E5%8A%A8%E6%8C%82%E8%BD%BD/</guid><description>记录 OpenWrt 通过本地启动脚本调用 Rclone，实现开机自动挂载网盘目录的方法。</description><pubDate>Fri, 28 Jun 2024 07:23:52 GMT</pubDate><content:encoded>&lt;p&gt;本文默认读者已完成rclone配置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/cdf101717d4984c51fe05b11380f9efe.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;打开启动项，选择本地启动脚本&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/0b8a1f9ce14ecc51895b90da7fea68b2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;REMOTE=&apos;aliyunpan:/aliyunpan/Media&apos;
LOCAL=&apos;/home/aliyunpan&apos;
LOG_FILE=&quot;/var/log/rclone-mount.log&quot;
CONFIG=&apos;/root/.config/rclone/rclone.conf&apos;

rclone mount $REMOTE $LOCAL --config $CONFIG --allow-other --allow-non-empty --vfs-cache-mode writes --header &quot;Referer:https://www.aliyundrive.com/&quot; &amp;gt;&amp;gt; $LOG_FILE 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;修改：添加参数：--header &quot;Referer:https://www.aliyundrive.com/&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中REMOTE，LOCAL根据你自己情况修改。&lt;br /&gt;
保存设置，重启OpenWrt。&lt;br /&gt;
如果发现没有挂载完成，可以查看var/log/rclone-mount.log。&lt;/p&gt;
</content:encoded></item><item><title>迁站</title><link>https://blog.aloys233.top/posts/%E8%BF%81%E7%AB%99/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%BF%81%E7%AB%99/</guid><description>记录博客迁移到国内服务器并接入 CDN 后，网站访问速度提升的情况。</description><pubDate>Mon, 08 Jan 2024 04:25:00 GMT</pubDate><content:encoded>&lt;p&gt;前段时间把服务器迁到了国内，再配上国内cdn，现在网站速度变快了许多。&lt;br /&gt;
首页也弄好了aloys233.top。&lt;br /&gt;
后面有时间把自建的工具整理起来&lt;/p&gt;
</content:encoded></item><item><title>定位一个窗口是哪个软件产生的</title><link>https://blog.aloys233.top/posts/%E5%AE%9A%E4%BD%8D%E4%B8%80%E4%B8%AA%E7%AA%97%E5%8F%A3%E6%98%AF%E5%93%AA%E4%B8%AA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E7%94%9F%E7%9A%84/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E5%AE%9A%E4%BD%8D%E4%B8%80%E4%B8%AA%E7%AA%97%E5%8F%A3%E6%98%AF%E5%93%AA%E4%B8%AA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E7%94%9F%E7%9A%84/</guid><description>记录 Windows 下通过步骤记录器或火绒弹窗拦截定位弹窗来源软件的方法。</description><pubDate>Thu, 26 Oct 2023 01:43:00 GMT</pubDate><content:encoded>&lt;p&gt;在这里我就只直接讲方法，不讲原理。&lt;/p&gt;
&lt;h2&gt;方法一 不用安装任何软件（推荐）&lt;/h2&gt;
&lt;p&gt;方法一&lt;strong&gt;不用安装&lt;/strong&gt;任何软件即可实现定位窗口。&lt;br /&gt;
Win+R打开运行，输入psr.exe，回车。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/5457ef2c6314c47e4a7ddc47a5a640c1.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
点击右边【设置】，输出文件随便选个方便的地方，随便给个名字，点击【确定】。&lt;br /&gt;
然后点击开始记录，再随便点下那个窗口，然后打开你刚刚选的路径，打开保存的记录文件，找到记录的步骤，如下。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/d55f1c8b508c50cb3e8e1e46b33fe4d0.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
可以看到里面显示了弹窗这个程序的名称。&lt;br /&gt;
打开cmd，输入&lt;code&gt;wmic process where (Description=&quot;文件名.exe&quot;)&lt;/code&gt;,即可看到文件目录。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/623216b2ffa29b350ca33da9d44563be.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;方法二&lt;/h2&gt;
&lt;p&gt;安装火绒，打开安全工具-弹窗拦截&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/a8f34d11069ccd598219924f503bc2c0.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
点击截图拦截&lt;br /&gt;
选中窗口，即可看见软件名。&lt;br /&gt;
打开cmd，输入&lt;code&gt;wmic process where (Description=&quot;文件名.exe&quot;)&lt;/code&gt;,即可看到文件目录。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/623216b2ffa29b350ca33da9d44563be.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>桌面图标间隙变大解决方案</title><link>https://blog.aloys233.top/posts/%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E9%97%B4%E9%9A%99%E5%8F%98%E5%A4%A7%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E6%A1%8C%E9%9D%A2%E5%9B%BE%E6%A0%87%E9%97%B4%E9%9A%99%E5%8F%98%E5%A4%A7%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</guid><description>记录 Windows 桌面图标间隙异常变大时，通过注册表恢复 IconSpacing 的解决方法。</description><pubDate>Mon, 02 Oct 2023 14:10:00 GMT</pubDate><content:encoded>&lt;p&gt;原因分析：HDMI接了电视，多次调整分辨率导致。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/4dd0e571bd687260bb09404ee01a141b.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
打开注册表编辑器，找到&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HKEY CURRENT USERI/Control Panel/Desktop/WindowMetrics  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/53a6f3d0dba9731650266e7b82243e1b.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
将IconSpacing修改为-1125，IconVerticalSpacing也修改为-1125。&lt;br /&gt;
弄好后重启电脑就好。&lt;/p&gt;
</content:encoded></item><item><title>Ubuntu进不去桌面</title><link>https://blog.aloys233.top/posts/ubuntu%E8%BF%9B%E4%B8%8D%E5%8E%BB%E6%A1%8C%E9%9D%A2/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/ubuntu%E8%BF%9B%E4%B8%8D%E5%8E%BB%E6%A1%8C%E9%9D%A2/</guid><description>记录 Ubuntu 因显卡驱动问题无法进入桌面时，切换控制台并重装驱动的处理方法。</description><pubDate>Sat, 16 Sep 2023 05:05:00 GMT</pubDate><content:encoded>&lt;p&gt;前段时间，我以前用的电脑进不去桌面了，开机后黑屏，电脑为ubuntu。&lt;br /&gt;
如果你也遇到这种情况，请回忆下干了什么导致进不去桌面，我是因为切换独显驱动没成功，然后就重启，导致这种情况的。&lt;br /&gt;
开机完成后，按住Ctrl+Alt+F1(F1~F7分别是不同的模式，前6个为控制台模式)，输入用户名，密码。&lt;br /&gt;
注意：我这边按了以后大概过几秒就又黑屏，输密码一定要搞快。&lt;br /&gt;
然后直接删除显卡驱动，再更新显卡驱动，就行。&lt;/p&gt;
</content:encoded></item><item><title>html标签br和p所换行的区别</title><link>https://blog.aloys233.top/posts/html%E6%A0%87%E7%AD%BEbr%E5%92%8Cp%E6%89%80%E6%8D%A2%E8%A1%8C%E7%9A%84%E5%8C%BA%E5%88%AB/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/html%E6%A0%87%E7%AD%BEbr%E5%92%8Cp%E6%89%80%E6%8D%A2%E8%A1%8C%E7%9A%84%E5%8C%BA%E5%88%AB/</guid><description>说明 HTML 中 br 与 p 标签换行效果的区别，以及空行表现上的不同。</description><pubDate>Sat, 09 Sep 2023 11:39:24 GMT</pubDate><content:encoded>&lt;p&gt;在html中，&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;的作用是换行。而&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;为正文标签，特点有独占一行。&lt;br /&gt;
所以&lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;和&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;可以达成相似的换行效果。&lt;br /&gt;
它两区别就是一个中间有空行，一个没有&lt;br /&gt;
&lt;code&gt;&amp;lt;p&amp;gt;123&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;123&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;123&lt;/p&gt;
&lt;p&gt;123&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;p&amp;gt;456&amp;lt;br&amp;gt;456&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;456&lt;br /&gt;
456&lt;/p&gt;
</content:encoded></item><item><title>访问量增加了</title><link>https://blog.aloys233.top/posts/%E8%AE%BF%E9%97%AE%E9%87%8F%E5%A2%9E%E5%8A%A0%E4%BA%86/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%AE%BF%E9%97%AE%E9%87%8F%E5%A2%9E%E5%8A%A0%E4%BA%86/</guid><description>记录加入 Travellings 后博客访问量增长，以及对 Umami 统计数据变化的观察。</description><pubDate>Wed, 06 Sep 2023 06:54:10 GMT</pubDate><content:encoded>&lt;p&gt;加入travellings后，最近两个月访问量大增。&lt;br /&gt;
travellings是个好项目，至少让我这个新手站长创建的网站能获得更多曝光。&lt;br /&gt;
我的博客估计是没备案，文章数也不多，seo也没做好，百度根本不收录，只有google，bing等收录。&lt;br /&gt;
题外话：我感觉是不是我把统计换成了自建umami，导致数据变多了。&lt;br /&gt;
因为谷歌分析很多（应该是绝大部分）广告屏蔽器直接拦截了。&lt;br /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/c8715cdb5ebed08a43937324b152497c.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>所以这个成就是干啥的？</title><link>https://blog.aloys233.top/posts/%E6%89%80%E4%BB%A5%E8%BF%99%E4%B8%AA%E6%88%90%E5%B0%B1%E6%98%AF%E5%B9%B2%E5%95%A5%E7%9A%84/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E6%89%80%E4%BB%A5%E8%BF%99%E4%B8%AA%E6%88%90%E5%B0%B1%E6%98%AF%E5%B9%B2%E5%95%A5%E7%9A%84/</guid><description>记录一个成就截图和对成就用途的简单疑问。</description><pubDate>Thu, 31 Aug 2023 13:40:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c120e384ab00501ee4c108c68929d00f.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>四川征集志愿网站缺点分析</title><link>https://blog.aloys233.top/posts/%E5%9B%9B%E5%B7%9D%E5%BE%81%E9%9B%86%E5%BF%97%E6%84%BF%E7%BD%91%E7%AB%99%E7%BC%BA%E7%82%B9%E5%88%86%E6%9E%90/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E5%9B%9B%E5%B7%9D%E5%BE%81%E9%9B%86%E5%BF%97%E6%84%BF%E7%BD%91%E7%AB%99%E7%BC%BA%E7%82%B9%E5%88%86%E6%9E%90/</guid><description>记录四川征集志愿网站对 Linux 用户代理识别不友好的问题，以及通过修改 UA 绕过限制的方法。</description><pubDate>Sat, 22 Jul 2023 10:11:17 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;大佬勿喷&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys233.tk/pic/7a9436c57b65fb6faf00e9d288e4473b.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
源代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var browser = {
                versions: function () {
                    var u = navigator.userAgent, app = navigator.appVersion;
                    return {
                        trident: u.indexOf(&apos;Trident&apos;) &amp;gt; -1, //IE内核                
                        presto: u.indexOf(&apos;Presto&apos;) &amp;gt; -1, //opera内核                
                        webKit: u.indexOf(&apos;AppleWebKit&apos;) &amp;gt; -1, //苹果、谷歌内核                
                        chrome: u.indexOf(&apos;Chrome&apos;) &amp;gt; -1, //谷歌浏览器
                        gecko: u.indexOf(&apos;Gecko&apos;) &amp;gt; -1 &amp;amp;&amp;amp; u.indexOf(&apos;KHTML&apos;) == -1, //火狐内核                
                        mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端                
                        ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端                
                        android: u.indexOf(&apos;Android&apos;) &amp;gt; -1 || u.indexOf(&apos;Linux&apos;) &amp;gt; -1, //android终端或者uc浏览器                
                        iPhone: u.indexOf(&apos;iPhone&apos;) &amp;gt; -1 || u.indexOf(&apos;Mac&apos;) &amp;gt; -1, //是否为iPhone或者QQHD浏览器                
                        iPad: u.indexOf(&apos;iPad&apos;) &amp;gt; -1, //是否iPad                
                        webApp: u.indexOf(&apos;Safari&apos;) == -1 //是否web应该程序，没有头部与底部            
                    };
                } ()
            }
            if (((browser.versions.mobile &amp;amp;&amp;amp; !browser.versions.chrome) || browser.versions.ios || browser.versions.android || browser.versions.iPhone || browser.versions.iPad)) {
                alert(&quot;请勿使用手机登录志愿系统！&quot;);
                return false;
            }
            if ($(&quot;.login-from input[pass=&apos;0&apos;]&quot;).length &amp;gt; 0) {
                $(&quot;.login-from input[pass=&apos;0&apos;]&quot;)[0].focus();
                return false;
            }
            $(&quot;form&quot;).submit();
            return false;
        });
    });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显然他没有包含linux，也许他为了方便直接将手机当成了linux，但我为linux设备，这就很不爽&lt;br /&gt;
我的UA：&lt;code&gt;User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36&lt;/code&gt;&lt;br /&gt;
将UA换成windows的就行&lt;br /&gt;
比如：&lt;code&gt;Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)&lt;/code&gt;&lt;/p&gt;
</content:encoded></item><item><title>kindle app登录美区账号</title><link>https://blog.aloys233.top/posts/kindle-app%E7%99%BB%E5%BD%95%E7%BE%8E%E5%8C%BA%E8%B4%A6%E5%8F%B7/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/kindle-app%E7%99%BB%E5%BD%95%E7%BE%8E%E5%8C%BA%E8%B4%A6%E5%8F%B7/</guid><description>记录 Kindle App 在中国登录美区账号时，通过临时切换系统语言完成登录的方法。</description><pubDate>Sat, 22 Jul 2023 09:33:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;此方法也适用于在中国登录其他地区账号&lt;/p&gt;
&lt;h1&gt;方法&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;打开手机设置，将语言改为英语&lt;/li&gt;
&lt;li&gt;下载安装国际版kindle&lt;/li&gt;
&lt;li&gt;登录账号&lt;/li&gt;
&lt;li&gt;手机设置改回中文&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>ChatGPT|中国大陆访问|套壳站|白嫖</title><link>https://blog.aloys233.top/posts/chatgpt%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E8%AE%BF%E9%97%AE%E5%A5%97%E5%A3%B3%E7%AB%99%E7%99%BD%E5%AB%96/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/chatgpt%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E8%AE%BF%E9%97%AE%E5%A5%97%E5%A3%B3%E7%AB%99%E7%99%BD%E5%AB%96/</guid><description>整理中国大陆访问 ChatGPT 的部分套壳站点、使用特点、Prompt 资料和注意事项。</description><pubDate>Wed, 08 Mar 2023 04:21:00 GMT</pubDate><content:encoded>&lt;h2&gt;一、前言&lt;/h2&gt;
&lt;p&gt;最近ChatGPT非常火，但由于某种原因，中国大陆地区无法使用它。鉴于次，许多网友利用前段时间OpenAI开放的GPT-3.5API套壳，整了些网站，以便直接使用。&lt;/p&gt;
&lt;h2&gt;二、特点&lt;/h2&gt;
&lt;p&gt;1、无需登录&lt;/p&gt;
&lt;p&gt;2、即开即用&lt;/p&gt;
&lt;p&gt;3、无需代理（大部分）有可能被墙&lt;/p&gt;
&lt;h2&gt;三、目前收集到的网址&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/xx025/carrot&quot;&gt;https://github.com/xx025/carrot&lt;/a&gt;（ChatGPT集合）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://freegpt.one&quot;&gt;https://freegpt.one&lt;/a&gt;（DNS污染）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fastgpt.app&quot;&gt;https://fastgpt.app&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chat.ninvfeng.xyz&quot;&gt;https://chat.ninvfeng.xyz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chatgpt.ddiu.me&quot;&gt;https://chatgpt.ddiu.me&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.chat2ai.cn&quot;&gt;https://www.chat2ai.cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chat.cydiar.com&quot;&gt;https://chat.cydiar.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chat.theb.ai&quot;&gt;https://chat.theb.ai&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://freegpt.cc&quot;&gt;&lt;s&gt;https://freegpt.cc&lt;/s&gt;&lt;/a&gt;（无|API）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://94gpt.com&quot;&gt;https://94gpt.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ai.ls&quot;&gt;https://ai.ls&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://desk.im&quot;&gt;https://desk.im&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ai.ci&quot;&gt;https://ai.ci&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hotoke.ai/&quot;&gt;https://hotoke.ai&lt;/a&gt;（佛祖AI）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chat.geekr.cool/&quot;&gt;https://chat.geekr.cool&lt;/a&gt;（支持语音）&lt;/p&gt;
&lt;h2&gt;四、GPT食用&amp;amp;调教教程：&lt;/h2&gt;
&lt;p&gt;1、中文资料&amp;amp;网站&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/PlexPt/awesome-chatgpt-prompts-zh&quot;&gt;《中文版的调教指南》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/DeepTecher/awesome-ChatGPT-resource-zh&quot;&gt;《一份中文&lt;strong&gt;ChatGPT&lt;/strong&gt;精选资源清单》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.explainthis.io/zh-hans/chatgpt&quot;&gt;《&lt;strong&gt;ChatGPT&lt;/strong&gt;指令大全，提供了一些精炼过的提示语模板，只要输入关键词就行了》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://newzone.top/chatgpt/?tags=text&amp;amp;tags=interpreter&amp;amp;tags=games&quot;&gt;《&lt;strong&gt;ChatGPT Shortcut -&lt;strong&gt;简单易用的&lt;/strong&gt;ChatGPT&lt;/strong&gt;快捷指令表，按类别整理了模板&lt;strong&gt;Prompts&lt;/strong&gt;》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2、英文资料&amp;amp;网站&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/f/awesome-chatgpt-prompts&quot;&gt;《英文版的调教指南》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://platform.openai.com/examples/&quot;&gt;《&lt;strong&gt;ChatGPT API&lt;/strong&gt;，&lt;strong&gt;chatgpt&lt;/strong&gt;官方提供的一些例子，是英文的》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://quickref.me/chatgpt&quot;&gt;《&lt;strong&gt;ChatGPT Cheat Sheet &amp;amp; Quick Reference&lt;/strong&gt;，收集了一些&lt;strong&gt;prompt&lt;/strong&gt;例子》&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;五、注意⚠️&lt;/h2&gt;
&lt;p&gt;所有套壳网站随时可能崩溃，或API受限，如遇到加载缓慢或无法加载，请切换网站。&lt;/p&gt;
&lt;h2&gt;六、引用&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/921458&quot;&gt;https://www.v2ex.com/t/921458&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/921379&quot;&gt;https://www.v2ex.com/t/921379&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/921724&quot;&gt;https://www.v2ex.com/t/921724&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/921435&quot;&gt;https://www.v2ex.com/t/921435&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/920489&quot;&gt;https://www.v2ex.com/t/920489&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.v2ex.com/t/920686&quot;&gt;https://www.v2ex.com/t/920686&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有部分网站没找到出处。&lt;/p&gt;
</content:encoded></item><item><title>铜梁——安居古城</title><link>https://blog.aloys233.top/posts/%E9%93%9C%E6%A2%81%E5%AE%89%E5%B1%85%E5%8F%A4%E5%9F%8E/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E9%93%9C%E6%A2%81%E5%AE%89%E5%B1%85%E5%8F%A4%E5%9F%8E/</guid><description>介绍重庆铜梁安居古城的历史背景、区位特色、自然风光和古镇照片。</description><pubDate>Thu, 02 Feb 2023 04:19:00 GMT</pubDate><content:encoded>&lt;p&gt;安居古城，是铜梁区同时拥有中国历史文化名镇、&lt;strong&gt;国家发展改革试点城镇&lt;/strong&gt;和&lt;strong&gt;重庆市（省）级中心镇&lt;/strong&gt;3张名片的特色古镇。既有别具特色错落有致的古镇建筑（传统街区），又有遍布古镇精湛的历史遗迹（九宫十八庙，历代名人手迹）；既有风光绮丽的山水美景（特色生态农业），又有独具韵味的传统风情（龙舟竞渡，民间彩扎，名特小吃）。&lt;/p&gt;
&lt;p&gt;安居古城地处长江上游地区，在重庆铜梁区城西北部17公里处，距重庆主城九区66公里，曾于隋、唐、明朝时期建县，是一座集独特区位优势、悠久文化底蕴、丰富文物古迹、优美自然风光于一体的千年古城。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/f09d30f22135953e211019f0c2069705.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8645daebc865275fd221af3a0c8b3c4e.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/1fa36f5b8a7bf4355b181629ed52cecf.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2e6f120aeda0e80e0c65ad436298e89b.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/2c3f14b3eefbeb602bfc21a187c6e176.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/bc075914893fddf7ed07c217cd8eb1a2.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/ef7ad2571ff4a016e78ee1db225f65c8.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/de1222d983f66da51587e82c12249fdb.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/d1d8f8a04dca6f0cefd063c5304696ad.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/1c437b8313ffa8604816c1e1cd29abf4.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/77a11f5ad69d4be4501dbb830cc8d0d5.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/5da6f067aab819c5d1c17d3d7309cb30.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8e7dda8db1b0cb3bf70bb668961de75b.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/858b7b60dcad11cbdf814979804861cc.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>免费好用听歌软件——洛雪音乐助手|lx-music</title><link>https://blog.aloys233.top/posts/%E5%85%8D%E8%B4%B9%E5%A5%BD%E7%94%A8%E5%90%AC%E6%AD%8C%E8%BD%AF%E4%BB%B6%E6%B4%9B%E9%9B%AA%E9%9F%B3%E4%B9%90%E5%8A%A9%E6%89%8Blx-music/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E5%85%8D%E8%B4%B9%E5%A5%BD%E7%94%A8%E5%90%AC%E6%AD%8C%E8%BD%AF%E4%BB%B6%E6%B4%9B%E9%9B%AA%E9%9F%B3%E4%B9%90%E5%8A%A9%E6%89%8Blx-music/</guid><description>介绍开源音乐软件洛雪音乐助手 lx-music 的特点、支持平台和下载地址。</description><pubDate>Wed, 18 Jan 2023 11:46:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;最近逛github又又又发现了新大陆。。&lt;/p&gt;
&lt;p&gt;一个基于Electron + Vue开发的音乐软件，洛雪音乐助手。&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a href=&quot;https://github.com/lyswhut/lx-music-desktop&quot;&gt;https://github.com/lyswhut/lx-music-desktop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/lyswhut/lx-music-mobile&quot;&gt;https://github.com/lyswhut/lx-music-mobile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;官方网站：&lt;a href=&quot;https://lxmusic.toside.cn/&quot;&gt;https://lxmusic.toside.cn&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;优点&lt;/h2&gt;
&lt;h3&gt;免费且无广告&lt;/h3&gt;
&lt;p&gt;此项目开发的初衷仅是为了对新技术的学习与研究，因此软件直至停止维护都将会一直保持纯净&lt;/p&gt;
&lt;h3&gt;多端支持&lt;/h3&gt;
&lt;p&gt;本项目支持在&lt;strong&gt;Windows&lt;/strong&gt;、&lt;strong&gt;Mac OS&lt;/strong&gt;、&lt;strong&gt;Linux&lt;/strong&gt;、&lt;strong&gt;Android&lt;/strong&gt;平台上运行。注：不计划支持IOS&lt;/p&gt;
&lt;h3&gt;开源&lt;/h3&gt;
&lt;p&gt;本项目开源发布于 GitHub 面向全世界人用作对技术的学习交流使用&lt;/p&gt;
&lt;p&gt;下载地址：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/lyswhut/lx-music-desktop/releases&quot;&gt;https://github.com/lyswhut/lx-music-desktop/releases&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;实测&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8a0eb0689a2215883c0625cf7dec490e.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/788a8632a34b1fe46506131057bb9d32.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/f9813703ec3f05e2a1afb27f5e6f7f8f.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/7d85348ed4d81c8af710c5a1c3875f1d.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c7c0a5ce4085671d61ceb753f31c6d2b.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/548cff7c65db1c1741114376711f1dc4.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>利用Github和Cloudflare搭建免费图床|CDN</title><link>https://blog.aloys233.top/posts/%E5%88%A9%E7%94%A8github%E5%92%8Ccloudflare%E6%90%AD%E5%BB%BA%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8Acdn/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E5%88%A9%E7%94%A8github%E5%92%8Ccloudflare%E6%90%AD%E5%BB%BA%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8Acdn/</guid><description>记录使用 GitHub Pages 和 Cloudflare 搭建免费图床 CDN 的配置流程和注意事项。</description><pubDate>Sat, 01 Oct 2022 11:37:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;受到国内网络环境的影响，我使用的图床jsdelivr、sm.ms先后出现问题，便打算自建个图床，但又不想花钱，于是便有了这篇教程。&lt;/p&gt;
&lt;h2&gt;教程&lt;/h2&gt;
&lt;h3&gt;1、在Github新建一个仓库&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/0d1ca37ed02a2ccc0ed8b9a576ababe7.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/e5fe7f17f6c769afb5e254330bfd8447.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;2、准备个域名，托管到Cloudflare&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/c3dd3968dfb81dfcaba75d4ec2a52e46.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;3、配置dns&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/eb335e9345aa51256a6375b2c4975a51.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;类型选择CNAME，目标格式：[你的用户名.github.io]&lt;/p&gt;
&lt;p&gt;注意：需要将代理状态改为已代理&lt;/p&gt;
&lt;h3&gt;4、配置Github Page&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/8ff6a08edd574bc4ef1bf04bf77da224.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/9c4f8c9085bb87f57e8f80148629d918.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/c830c148bc024a88c73b248428a4ecda.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;5、配置自定义域名&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/86d691a48955a97a26ccf58116d21eef.webp&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://static.aloys23.link/pic/8388f56b746ac6ca4cda1ca941e01789.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;6、成功&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/426b760b4df34686d2a2d56ecad02595.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;7、速度测试&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/9ebd98af7854905dac8f48ef749a8f92.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;8、后记&lt;/h3&gt;
&lt;p&gt;因为着本质上就是静态网页，所以还可以加速其他文件。&lt;/p&gt;
&lt;p&gt;没试过大文件传输，不确定会不会被认为滥用。&lt;/p&gt;
&lt;p&gt;可以使用&lt;a href=&quot;https://github.com/243286065/PictureGithubTool&quot;&gt;https://github.com/243286065/PictureGithubTool&lt;/a&gt;方便上传图片&lt;/p&gt;
</content:encoded></item><item><title>HSTS的必要性及如何加入HSTS Preload List</title><link>https://blog.aloys233.top/posts/hsts%E7%9A%84%E5%BF%85%E8%A6%81%E6%80%A7%E5%8F%8A%E5%A6%82%E4%BD%95%E5%8A%A0%E5%85%A5hsts-preload-list/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/hsts%E7%9A%84%E5%BF%85%E8%A6%81%E6%80%A7%E5%8F%8A%E5%A6%82%E4%BD%95%E5%8A%A0%E5%85%A5hsts-preload-list/</guid><description>介绍 HSTS 的作用、安全意义，以及加入 HSTS Preload List 需要满足的配置要求。</description><pubDate>Sun, 14 Aug 2022 10:53:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/3afa25085e250a7fd993898daa2b084f.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;HSTS是什么&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;HTTP严格传输安全&lt;/strong&gt;（英语：&lt;strong&gt;H&lt;/strong&gt;TTP &lt;strong&gt;S&lt;/strong&gt;trict &lt;strong&gt;T&lt;/strong&gt;ransport &lt;strong&gt;S&lt;/strong&gt;ecurity，缩写：&lt;strong&gt;HSTS&lt;/strong&gt;）是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略，来让浏览器强制使用HTTPS与网站进行通信，以减少会话劫持风险。&lt;/p&gt;
&lt;p&gt;HSTS的作用是强制客户端（如浏览器）使用HTTPS与服务器创建连接。服务器开启HSTS的方法是，当客户端通过HTTPS发出请求时，在服务器返回的超文本传输协议（HTTP）响应头中包含&lt;code&gt;Strict-Transport-Security&lt;/code&gt;字段。非加密传输时设置的HSTS字段无效。&lt;/p&gt;
&lt;h2&gt;作用&lt;/h2&gt;
&lt;p&gt;HSTS可以用来抵御SSL剥离攻击，因为只要浏览器曾经与服务器创建过一次安全连接，之后浏览器会强制使用HTTPS，即使链接被换成了HTTP。&lt;/p&gt;
&lt;p&gt;另外，如果中间人使用自己的自签名证书来进行攻击，浏览器会给出警告，但是许多用户会忽略警告。HSTS解决了这一问题，一旦服务器发送了HSTS字段，将不再允许用户忽略警告。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/ddf4c98fac23f2e44dfa944acb4f85cb.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;提交要求&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;提供有效的&lt;strong&gt;证书&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果您正在侦听端口 80，则在同一主机上从 HTTP&lt;strong&gt;重定向到 HTTPS。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;通过 HTTPS 为所有&lt;strong&gt;子域提供服务。&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;特别是www，如果该子域的 DNS 记录存在，您必须支持该子域的 HTTPS 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在基域上为 HTTPS 请求 提供&lt;strong&gt;HSTS 标头：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;max-age&lt;/code&gt;必须至少为&lt;code&gt;31536000&lt;/code&gt;秒（1 年）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;includeSubDomains&lt;/code&gt;必须指定指令。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preload&lt;/code&gt;必须指定指令。&lt;/li&gt;
&lt;li&gt;如果您从 HTTPS 站点提供额外的重定向，则该重定向必须仍然具有 HSTS 标头（而不是它重定向到的页面）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以下是有效 HSTS 标头的示例：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;Strict-Transport-Security:max-age=63072000; includeSubDomains; preload
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;持续要求&lt;/h2&gt;
&lt;p&gt;您必须确保您的网站始终满足提交要求。请注意，&lt;code&gt;preload&lt;/code&gt;从您的标头中删除该指令将使您的网站立即符合&lt;a href=&quot;https://hstspreload.org/removal/&quot;&gt;删除表格&lt;/a&gt;的条件，并且该网站将来可能会因未能满足要求而被自动删除。&lt;/p&gt;
&lt;p&gt;特别是，上述要求适用于&lt;strong&gt;2017 年 10 月 11 日&lt;/strong&gt;&lt;code&gt;hstspreload.org&lt;/code&gt;或之后提交的所有域（即在 Chrome 63 之后预加载）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;相同的要求适用于2016 年 2 月 29 日&lt;/strong&gt; 或之后提交的早期域（即在 Chrome 50 之后预加载），但这些域所需的 max-age 仅为&lt;code&gt;10886400&lt;/code&gt;几秒。&lt;/p&gt;
</content:encoded></item><item><title>Bing壁纸接口|壁纸api</title><link>https://blog.aloys233.top/posts/bing%E5%A3%81%E7%BA%B8%E6%8E%A5%E5%8F%A3%E5%A3%81%E7%BA%B8api/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/bing%E5%A3%81%E7%BA%B8%E6%8E%A5%E5%8F%A3%E5%A3%81%E7%BA%B8api/</guid><description>整理几个可直接调用的 Bing 每日壁纸接口和壁纸 API 地址。</description><pubDate>Tue, 31 May 2022 01:43:29 GMT</pubDate><content:encoded>&lt;h2&gt;缙哥哥博客&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://api.dujin.org/bing/1366.php&quot;&gt;https://api.dujin.org/bing/1366.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.dujin.org/bing/1920.php&quot;&gt;https://api.dujin.org/bing/1920.php&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;杨尚臻&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.yangshangzhen.com/bing/wallpaper&quot;&gt;https://www.yangshangzhen.com/bing/wallpaper&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;热铁盒&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.retiehe.com/backend/bing/1080p&quot;&gt;https://www.retiehe.com/backend/bing/1080p&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>菜谱推荐-程序员做饭指南</title><link>https://blog.aloys233.top/posts/%E8%8F%9C%E8%B0%B1%E6%8E%A8%E8%8D%90-%E7%A8%8B%E5%BA%8F%E5%91%98%E5%81%9A%E9%A5%AD%E6%8C%87%E5%8D%97/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E8%8F%9C%E8%B0%B1%E6%8E%A8%E8%8D%90-%E7%A8%8B%E5%BA%8F%E5%91%98%E5%81%9A%E9%A5%AD%E6%8C%87%E5%8D%97/</guid><description>推荐 GitHub 开源项目“程序员做饭指南”，介绍其清晰、可协作的菜谱特点。</description><pubDate>Mon, 23 May 2022 02:00:58 GMT</pubDate><content:encoded>&lt;p&gt;最近在github上发现了个菜谱，非常适合我这样的人..&lt;/p&gt;
&lt;p&gt;条例清晰，不会出现模糊词语。&lt;/p&gt;
&lt;p&gt;每个人都可以提交自己的看法，相互讨论学习。&lt;/p&gt;
&lt;p&gt;github项目地址：&lt;a href=&quot;https://github.com/Anduin2017/HowToCook&quot;&gt;https://github.com/Anduin2017/HowToCook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;官方网站：&lt;a href=&quot;https://cook.aiurs.co/&quot;&gt;https://cook.aiurs.co/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/b2969fcce6f4f8d798e7e51b37203756.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/89c4f4856dd21c28b1d05c20f20647ab.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/fe919ae1f1b7ce7db9cc9e51fa09b823.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://static.aloys23.link/pic/9a798c5120a23ffe4dbaf4d4a5ff9851.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Ubuntu关于软件常用命令</title><link>https://blog.aloys233.top/posts/ubuntu%E5%85%B3%E4%BA%8E%E8%BD%AF%E4%BB%B6%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/ubuntu%E5%85%B3%E4%BA%8E%E8%BD%AF%E4%BB%B6%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid><description>整理 Ubuntu 中查看、安装和卸载 apt、deb、snap 软件包的常用命令。</description><pubDate>Thu, 19 May 2022 02:05:11 GMT</pubDate><content:encoded>&lt;p&gt;获取已安装软件包的列表(不含snap)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt list --installed
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取安装的snap包列表&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;snap list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装软件(在线)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install 「包名」
sudo apt-get install 「包名」
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装软件(软件包,deb)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg -i 软件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装软件(snap)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo snap install 软件
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;卸载软件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt remove 「包名」
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;卸载软件(软件包,deb)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg -r 软件
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>关于电脑的常见误区</title><link>https://blog.aloys233.top/posts/%E5%85%B3%E4%BA%8E%E7%94%B5%E8%84%91%E7%9A%84%E5%B8%B8%E8%A7%81%E8%AF%AF%E5%8C%BA/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/%E5%85%B3%E4%BA%8E%E7%94%B5%E8%84%91%E7%9A%84%E5%B8%B8%E8%A7%81%E8%AF%AF%E5%8C%BA/</guid><description>整理关于电脑使用的常见误区，包括疯狂刷新、重装系统、磁盘碎片和电脑病毒等话题。</description><pubDate>Wed, 28 Apr 2021 03:57:50 GMT</pubDate><content:encoded>&lt;h1&gt;疯狂刷新&lt;/h1&gt;
&lt;p&gt;相信很多人跟我以前一样，一进入Windows桌面，就开始疯狂的刷新。否则不过瘾。其实很多从Dos，Win3.2走过来的人都知道，最早的 Windows打开一个资源管理器窗口，显示的内容就是打开的一刹那，该目录中有的文件。假设你现在用记事本在该目录保存一个txt，在资源管理器中是看不到的，必须手动刷新。这也就是「刷新」功能的由来。之所以XP以及Vista、 Win7可以看到，只是因为他们是定时自动刷新而已。只不过疯狂刷新这个小动作被很多电脑新手学会了，认为是高手必备动作。&lt;/p&gt;
&lt;p&gt;Linux的Gnome和 KDE以及MacOS都不用刷新，也无法刷新，无论开了什么类似资源管理器的工具浏览本地目录，无论用什么软件在该目录创建或者删除了文件，就会实时显示出来，而无需刷新。也许喷子会说：实时刷新，更浪费系统资源。其实错了，这不是实时刷新，而是文件系统回调了资源管理器(类似的工具，如Mac的 Finder)的回调函数，这在软件开发行业称之为「观察者模式」，我想学过设计模式的Coder都懂吧?先进就是先进，没什么可争论的。&lt;/p&gt;
&lt;h1&gt;重装系统对电脑损耗极大&lt;/h1&gt;
&lt;p&gt;重装系统的损耗和玩游戏等操作相比，更多的损耗在于对硬盘的重新擦写。但是，对于整个磁盘寿命来讲，并不必太过担心。而且，重装系统需要备份重要数据、重新安装软件、重新对系统进行个性化设置，简直太麻烦，没有几个人愿意频繁重装吧。&lt;/p&gt;
&lt;h1&gt;文件碎片应及时清理&lt;/h1&gt;
&lt;p&gt;搭配机械硬盘的电脑需要定时进行碎片整理，不然会越用越卡。但是，和机械硬盘不同，固态硬盘内数据的物理地址是在不停变化的，进行碎片整理会导致无谓的擦写，从而损耗闪存的寿命。因此，对于固态+机械硬盘搭配使用的机台，建议系统、缓存和数据文件存放在固态硬盘上，电影、音乐等文档存放在机械硬盘上。&lt;/p&gt;
&lt;h1&gt;经常关机对电脑不好&lt;/h1&gt;
&lt;p&gt;正常关机的情况下不存在这样的说法，不过刚关机后建议过一会会再开机（或者您直接用重启功能好不好）。至于长按电源键强制关机，应当尽量避免。当然，蓝屏、死机状态下的强制关机（我想说都死机了还在乎什么强不强制呢…），一是迫于无奈，二是此时电脑也不在工作状态了，影响并不大。&lt;/p&gt;
&lt;h1&gt;苹果电脑不会中毒&lt;/h1&gt;
&lt;p&gt;其实只要是操作系统都有中毒的可能，不管是windows还是macOS或者Linux。之所以我们很少见到macOS中毒，一者是因为用户基数少，二者苹果软件安装认证严格，针对macOS病毒较少。&lt;/p&gt;
</content:encoded></item><item><title>WP解决国内进入后台慢的最有效方法—WP-China-Yes插件</title><link>https://blog.aloys233.top/posts/wp%E8%A7%A3%E5%86%B3%E5%9B%BD%E5%86%85%E8%BF%9B%E5%85%A5%E5%90%8E%E5%8F%B0%E6%85%A2%E7%9A%84%E6%9C%80%E6%9C%89%E6%95%88%E6%96%B9%E6%B3%95wp-china-yes%E6%8F%92%E4%BB%B6/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/wp%E8%A7%A3%E5%86%B3%E5%9B%BD%E5%86%85%E8%BF%9B%E5%85%A5%E5%90%8E%E5%8F%B0%E6%85%A2%E7%9A%84%E6%9C%80%E6%9C%89%E6%95%88%E6%96%B9%E6%B3%95wp-china-yes%E6%8F%92%E4%BB%B6/</guid><description>介绍 WP-China-Yes 插件的由来、功能和用于改善国内访问 WordPress 后台速度的方式。</description><pubDate>Tue, 20 Apr 2021 08:16:35 GMT</pubDate><content:encoded>&lt;h2&gt;插件由来&lt;/h2&gt;
&lt;p&gt;之所以要做这一块的工作是因为wordpress.org网络慢、参与门槛高、机制不适宜国内大环境以及社区中充斥着台独、美左份子对大陆华人的排斥。&lt;/p&gt;
&lt;p&gt;截至2020年8月12日，简体中文用户只占全部WordPress用户的2.1%，不能指望得到wordpress.org足够的重视，就好像之前一个429问题就持续了半年之久一样。&lt;/p&gt;
&lt;p&gt;正是基于上述这些原因，所以我希望能建立一个由中国人主导的社区生态，采用一些激进的以及贴近国情的措施来刺激生态繁荣，例如：引入AI负担主要的翻译工作；应用市场允许上架闭源、付费应用等等众多改革措施。&lt;/p&gt;
&lt;p&gt;我承认这个想法是有些疯狂的，推进过程中会面临来自诸多方面的诸多困难，无论是技术还是宣传还是方案制定还是社区组织都存在很多困难。&lt;/p&gt;
&lt;p&gt;不过，好在我是个纯粹的理想主义者，我并不指望这个项目能盈利，更多的是期待着通过这样一个项目进行学习与积累。或者说，其实我是把这当作一个好玩儿的模拟经营类游戏来推进的。&lt;/p&gt;
&lt;h2&gt;目前的成果&lt;/h2&gt;
&lt;p&gt;1、对官方应用市场、Gravatar头像、谷歌字体等资源进行了国内的反代加速&lt;/p&gt;
&lt;p&gt;2、本土翻译平台（&lt;a href=&quot;https://translate.wp-china.org&quot;&gt;https://translate.wp-china.org&lt;/a&gt;）已上线，该平台对标WordPress官方翻译平台（&lt;a href=&quot;https://translate.wordpress.org&quot;&gt;https://translate.wordpress.org&lt;/a&gt;），配合WP-China-Yes插件，可以提供与官方翻译平台一致的自动化体验， 主要改进在于首次采用AI作为首要翻译手段，之所以能这样干是因为我基于Google翻译开发了针对中文i18n翻译的预处理及后期处理算法，最终的翻译效果应该说是吊打PoEdit Pro软件带的机翻——无需人工二次处理即符合i18n规范，可以被WordPress直接读取。&lt;/p&gt;
&lt;p&gt;目前主要的困难是对于词汇、短语这些因为没有上下文语境，经常会被翻译错误，这些需要人工参与校准。也欢迎你参与到翻译校准的工作^_^&lt;/p&gt;
&lt;p&gt;另外受限于服务器资源，我暂时无法实现对整个官方仓库进行监听与翻译，目前只是国内有人使用的包才会被本土翻译平台所监听，对于新安装的包则不超过24小时就会被监听到。&lt;/p&gt;
&lt;p&gt;3、除了对官方应用市场反代外，我还开发了一个本土版本的应用市场，该应用市场目前与官方的主要区别就是与本土翻译平台进行了整合，可以无缝为大家推送来自本土翻译平台的翻译包。&lt;/p&gt;
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;自2020年4月15日起，已无法通过官方应用市场安装WP-China-Yes插件，详情见：&lt;a href=&quot;https://wp-china.org/archives/912.html&quot;&gt;公告&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载链接：&lt;a href=&quot;https://a1.wp-china-yes.net/apps/wp-china-yes.zip&quot;&gt;https://a1.wp-china-yes.net/apps/wp-china-yes.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;官方网址：&lt;a href=&quot;https://wp-china.org/&quot;&gt;https://wp-china.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a href=&quot;https://github.com/sunxiyuan/wp-china-yes&quot;&gt;https://github.com/sunxiyuan/wp-china-yes&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>IObit Advanced SystemCare 14 Pro 14.3.0.240专业便携版</title><link>https://blog.aloys233.top/posts/iobit-advanced-systemcare-14-pro-1430240%E4%B8%93%E4%B8%9A%E4%BE%BF%E6%90%BA%E7%89%88/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/iobit-advanced-systemcare-14-pro-1430240%E4%B8%93%E4%B8%9A%E4%BE%BF%E6%90%BA%E7%89%88/</guid><description>介绍 IObit Advanced SystemCare 14 Pro 便携版的系统清理、优化、安全防护功能和更新内容。</description><pubDate>Tue, 13 Apr 2021 08:12:15 GMT</pubDate><content:encoded>&lt;h2&gt;软件简介：&lt;/h2&gt;
&lt;p&gt;IObit Advanced SystemCare是一款系统清理维护与安全防护软件，大幅提升整体系统性能和安全！一键AI智能模式，全面扫描优化修复系统，拥有性能加速模式、系统优化、网络加速、启动项优化、软件更新、实时监视清理、隐私安全保护等功能，可以防病毒及间谍软件，浏览器跟踪保护隐私，保护电脑免受病毒攻击。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/asc9-600x400.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/advanced1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/advanced2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/advanced3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/advanced4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/Aloys233/579images@main/img/advanced5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Advanced SystemCare 除了提供一键维护和加速优化功能，还集成了一个万能【工具箱】。包括安全修复、系统优化和系统清理三个分类，与 IObit 自家其他产品组合超过20多款小工具。更难得的是，这些小工具都可以免费使用。&lt;br /&gt;
如：IObit Uninstaller、系统修复、启动项管理、注册表清理、Driver Booster、PCtransfer、内存整理、磁盘清理、Smart Defrag、磁盘医生、网络加速、大文件查看器、文件恢复、自动关机、空文件夹扫描、文件粉碎、程序优化、快捷方式修复：&lt;br /&gt;
1）系统修复。Windows 常见的系统错误，往往是由于错误的操作或配置造成的，手动修复需要耗费很长的时间去检查。而 Advanced SystemCare 系统修复工具则能扫描检测、修复这些问题。&lt;br /&gt;
2）网络加速。通过 TPC 优化和调整浏览器内部参数，使浏览器在更适合您网络状况的条件下，获得更快的网页浏览速度和响应速度。&lt;br /&gt;
3）重复文件查找。查找电脑内名字相同或内容相同的文件，提供三种比较算法：文件名称&amp;amp;文件大小、MD5、Byte-to-Byte。选择第一种查找速度会比较快，而选择后两种算法有更精确的扫描结果。如果您在电脑内经常有一个文件的多个副本，那么重复文件查找就可以帮您一键找出电脑内的那些文件副本，绝对是整理文件、清理硬盘空间的一大利器。&lt;/p&gt;
&lt;p&gt;提示：「工具箱」需要梯子才能下载。&lt;/p&gt;
&lt;h2&gt;更新说明：&lt;/h2&gt;
&lt;p&gt;v 14&lt;/p&gt;
&lt;p&gt;1、对许多功能和界面的改进完善，操作更直观方便&lt;/p&gt;
</content:encoded></item><item><title>Dolby atmos for gaming分享</title><link>https://blog.aloys233.top/posts/dolby-atmos-for-gaming%E5%88%86%E4%BA%AB/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/dolby-atmos-for-gaming%E5%88%86%E4%BA%AB/</guid><description>分享 Dolby Atmos for Gaming 的功能特点、截图和下载方式。</description><pubDate>Tue, 30 Mar 2021 07:56:46 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby0.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.jsdelivr.net/gh/aloys233/579images@main/img/dolby6.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;介绍：&lt;/h2&gt;
&lt;p&gt;Dolby atmos for gaming是杜比公司针对电脑玩游戏出的一个版本，对游戏内容可以有比较多的调整，适合电脑玩游戏比较多的人。主要是可以白嫖。&lt;/p&gt;
&lt;p&gt;对射击游戏专门提供声音雷达。&lt;/p&gt;
&lt;h2&gt;下载：&lt;/h2&gt;
&lt;p&gt;链接：&lt;a href=&quot;https://wwa.lanzous.com/ibC5bmzt38h&quot;&gt;蓝奏云&lt;/a&gt;。密码：5cqn。&lt;/p&gt;
</content:encoded></item><item><title>Picgo手动离线安装插件</title><link>https://blog.aloys233.top/posts/picgo%E6%89%8B%E5%8A%A8%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E6%8F%92%E4%BB%B6/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/picgo%E6%89%8B%E5%8A%A8%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E6%8F%92%E4%BB%B6/</guid><description>记录 PicGo 在无法在线安装插件时，手动离线安装 GitHub 插件项目的方法。</description><pubDate>Tue, 02 Mar 2021 08:31:23 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;将github上插件项目拉取到本地&lt;/li&gt;
&lt;li&gt;进入在picgo日志所在目录，&lt;/li&gt;
&lt;li&gt;输入 npm run install picgo-plugin-xxx xxx是你要安装的插件名，然后重启picgo。&lt;br /&gt;
这里安装包的名称还可以用项目所在的文件夹绝对路径&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>STEAM</title><link>https://blog.aloys233.top/posts/steam/</link><guid isPermaLink="true">https://blog.aloys233.top/posts/steam/</guid><description>简要说明 STEAM 教育中科学、技术、工程、艺术和数学分别代表什么。</description><pubDate>Tue, 23 Feb 2021 11:34:49 GMT</pubDate><content:encoded>&lt;p&gt;STEAM代表科学（Science），技术（Technology），工程（Engineering），艺术（Arts），数学（Mathematics）。&lt;/p&gt;
</content:encoded></item></channel></rss>