<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Git on 个人技术随想</title>
        <link>https://www.dhao2001.com/tags/git/</link>
        <description>Recent content in Git on 个人技术随想</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Tue, 05 Aug 2025 11:00:00 +0800</lastBuildDate><atom:link href="https://www.dhao2001.com/tags/git/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Git LFS 选择性拉取文件</title>
            <link>https://www.dhao2001.com/2025/08/05/git-lfs-quick-pull/</link>
            <pubDate>Tue, 05 Aug 2025 11:00:00 +0800</pubDate>
            <guid>https://www.dhao2001.com/2025/08/05/git-lfs-quick-pull/</guid>
            <description>&lt;p&gt;省流: 直接在&lt;code&gt;git lfs pull&lt;/code&gt;中使用&lt;code&gt;--include/-I&lt;/code&gt;和&lt;code&gt;--exclude/-X&lt;/code&gt;选择或者排除需要拉取LFS文件。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;快速下载&#34;&gt;&lt;a href=&#34;#%e5%bf%ab%e9%80%9f%e4%b8%8b%e8%bd%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;快速下载&#xA;&lt;/h2&gt;&lt;p&gt;在Huggingface等平台上，各种模型数据库文件都会被存储为Git LFS对象。&lt;/p&gt;&#xA;&lt;p&gt;如果不想使用Huggingface等平台提供的专用工具，如何方便地下载呢？&lt;/p&gt;&#xA;&lt;p&gt;最简单的，无脑的方法，只需要遵照Huggingface模型页面提供的代码，克隆仓库即可&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://huggingface.co/my/model&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;但是！这种方法会一次性拉取并检出&lt;strong&gt;所有文件&lt;/strong&gt;，包括所有LFS文件对象。&lt;/p&gt;&#xA;&lt;p&gt;有时，我们并不需要仓库中的所有LFS文件。比方说，一部分仓库同时提供&lt;code&gt;.pth&lt;/code&gt;和&lt;code&gt;.safetensors&lt;/code&gt;格式的模型权重，但我们只需要其中一种就够了。&lt;/p&gt;&#xA;&lt;p&gt;那么，有没有更自定义一点的法子？&lt;/p&gt;&#xA;&lt;p&gt;我们可以在克隆时忽略克隆完整的LFS对象，只保留LFS对象的指针。与此同时，正常拉取仓库中其他普通文件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GIT_LFS_SKIP_SMUDGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; git clone https://huggingface.co/my/model&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样一来，仓库中所有非LFS对象就获取完毕了，接下来只需要按需获取LFS文件。怎么做呢？非常简单，&lt;code&gt;git lfs pull&lt;/code&gt;提供了一个&lt;code&gt;--include/-I&lt;/code&gt;参数：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git lfs pull --include &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.safetensors&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;与之相对应地，还有一个&lt;code&gt;--exclude/-X&lt;/code&gt;参数，可以指定排除的文件列表。&lt;/p&gt;&#xA;&lt;p&gt;这样，就可以非常简单地选择性拉取一部分LFS文件，也不需要将命令拆分为多条命令，或是配置git仓库之类的。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>使用WSL创建精简的Hexo写作环境</title>
            <link>https://www.dhao2001.com/2021/12/29/wsl-create-mini-hexo-blog-environment/</link>
            <pubDate>Wed, 29 Dec 2021 16:44:23 +0800</pubDate>
            <guid>https://www.dhao2001.com/2021/12/29/wsl-create-mini-hexo-blog-environment/</guid>
            <description>&lt;p&gt;这篇文章将介绍一种方法，使用Windows Subsystem for Linux (WSL), Alpine Linux发行版, Git等工具，配置一个方便易用的的Hexo博客编写系统。&lt;/p&gt;&#xA;&lt;p&gt;如果结合已有的网站服务器，还可以使用Git快速进行站点部署与更新。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;&lt;a href=&#34;#%e5%89%8d%e8%a8%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;前言&#xA;&lt;/h2&gt;&lt;p&gt;如您所见，这个网站的渲染生成器是&lt;em&gt;Hexo&lt;/em&gt;。众所周知，&lt;em&gt;Hexo&lt;/em&gt;是跑在&lt;em&gt;Node.js&lt;/em&gt;上的玩意，但&lt;em&gt;npm&lt;/em&gt;环境配置是出了名的复杂，甚至在我看来还不是那么优雅，略显混乱，在Windows上更是如此。&lt;/p&gt;&#xA;&lt;p&gt;过去在&lt;em&gt;Node.js&lt;/em&gt;上开发项目，总是避免不了和系统里的&lt;em&gt;npm&lt;/em&gt;斗智斗勇，几番折腾，最后竟然无法正常地生成&lt;em&gt;Hexo&lt;/em&gt;博客。实际上，也并不是没有考虑过切换博客生成后端，但迁移的成本同样存在，而且选择也较为有限。&lt;/p&gt;&#xA;&lt;p&gt;不可否认，目前有许多优秀的&lt;em&gt;Node.js&lt;/em&gt;管理系统，例如&lt;em&gt;volta&lt;/em&gt;之类，但这些工具在Windows下支持也不能算好。而采用Linux作为主桌面？在目前还不能算特别方便。&lt;/p&gt;&#xA;&lt;p&gt;所以，是否有一种方法，既能有效地管理&lt;em&gt;npm&lt;/em&gt;，从而为&lt;em&gt;Hexo&lt;/em&gt;创建一个隔离的环境，又能保证整体性能不差，还与Windows轻松兼容呢？&lt;/p&gt;&#xA;&lt;p&gt;笔者认为，在2021年年底的当下，微软提供的Linux子系统，也就是WSL，是解决这一问题的比较优雅方法。它能满足上面的所有设计要求。以下是具体方法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预备条件&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e5%a4%87%e6%9d%a1%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预备条件&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;启用了 &lt;code&gt;Windows Subsystem for Linux&lt;/code&gt; 功能的 Windows 10+ 操作系统&lt;/li&gt;&#xA;&lt;li&gt;Alpine Linux的&lt;code&gt;MINI ROOT FILESYSTEM&lt;/code&gt;(最小根文件系统)压缩包，可以在&lt;a class=&#34;link&#34; href=&#34;https://www.alpinelinux.org/downloads/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;downloads | Alpine Linux&lt;/a&gt;找到&lt;/li&gt;&#xA;&lt;li&gt;其他必须工具，如&lt;code&gt;git&lt;/code&gt;等&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;关于alpine-linux&#34;&gt;&lt;a href=&#34;#%e5%85%b3%e4%ba%8ealpine-linux&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;关于Alpine Linux&#xA;&lt;/h2&gt;&lt;p&gt;Alpine Linux是一个非常精简的Linux发行版，本文编写时，其最新版&lt;code&gt;minirootfs&lt;/code&gt;的&lt;code&gt;tar.gz&lt;/code&gt;包，仅2.6MB大小，可以在为我们提供尽可能的环境隔离同时，大幅度节省隔离环境所需的额外空间开销。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;mini-root-filesystem的作用是&#34;&gt;&lt;a href=&#34;#mini-root-filesystem%e7%9a%84%e4%bd%9c%e7%94%a8%e6%98%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;MINI ROOT FILESYSTEM的作用是?&#xA;&lt;/h2&gt;&lt;p&gt;用于我们手动导入Alpine Linux到WSL中，作为我们的Hexo环境。不过，目前微软商店里已经上架了&lt;code&gt;Alpine WSL&lt;/code&gt;应用程序包，和手动导入效果类似，可供选择。如果选择从应用商店安装，请跳过下面&lt;em&gt;&lt;strong&gt;导入Alpine Linux&lt;/strong&gt;&lt;/em&gt;一节。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h2 id=&#34;为什么使用alpine-linux发行版&#34;&gt;&lt;a href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8alpine-linux%e5%8f%91%e8%a1%8c%e7%89%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;为什么使用Alpine Linux发行版?&#xA;&lt;/h2&gt;&lt;p&gt;Alpine Linux发行版体积比目前绝大多数其他通用的发行版（无论是Debian系还是CentOS系）都要小得多。先前，Alpine由于&lt;code&gt;musl&lt;/code&gt;的原因，兼容性不如其他&lt;code&gt;glibc&lt;/code&gt;发行版。但后来docker普及之后，许多软件都提供了运行于Alpine Linux的二进制文件。包括Visual Studio Code远程插件，也提供了Alpine Linux的支持。因此，就本文描述的任务而言，选用Alpine Linux是完全没有问题的。&lt;/p&gt;&#xA;&lt;p&gt;当然，如果更喜欢使用其他发行版，也是完全没有问题的，操作流程和下文整体上还是相同的。注意一下部分命令的替换就好。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;导入alpine-linux&#34;&gt;&lt;a href=&#34;#%e5%af%bc%e5%85%a5alpine-linux&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;导入Alpine Linux&#xA;&lt;/h2&gt;&lt;h3 id=&#34;解开gzip包&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%bc%80gzip%e5%8c%85&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解开GZip包&#xA;&lt;/h3&gt;&lt;p&gt;这一步，我们要导入Alpine Linux系统作为一个WSL的发行版(Distro)。&lt;/p&gt;&#xA;&lt;p&gt;首先下载Alpine Linux的&lt;code&gt;.tar.gz&lt;/code&gt;包，然后用解压工具，解压出&lt;code&gt;.tar&lt;/code&gt;包。记住/复制这个&lt;code&gt;.tar&lt;/code&gt;包的路径。例如，&lt;code&gt;D:\alpine-minirootfs-3.15.0-x86_64.tar&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;alert alert-warning&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;⚠️&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;警告&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;h3 id=&#34;注意事项&#34;&gt;&lt;a href=&#34;#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;注意事项&#xA;&lt;/h3&gt;&lt;p&gt;只需要将压缩包的第一层&lt;code&gt;.gz&lt;/code&gt;部分解开，得到里面的&lt;code&gt;.tar&lt;/code&gt;包即可。&lt;em&gt;&lt;strong&gt;不需要&lt;/strong&gt;&lt;/em&gt;解开&lt;code&gt;.tar&lt;/code&gt;包里面的文件系统。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;建立目录并导入发行版&#34;&gt;&lt;a href=&#34;#%e5%bb%ba%e7%ab%8b%e7%9b%ae%e5%bd%95%e5%b9%b6%e5%af%bc%e5%85%a5%e5%8f%91%e8%a1%8c%e7%89%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;建立目录并导入发行版&#xA;&lt;/h3&gt;&lt;p&gt;在你希望放置这个发行版相关系统文件的地方，创建一个文件夹，这里为了举例子，我们取&lt;code&gt;D:\AlpineHexoBlog&lt;/code&gt;。这个路径不一定需要在C盘，可以在你想的合理的位置。名字也是随意的。&lt;/p&gt;&#xA;&lt;p&gt;接着，我们输入下述命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;wsl --import AlpineHexo D:\AlpineHexoBlog D:\alpine-minirootfs-3.15.0-x86_64.tar --version 2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个命令的意思是，将我们解压得到的&lt;code&gt;.tar&lt;/code&gt;包，作为一个Linux发行版，导入一个新的发行版，并将相关文件放置在&lt;code&gt;D:\AlpineHexoBlog&lt;/code&gt;目录下，这个发行版的名称叫&lt;code&gt;AlpineHexo&lt;/code&gt;(这个名字可以随意)，并指定使用WSL版本2（关于WSL1和2的差别，请自行参阅微软官方文档）。&lt;/p&gt;&#xA;&lt;p&gt;这样，一个自定义的发行版就导入完成了。可以在普通命令行/Powershell里面输入&lt;code&gt;wsl -d AlpineHexo&lt;/code&gt;(注意名称替换)进入该发行版的终端。如果电脑装有&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/terminal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Windows Terminal&lt;/a&gt;，也可以在标签页启动列表中直接选择该发行版。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装hexo相关环境&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85hexo%e7%9b%b8%e5%85%b3%e7%8e%af%e5%a2%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装Hexo相关环境&#xA;&lt;/h2&gt;&lt;p&gt;切换到Alpine Linux终端，执行命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;apk add nodejs npm git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;等待安装完成。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装hexo&#34;&gt;&lt;a href=&#34;#%e5%ae%89%e8%a3%85hexo&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;安装Hexo&#xA;&lt;/h2&gt;&lt;p&gt;这部分的步骤和&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Hexo官方文档&lt;/a&gt;部分相同，因此直接放出命令如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install -g hexo-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;创建博客资源主目录&#34;&gt;&lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%8d%9a%e5%ae%a2%e8%b5%84%e6%ba%90%e4%b8%bb%e7%9b%ae%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;创建博客资源主目录&#xA;&lt;/h2&gt;&lt;p&gt;参考&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/setup&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Setup | Hexo&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;hexo init MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面命令中，&lt;code&gt;MyBlog&lt;/code&gt;是可以自定义的文件夹名称，这个文件夹用于存储博客网站的源文件，如站点设置，博客文章原始文件等。在生成渲染网站时，&lt;code&gt;hexo&lt;/code&gt;程序会根据这一目录里的配置生成静态网站，我们的大部分操作也都将在这个文件夹里完成。本文剩余部分中，这个目录将称为&lt;em&gt;&lt;strong&gt;Hexo主文件夹&lt;/strong&gt;&lt;/em&gt;。&lt;/p&gt;&#xA;&lt;p&gt;如果输出如下所示，说明创建成功了。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;INFO  Install dependencies&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;INFO  Start blogging with Hexo!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接着进入这个新文件夹，执行&lt;code&gt;npm install&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这下，我们的站点就初始化完成了。我们可以任意对这个站点进行自定义，如主题自定义，撰写文章等。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;可选使用git管理站点内容历史记录&#34;&gt;&lt;a href=&#34;#%e5%8f%af%e9%80%89%e4%bd%bf%e7%94%a8git%e7%ae%a1%e7%90%86%e7%ab%99%e7%82%b9%e5%86%85%e5%ae%b9%e5%8e%86%e5%8f%b2%e8%ae%b0%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;(可选)使用Git管理站点内容历史记录&#xA;&lt;/h2&gt;&lt;p&gt;这就完了？不打算让博客内容管理更加自动化一些吗？比方说版本控制，自动部署等等。我们接下来就来介绍！&lt;/p&gt;&#xA;&lt;p&gt;我们首先从使用&lt;em&gt;Git&lt;/em&gt;管理&lt;strong&gt;站点内容历史记录&lt;/strong&gt;开始说起。网站内容日新月异，因此有需要将我们的博客站点原始内容，如博客文章的原始Markdown文件，站点的配置文件，Node.js包依赖等，做一些历史备份。&lt;/p&gt;&#xA;&lt;p&gt;还可以注意到，&lt;em&gt;Hexo&lt;/em&gt;的站点文件，包括配置、文章等，实际上都可以被视为文本文件，因此&lt;em&gt;Git&lt;/em&gt;就是负责管理版本历史的极佳选择。&lt;/p&gt;&#xA;&lt;p&gt;以下方法不依赖于具体的Git云托管平台，因此不必纠结Github还是Gitee这种问题，原理都是一样的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;初始化git仓库&#34;&gt;&lt;a href=&#34;#%e5%88%9d%e5%a7%8b%e5%8c%96git%e4%bb%93%e5%ba%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;初始化Git仓库&#xA;&lt;/h3&gt;&lt;p&gt;进入Hexo主文件夹，并执行&lt;code&gt;git init&lt;/code&gt;，这将在本地端创建一个初始Git仓库。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接着，我们让git跟踪Hexo主文件夹内所有有用的文件，并进行第一次提交(commit)。其中&lt;code&gt;-m&lt;/code&gt;参数后的是提交信息，内容任你填写。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git commit -m &amp;#34;Init commit.&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;推送到在线git云托管平台&#34;&gt;&lt;a href=&#34;#%e6%8e%a8%e9%80%81%e5%88%b0%e5%9c%a8%e7%ba%bfgit%e4%ba%91%e6%89%98%e7%ae%a1%e5%b9%b3%e5%8f%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;推送到在线Git云托管平台&#xA;&lt;/h3&gt;&lt;p&gt;如果希望同步到在线的Git云托管平台，需要先自行在网页中创建一个空仓库，之后推送到该远程仓库中。这里以内网的一台Git服务器为例，创建的仓库地址为&lt;code&gt;http://git.mysrv.in/dhao2001/MyBlog.git&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git remote add origin http://git.mysrv.in/dhao2001/MyBlog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git push -u origin main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;在另一个地方继续创作&#34;&gt;&lt;a href=&#34;#%e5%9c%a8%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e6%96%b9%e7%bb%a7%e7%bb%ad%e5%88%9b%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;在另一个地方继续创作&#xA;&lt;/h3&gt;&lt;p&gt;下次，当重装了操作系统，或是更换了电脑，希望在另一个地方恢复相同的博客环境以及源文件，只需要这么做:&lt;/p&gt;&#xA;&lt;p&gt;首先还是要搭好最基本的环境，也就是&lt;code&gt;git&lt;/code&gt;, &lt;code&gt;nodejs&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;。安装完成后克隆仓库到当前系统。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git clone http://git.mysrv.in/dhao2001/MyBlog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;进入该文件夹，执行&lt;code&gt;npm install&lt;/code&gt;，这将根据&lt;em&gt;Hexo主文件夹&lt;/em&gt;里的&lt;code&gt;package.json&lt;/code&gt;文件，安装所需的&lt;em&gt;node.js&lt;/em&gt;包。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;至此，在新环境中的博客编写环境已经准备就绪，就可以像在老地方一样创作和发布博客了。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;可选使用git进行页面部署&#34;&gt;&lt;a href=&#34;#%e5%8f%af%e9%80%89%e4%bd%bf%e7%94%a8git%e8%bf%9b%e8%a1%8c%e9%a1%b5%e9%9d%a2%e9%83%a8%e7%bd%b2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;(可选)使用Git进行页面部署&#xA;&lt;/h2&gt;&lt;p&gt;咦，怎么又是Git？上一节不是刚刚才讲过吗？&lt;/p&gt;&#xA;&lt;p&gt;刚刚上一节的内容，主要是使用Git对博客的&lt;strong&gt;原始配置文件、原始代码、原始Markdown源文件&lt;/strong&gt;进行管理。&lt;/p&gt;&#xA;&lt;p&gt;而本节的内容是，使用Git工具，将本机上通过Hexo命令渲染生成的&lt;strong&gt;静态Html等站点资源文件&lt;/strong&gt;，推送到远程服务器的指定Web目录内，供其他人通过Web服务器进行访问。&lt;/p&gt;&#xA;&lt;h3 id=&#34;设置远程服务器&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e8%bf%9c%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置远程服务器&#xA;&lt;/h3&gt;&lt;p&gt;第一步，首先需要登录到博客网站主机，也就是部署在公网的Web服务器上。&lt;/p&gt;&#xA;&lt;p&gt;接着，在服务器上安装&lt;code&gt;git&lt;/code&gt;软件包。例如，如果使用的是Debian/Ubuntu系统，可以运行:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo apt install git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果使用的是其他发行版，请参阅对应发行版的软件包安装手册。&lt;/p&gt;&#xA;&lt;h4 id=&#34;设置web服务器&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%aeweb%e6%9c%8d%e5%8a%a1%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置Web服务器&#xA;&lt;/h4&gt;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Web服务器的选择&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本教程以nginx作为Web服务器，若希望使用其他Web服务器如Apache，请自行调整以下步骤中Web服务器配置文件内容。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;在&lt;code&gt;/var/www&lt;/code&gt;下新建一个文件夹，用于存放博客网站的静态Html文件，这里以&lt;code&gt;blog&lt;/code&gt;作为文件夹名称示例。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;mkdir -p /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;接下来修改nginx的站点配置文件(Debian/Ubuntu系统位于&lt;code&gt;/etc/nginx/sites-enabled/&lt;/code&gt;下)，修改配置文件中的&lt;code&gt;server&lt;/code&gt;块(当然，更建议新建一个&lt;code&gt;server&lt;/code&gt;块，更方便区分和管理，详见其他教程)。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;default_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;[::]:80&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;default_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;root&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/var/www/blog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kn&#34;&gt;try_files&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$uri&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$uri/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;修改完配置文件后，重启nginx:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;service nginx restart   # 使用系统服务管理重启nginx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gp&#34;&gt;#&lt;/span&gt; 如果上面的命令无效&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;nginx -s reload         # 使用nginx命令重新读取配置文件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;以上配置足以满足&lt;em&gt;Hexo&lt;/em&gt;这样的静态网站部署要求。此时，可以考虑在&lt;code&gt;/var/www/blog/&lt;/code&gt;下新建一个测试用Html文件，测试能否正常访问网站。&lt;/p&gt;&#xA;&lt;h4 id=&#34;设置git仓库用于传输博客网站资源&#34;&gt;&lt;a href=&#34;#%e8%ae%be%e7%bd%aegit%e4%bb%93%e5%ba%93%e7%94%a8%e4%ba%8e%e4%bc%a0%e8%be%93%e5%8d%9a%e5%ae%a2%e7%bd%91%e7%ab%99%e8%b5%84%e6%ba%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;设置git仓库用于传输博客网站资源&#xA;&lt;/h4&gt;&lt;p&gt;设置好Web服务器后，如何使用&lt;code&gt;git&lt;/code&gt;，把本机生成好的&lt;em&gt;Hexo&lt;/em&gt;站点静态文件，推送到远程Web服务器上的网站目录，也就是本例中的&lt;code&gt;/var/www/blog&lt;/code&gt;去呢？&lt;/p&gt;&#xA;&lt;p&gt;实际上，在服务器和本地机器之间传输文件有很多方法。为了方便，考虑&lt;em&gt;Hexo&lt;/em&gt;提供的部署工具集合，我们可以继续使用Git工具完成这项任务。&lt;/p&gt;&#xA;&lt;p&gt;使用Git传输网站资源主要分成两个过程：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;第一步，先将本机生成的静态文件，通过Git传输到Web服务器上。&lt;/li&gt;&#xA;&lt;li&gt;第二步，使用Git钩子，将传输到Web服务器上的网站资源，复制到&lt;code&gt;/var/www/blog&lt;/code&gt;，供Web用户访问。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;为了达到这一目标，需要按照以下方法，在本机和远程Web服务器上分别调整配置。&lt;/p&gt;&#xA;&lt;h4 id=&#34;远程web服务器的配置&#34;&gt;&lt;a href=&#34;#%e8%bf%9c%e7%a8%8bweb%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9a%84%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;远程Web服务器的配置&#xA;&lt;/h4&gt;&lt;p&gt;首先，&lt;strong&gt;在远程Web服务器上&lt;/strong&gt;，创建一个用户，用户名可以自拟。当然，考虑使用Git的习惯，甚至可以给这个用户起名为&lt;code&gt;git&lt;/code&gt;，如本例接下来所示。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;adduser -s /bin/git-shell git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;blockquote class=&#34;alert alert-warning&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;⚠️&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;警告&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Git Shell&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;出于安全考虑，可以将&lt;code&gt;git&lt;/code&gt;用户的默认shell指定为只有简单功能的&lt;code&gt;git-shell&lt;/code&gt;，执行命令结束后就会退出。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意，&lt;code&gt;/bin/git-shell&lt;/code&gt;是Debian/Ubuntu系发行版的默认路径，新版本或其他发行版请务必确认&lt;code&gt;git-shell&lt;/code&gt;的具体位置，并将&lt;code&gt;/bin/git-shell&lt;/code&gt;替换成真实路径。&lt;/strong&gt;&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;为了配置自动部署，建议使用密钥对进行认证。SSH密钥对可以在本机上使用&lt;code&gt;ssh-keygen&lt;/code&gt;或&lt;code&gt;putty&lt;/code&gt;等工具生成。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo -u git /bin/bash -i        # 以git用户身份进行下列操作&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;mkdir .ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd .ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;vim authorized_keys             # 将公钥添加到authorized_keys中&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chmod 600 authorized_keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;完成用户创建后，选择任意一处地方，创建一个git裸仓库，该仓库就是用于传输网站资源的git仓库。如果没有其他要求的话，&lt;code&gt;git&lt;/code&gt;用户的家目录&lt;code&gt;/home/git&lt;/code&gt;似乎就是一个不错的选择。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;git init -b main --bare myblog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;为了在上传网站资源文件后，git可以自动帮我们将更新的资源文件，拷贝到&lt;code&gt;/var/www/blog&lt;/code&gt;文件夹，我们需要在git仓库中创建一个&lt;code&gt;post-receive&lt;/code&gt;钩子。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;vim myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;添加如下内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git --work-tree&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/www/blog --git-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/git/myblog.git checkout -f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;保存该文件，回到终端，赋予该文件可执行权限。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chmod 744 myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;也不要忘记将nginx网站根目录&lt;code&gt;/var/www/blog&lt;/code&gt;所有权转移给用户&lt;code&gt;git&lt;/code&gt;，否则将无法进行写入和更新操作！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chown -R git:git /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样，远程Web服务器端的配置就完成了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;本机端的操作&#34;&gt;&lt;a href=&#34;#%e6%9c%ac%e6%9c%ba%e7%ab%af%e7%9a%84%e6%93%8d%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;本机端的操作&#xA;&lt;/h4&gt;&lt;p&gt;这部分的配置也可以参考官方文档&lt;a class=&#34;link&#34; href=&#34;https://hexo.io/docs/one-command-deployment&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;One-Command Deployment | Hexo&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;回到本机上的WSL Hexo环境。首先切到Hexo主文件夹。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd MyBlog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;为了使用Git进行一键部署，我们需要安装Hexo的Git一键部署插件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;npm install hexo-deployer-git --save&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;在&lt;code&gt;_config.yml&lt;/code&gt;最后&lt;code&gt;deploy&lt;/code&gt;下添加一节。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;git@mysrv.in:myblog.git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;记得把&lt;code&gt;mysrv.in&lt;/code&gt;替换成你的远程Web服务器地址。如果有其他需求，如指定认证使用的私钥位置、端口等，可以参考我先前写的文章&lt;a class=&#34;link&#34; href=&#34;https://www.dhao2001.com/2021/12/04/ssh-config-specific-private-key-filename/&#34; &gt;SSH配置主机别名及指定认证私钥路径&lt;/a&gt;，修改&lt;code&gt;ssh_config&lt;/code&gt;文件实现。&lt;/p&gt;&#xA;&lt;p&gt;完成以后，试试运行命令:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;hexo g -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后再访问一下博客站点，是不是已经成功将Hexo内容部署上去了呢？&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;常见问题的解决&#34;&gt;&lt;a href=&#34;#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e7%9a%84%e8%a7%a3%e5%86%b3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;常见问题的解决&#xA;&lt;/h2&gt;&lt;h3 id=&#34;本机部署命令执行成功但远程服务器上访问到的资源未更新&#34;&gt;&lt;a href=&#34;#%e6%9c%ac%e6%9c%ba%e9%83%a8%e7%bd%b2%e5%91%bd%e4%bb%a4%e6%89%a7%e8%a1%8c%e6%88%90%e5%8a%9f%e4%bd%86%e8%bf%9c%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e8%ae%bf%e9%97%ae%e5%88%b0%e7%9a%84%e8%b5%84%e6%ba%90%e6%9c%aa%e6%9b%b4%e6%96%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;本机部署命令执行成功，但远程服务器上访问到的资源未更新&#xA;&lt;/h3&gt;&lt;p&gt;在调试网站并刷新时，建议使用&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;F5&lt;/kbd&gt;快捷键强制刷新，这将强制浏览器重新请求网站文件，从而可以避免缓存对调试结果造成影响。&lt;/p&gt;&#xA;&lt;p&gt;其次，检查网站目录&lt;code&gt;/var/www/blog&lt;/code&gt;的内容是否已经更新，以及nginx配置文件正确性。&lt;/p&gt;&#xA;&lt;p&gt;如果明明git推送成功，但却没更新到网站目录中，需要检查&lt;code&gt;post-receive&lt;/code&gt;钩子内容是否正确，路径是否正确，&lt;strong&gt;权限是否正确。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在这里，&lt;code&gt;post-receive&lt;/code&gt;钩子文件对以上用户（本例中为&lt;code&gt;git&lt;/code&gt;）必须具备可执行权限。同时，nginx的站点文件夹（本例中为&lt;code&gt;/var/www/blog&lt;/code&gt;）必须对&lt;code&gt;git&lt;/code&gt;用户开放写入权限，对nginx用户&lt;code&gt;www-data&lt;/code&gt;开放读取权限。&lt;/p&gt;&#xA;&lt;p&gt;正确的权限是，权限8进制代码为&lt;code&gt;744&lt;/code&gt;或&lt;code&gt;755&lt;/code&gt;，所有者为&lt;code&gt;git:git&lt;/code&gt;。可以通过下列命令指定。&lt;/p&gt;&#xA;&lt;p&gt;如果不确定，可以以&lt;code&gt;git&lt;/code&gt;用户身份尝试以下命令：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;cd ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chown git:git myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;chmod 744 myblog.git/hooks/post-receive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;再以&lt;code&gt;root&lt;/code&gt;身份执行以下命令：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo chown -R git:git /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;sudo chmod -R 744 /var/www/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;修改博客后更新资源时发现生成的页面字母大小写异常&#34;&gt;&lt;a href=&#34;#%e4%bf%ae%e6%94%b9%e5%8d%9a%e5%ae%a2%e5%90%8e%e6%9b%b4%e6%96%b0%e8%b5%84%e6%ba%90%e6%97%b6%e5%8f%91%e7%8e%b0%e7%94%9f%e6%88%90%e7%9a%84%e9%a1%b5%e9%9d%a2%e5%ad%97%e6%af%8d%e5%a4%a7%e5%b0%8f%e5%86%99%e5%bc%82%e5%b8%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;修改博客后更新资源时，发现生成的页面字母大小写异常&#xA;&lt;/h3&gt;&lt;p&gt;这是由于默认的Hexo Git插件对大小写不敏感导致的。需要修改&lt;code&gt;&amp;lt;Hexo主目录&amp;gt;/.deploy_git/.git/&lt;/code&gt;下面的&lt;code&gt;config&lt;/code&gt;文件，在&lt;code&gt;[core]&lt;/code&gt;一节中添加一行&lt;code&gt;ignorecase = false&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[core]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        repositoryformatversion = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        filemode = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bare = false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        logallrefupdates = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+       ignorecase = false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[branch &amp;#34;master&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        remote = git@mysrv.in:myblog.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        merge = refs/heads/master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
        </item><item>
            <title>SSH配置主机别名及指定认证私钥路径</title>
            <link>https://www.dhao2001.com/2021/12/04/ssh-config-specify-private-key-hostname/</link>
            <pubDate>Sat, 04 Dec 2021 21:06:43 +0800</pubDate>
            <guid>https://www.dhao2001.com/2021/12/04/ssh-config-specify-private-key-hostname/</guid>
            <description>&lt;p&gt;但有一个问题，有时候你可能拥有几个不同的SSH私钥（虽然没什么使用多个密钥对的必要性），或者私钥文件文件名不是默认的&lt;code&gt;~/.ssh/id_rsa&lt;/code&gt;，应该怎么指定需要使用的私钥文件路径呢？&lt;/p&gt;&#xA;&lt;p&gt;几种常见的情景如下所示，更多详细内容，和标准的定义，请参考&lt;a class=&#34;link&#34; href=&#34;https://man7.org/linux/man-pages/man5/ssh_config.5.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ssh_config手册&lt;/a&gt;，或在终端中键入&lt;code&gt;man ssh_config&lt;/code&gt;查看。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;使用命令行登录ssh&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e7%99%bb%e5%bd%95ssh&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用命令行登录SSH&#xA;&lt;/h2&gt;&lt;p&gt;第一种，就是我们最常见的登录SSH服务器的方式。当你在终端中输入如下命令。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh myname@my.host.addr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;SSH客户端会连接到该服务器，并尝试使用默认路径（见上述手册，IdentityFile部分）下的私钥，进行认证。如果私钥不在默认路径下，也未显式指定私钥文件，而服务器要求必须使用私钥认证，则认证失败。&lt;/p&gt;&#xA;&lt;p&gt;如果想显式指定私钥，可以使用&lt;code&gt;-i&lt;/code&gt;参数，指定私钥文件。例如。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh myname@myhost -i /path/to/mykey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如果是连接SSH服务器啥的，这就够用了。但缺点很明显，每次登录，都必须显式指定私钥文件。而如果是&lt;code&gt;git&lt;/code&gt;命令，则会因为没有&lt;code&gt;-i&lt;/code&gt;参数支持，命令执行失败。怎么改进呢？我们看下面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用ssh_conifg文件&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8ssh_conifg%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用ssh_conifg文件&#xA;&lt;/h2&gt;&lt;h3 id=&#34;配置文件&#34;&gt;&lt;a href=&#34;#%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;配置文件&#xA;&lt;/h3&gt;&lt;p&gt;实际上，关于一个SSH连接，一些行为是可以在配置文件中定义的。你可以针对不同的目标服务器，配置不同的连接行为。&lt;/p&gt;&#xA;&lt;p&gt;对于Linux中的一个用户而言，SSH配置文件位于&lt;code&gt;~/.ssh/config&lt;/code&gt;。对于整个系统而言，SSH配置文件位于&lt;code&gt;/etc/ssh/ssh_config&lt;/code&gt;（注意区别&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;，&lt;code&gt;sshd_config&lt;/code&gt;是SSH服务器进程的配置文件，&lt;strong&gt;不用于客户端。&lt;/strong&gt;）&lt;/p&gt;&#xA;&lt;p&gt;我们用一个&lt;code&gt;~/.ssh/config&lt;/code&gt;的片段来说明。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Host myserver&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;Hostname 192.168.1.123&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;User root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;IdentityFile ~/mykey&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;上面这个配置文件非常好读懂。&lt;/p&gt;&#xA;&lt;p&gt;最开始的&lt;code&gt;Host&lt;/code&gt;，代表的是，你在&lt;code&gt;ssh&lt;/code&gt;命令中，给定的&lt;code&gt;host&lt;/code&gt;参数的值，常常就是你输入&lt;code&gt;username@host&lt;/code&gt;中&lt;code&gt;@&lt;/code&gt;后面那部分。如果匹配，则应用下面的规则。对于该Host的定义，在&lt;code&gt;config&lt;/code&gt;文件中持续到下一个&lt;code&gt;Host&lt;/code&gt;或者&lt;code&gt;Match&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;接下来是&lt;code&gt;Hostname&lt;/code&gt;指定了你服务器的真实地址，可以是ip，当然也可以是域名。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;User&lt;/code&gt;指定了登录的用户名。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;IdentityFile&lt;/code&gt;指定了登录该&lt;code&gt;Host&lt;/code&gt;使用的认证私钥文件路径。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用&#34;&gt;&lt;a href=&#34;#%e4%bd%bf%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;使用&#xA;&lt;/h3&gt;&lt;p&gt;编写了配置文件，就可以使用了。现在，登录到你的服务器更加简单，只需要在终端中输入。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh myserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;就可以应用&lt;code&gt;Host myserver&lt;/code&gt;块下的配置，自动使用指定的私钥文件进行认证。&lt;/p&gt;&#xA;&lt;h3 id=&#34;git&#34;&gt;&lt;a href=&#34;#git&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Git&#xA;&lt;/h3&gt;&lt;blockquote class=&#34;alert alert-note&#34;&gt;&#xA;        &lt;div class=&#34;alert-header&#34;&gt;&#xA;            &lt;span class=&#34;alert-icon&#34;&gt;📝&lt;/span&gt;&#xA;            &lt;span class=&#34;alert-title&#34;&gt;备注&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;alert-body&#34;&gt;&#xA;            &lt;p&gt;&lt;strong&gt;关于Git使用场景的提醒&lt;/strong&gt;&#xA;虽然大抵是简单的触类旁通：上面用于Git的案例，&lt;strong&gt;不仅适用于Github，也适用于其他Git平台&lt;/strong&gt;，甚至包括自己搭建的Git服务器，像本网站的生成部署脚本，就利用了这个方法达到一键部署的效果。&lt;/p&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;我们可以用上述方法，解决&lt;code&gt;git&lt;/code&gt;命令没有&lt;code&gt;-i&lt;/code&gt;参数的不便之处。以Github为例，我们只需要向&lt;code&gt;~/.ssh/config&lt;/code&gt;添加如下一个段落。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Host github.com&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;HostName github.com&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;IdentityFile ~/mykey&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样，下次对远程仓库代码进行更改时候，就会使用你指定的SSH私钥了。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
