文章

Git使用 & 博客推送

Git使用 & 博客推送

1.创建一个文件夹

2.将写好的项目文件全部复制进去

3.打开这个文件夹,右键Git Bash Here

4.输入命令:git init

5.修改分支:git branch -M main

6.输入命令:git add .

7.输入命令:git commit -m "xxxxxxx"

8.输入命令:git remote add origin git@github.com:Tajang-ctf/仓库名.git

9.输入命令 :git push -u origin main

2025/02/06 更新

我部署了Hugo博客,主题自己写的,我想在站点目录下执行git push推送public目录内文件到远程仓库,但怎么设置都不行,.gitignore写了也不行,于是写了下面这个脚本:

```bat {title=”push.bat”} @echo off echo 进入D:\Blog目录 cd /d “D:\Blog” echo 开始构建站点 hugo –gc –minify echo 进入D:\Blog\public目录 cd /d “D:\Blog\public” echo 添加所有文件 git add . echo 提交代码 git -c i18n.commitEncoding=utf-8 -c i18n.logOutputEncoding=utf-8 commit -m “推送Hugo博客” echo 推送到Github仓库 git push origin main echo 推送完成! pause @REM Blog是博客站点根目录,不需要推送,只需要推送public内文件夹,本来想着写,gitignore忽略所有文件,但排除public内文件。但是一直不成功,所以写这个脚本。 @REM public内有git配置,分支是main,直接推送即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
本地`git init`时默认为master分支,虽然可以使用`master:main`推送,但遇到各种分支冲突,只能`--force`,所以还是把本地的分支改成main吧:`git branch -m main`

## **2025/08/22更新**

终端显示“推送Hugo博客”,但是commit消息是乱码。因为bat一般与windows终端的编码一致的,都是GBK,当然终端也能正常显示ANSI的bat,但是`git commit -m "xxxx"`里面的消息会被git当GBK读,但是git的显示是按UTF-8显示的,所以会乱码,这里使用

`git -c i18n.commitEncoding=utf-8 -c i18n.logOutputEncoding=utf-8` 

就是临时设置它的编码和输出编码,这样终端里显示正常,github的commit信息也正常。上面代码已修改。

## 2025/08/26 更新

某文章被要求下架,我删除了居然还能访问,然后发现Github的仓库里仍然有那个文章。然后一次次测试Hugo的draft草稿功能,还有删除后的渲染功能才发现:

Hugo 的草稿一般是不渲染的,但是你只要渲染过,比如`hugo server -D`,就会存在public/post中。就算重新生成站点或者删除草稿,渲染后的文件也不会被删除,随后被git推送到仓库。虽然页面不显示,但访问 slug 对应链接,仍然能看到,所以要删除文章,就要删除 public/post 里面的对应的文章,但是 git 时候,同步新增和修改,不同步删除。

上面这两个原因导致我无论是改成草稿,还是删除文章,访问链接都能访问文章。

删除的内容仍然保存在github中。所以我去仓库一看,都能找到去年的博客测试图片。不过我的GitHub仓库是私密的,然后被Vercel同步的,数据不会被打包。只不过被删除的资源不显示,但能访问。这其实是本地仓库新的,但是远程仓库累加很多内容。

`git add -A`,可以同步新增、修改、删除,但是hugo的`hugo --gc --minify`不会删已渲染过的草稿,所以草稿仍被推送。

所以我这里先命令清空public,清洗一次。进去再git add -A。但是`rmdir /s /q public`导致我的`.git`文件夹没了,使public变成纯静态文件夹了。。。

这里重新git init、remote之类。然后在`hugo --gc --minify`之前加入

```bat
echo 清空 public 目录内容(保留 .git)
del /q public\*
for /d %%x in (public\*) do rmdir /s /q "%%x"

这样不删除隐藏目录,也就是.git,可以看到上传了很多东西。仓库全部更新了,但是也上传了不少东西。每次都删除public意义不大,而且上传耗时。下架文章,只要删除post(不是posts)文件夹就行,如果怕不小心写过错的tag和Category,那就每次删除标签、分类、文章三个文件夹。

代码用

1
for %%d in (post categories tags) do rmdir /s /q "D:\Blog\public\%%d"

这样就算我渲染过草稿,也会在脚本里清空文件夹,重新生成内容。

注意,bat 脚本里是 %%d ,终端这样操作就要写 %d

完整博客推送代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
echo 进入D:\Blog目录
cd /d "D:\Blog"

@REM echo 清空 public 目录内容(保留 .git)
@REM del /q public\*
@REM for /d %%x in (public\*) do rmdir /s /q "%%x"

