yi_Xu
菜单
置顶

单文件推送远程库批处理脚本

《通过复制 git 信息提交网站更新 commit》 中,我们通过新的复制 git 信息的方法,将每次的站点更新保存到 githubcommit 信息中,但是确实使用两个脚本去实现,而且对于不添加多余文件来说,还是有点多了,能否不备份旧的 git 信息,将脚本合并为 1 个呢?答案在下文给出。

待解决的问题

两个脚本还是内容太多,如果为了尽可能少的影响仓库文件,去除 old 备份并使用单脚本方式最好。

解决思路

  1. copyDirectory.bat 核心语句复制文件单独拿出来使用。
  2. 先使用 hugo 命令生成站点,再将 .git 文件夹复制进去。

推送远程库批处理脚本实现

下面是推送远程库批处理脚本,其中部分路径脚本会生成临时文件,但不用担心,脚本运行完,会删除它们防止污染仓库。

  1. pan 参数指代 hugo 生成的目录。
  2. repo 参数指代生成文档的远程库。
  3. branch 参数指代生成文档的远程库分支名。
  4. repogit 参数指代临时存放远程库的目录。
  5. 该脚本名字可任意取,后缀设置 bat 即可。
 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
45
46
47
48
49
50
51
52
53
54
55
56
@echo off

set pan=.\public\
set repo=git@blog:yi-Xu-0100/www.yixuju.cn.git
set branch=master
set repogit=.\www.yixuju.cn\
set "repogitinfo=%repogit%.git"
set "pangitinfo=%pan%.git"

:: Clean pubilc directory
if exist %pan% (
    echo "Clean public directory"
    rd /S /Q %pan%
) else (
    echo "Can not find public directory"
)

:: Hugo for new site
echo "Hugo for new site"
hugo -F

:: Clean pangitinfo
if exist %pangitinfo% (
    echo "Find %repogit% directory and clean it"
    rd /S /Q %repogit%
) else (
    echo "Create empty %pangitinfo%"
    md %pangitinfo%
)

:: Set gitinfo
if exist %repogit% (
    echo "Find %repogit% directory and clean it"
    rd /S /Q %repogit%
)
echo "Git pull lastest gitinfo"
git clone %repo% --depth=1
echo "Move gitinfo to Public"
xcopy /e/y/i/f %repogitinfo% %pangitinfo%
echo "Clean %repogit% directory"
rd /S /Q %repogit%

if exist %pan% (
    cd %pan%
    echo "Git add all and commit"
    if exist .\.git (
    git add --all
    git commit -m "Update site at %time%"
    git push -f origin %branch%:%branch% -v
    ) else (
        echo "Can not find .git directory, git push fail!"
    )
) else (
    echo "Can not find public directory, hugo fail!"
)
pause

一些说明

这个脚本运行可能会碰到一些问题,本质上说,需要一定的条件:

  • 需要完成免密码与 github 链接。
  • 脚本中的路径需要自己修改设置。
  • 仅支持 windows 系统。【 win10 系统测试通过】
  • 仅提供英文版以消除文件编码方式影响。