在 《通过复制 git 信息提交网站更新 commit》 中,我们通过新的复制 git
信息的方法,将每次的站点更新保存到 github
的 commit
信息中,但是确实使用两个脚本去实现,而且对于不添加多余文件来说,还是有点多了,能否不备份旧的 git
信息,将脚本合并为 1 个呢?答案在下文给出。
待解决的问题
两个脚本还是内容太多,如果为了尽可能少的影响仓库文件,去除 old
备份并使用单脚本方式最好。
解决思路
- 将
copyDirectory.bat
核心语句复制文件单独拿出来使用。
- 先使用
hugo
命令生成站点,再将 .git
文件夹复制进去。
推送远程库批处理脚本实现
下面是推送远程库批处理脚本,其中部分路径脚本会生成临时文件,但不用担心,脚本运行完,会删除它们防止污染仓库。
pan
参数指代 hugo
生成的目录。
repo
参数指代生成文档的远程库。
branch
参数指代生成文档的远程库分支名。
repogit
参数指代临时存放远程库的目录。
- 该脚本名字可任意取,后缀设置
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
系统测试通过】
- 仅提供英文版以消除文件编码方式影响。