echo 删除 post、categories、tags 文件夹
for %%d in (post categories tags) do rmdir /s /q "D:\Blog\public\%%d"
@REM bat脚本里写 %%d ,终端里要写 %d

echo 开始构建站点
hugo --gc --minify

echo 进入D:\Blog\public目录
cd /d "D:\Blog\public"

echo 添加所有文件
git add -A

echo 提交代码
git -c i18n.commitEncoding=utf-8 -c i18n.logOutputEncoding=utf-8 commit -m "推送Hugo博客"

echo 推送到Github仓库
git push --force origin main

echo 推送完成!
pause
@REM Blog是博客站点根目录,不需要推送,只需要推送public内文件夹,本来想着写,gitignore忽略所有文件,但排除public内文件。但是一直不成功,所以写这个脚本。
@REM public内有git配置,分支是main,直接推送即可
@REM 详情参考:https://h4cker.zip/post/39697d/

@REM是注释的意思

2025/10/06 更新(rspress类把.git文件夹都删除的项目用)

最近用rspress翻译了个文档,这个工具主页跟vuepress很像,但是性能碾压。而且一套工具链都极其完善,不愧是服务字节跳动整个集团web端的部门。

我在翻译RAMN文档的时候,发现,他生成的静态网站文件是将doc_build文件夹清空,再往里生成文件,这和hugo、hexo都是相反的。

所以也会清空 .git 文件夹,有各种方法在项目根目录建立git,然后只上传doc_build里的内容。但是不想折腾了,就用下面这个方法吧

1
2
3
4
5
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/TajangSec/RAMN_docs.git
git push --force origin main

2026/02/24 更新

莫名奇妙,好像是系统更新的锅,找不到原因,脚本是GBK/ANSI,终端也是这个,但是打印乱码,脚本设置为UTF-8或utf-8-bom才行。这里貌似是编码乱七八糟加上中文导致字符解析错误。

算了,重置一版脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@echo off

:: ============================================================
:: 脚本说明:
:: 1. 仅推送 D:\Blog\public 目录下的内容到 GitHub
:: 2. public 目录内已配置 Git 远程仓库 (main 分支)
:: 3. 参考:https://h4cker.zip/post/39697d/
:: ============================================================

echo [1/6] 正在进入 D:\Blog 目录...
cd /d "D:\Blog"

echo [2/6] 清理 public 目录(保留 .git)...
if exist public (
    for /d %%x in (public\*) do (
        if /i not "%%~nx"==".git" rmdir /s /q "%%x"
    )
    del /q public\*
)

echo [3/6] Hugo 开始构建站点...
hugo --gc --minify

echo [4/6] 进入 public 目录准备推送...
cd /d "D:\Blog\public"

echo [5/6] 提交更改...
git add -A
git -c i18n.commitEncoding=utf-8 -c i18n.logOutputEncoding=utf-8 commit -m "站点更新:%date% %time%"

echo [6/6] 推送到 Github 仓库...
git push --force origin main

cd ..
echo.
echo 推送任务已完成!
pause

2026/03/02更新

由于更新了文章加密功能,所以在上传前有个加密脚本的运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@echo off

:: ============================================================
:: 脚本说明:
:: 1. 仅推送 D:\Blog\public 目录下的内容到 GitHub
:: 2. public 目录内已配置 Git 远程仓库 (main 分支)
:: 3. 参考:https://h4cker.zip/post/39697d/
:: ============================================================

echo [1/7] 正在进入 D:\Blog 目录...
cd /d "D:\Blog"

echo [2/7] 清理 public 目录(保留 .git)...
if exist public (
    for /d %%x in (public\*) do (
        if /i not "%%~nx"==".git" rmdir /s /q "%%x"
    )
    del /q public\*
)

echo [3/7] Hugo 开始构建站点...
hugo --gc --minify
echo [4/7] 正在执行 AES-GCM 加密处理...
py encrypt_process.py
if %errorlevel% neq 0 (
    echo 加密脚本执行失败,请检查 Python 依赖。
    pause
    exit /b %errorlevel%
)

echo [5/7] 进入 public 目录准备推送...
cd /d "D:\Blog\public"

echo [6/7] 提交更改...
git add -A
git -c i18n.commitEncoding=utf-8 -c i18n.logOutputEncoding=utf-8 commit -m "站点更新:%date% %time%"

echo [7/7] 推送到 Github 仓库...
git push --force origin main

cd ..
echo.
echo 推送任务已完成!
pause
本文由作者按照 CC BY 4.0 进行授权