从 gh-pages
分支机构 部署项目页面
您还可以告诉GitHub页面将您的 master
分支视为已发布的站点,或指向一个单独的 gh-pages
分支。 后一种方法较为复杂,但具有一些优点:
- 它将您的源网站和生成的网站保留在不同的分支机构中,因此维护了两者的版本控制历史记录。
- 与前面的
docs/
选项 不同 ,它使用默认public
文件夹。
gh-pages
分公司的 准备
这些步骤只需要执行一次。 替换 upstream
为您的遥控器名称; 例如 origin
:
添加 public
文件夹
首先,将该 public
文件夹 添加 到 .gitignore
项目根目录的文件中,以便在master分支上忽略该目录:
echo "public" >> .gitignore
1
2
2
初始化您的 gh-pages
分支
现在,您可以将 gh-pages
分支 初始化 为空的 孤立分支 :
git checkout --orphan gh-pages
git reset --hard
git commit --allow-empty -m "Initializing gh-pages branch"
git push upstream gh-pages
git checkout master
1
2
3
4
5
6
2
3
4
5
6
建立与部署
现在, 使用git的工作 树功能 将 gh-pages
分支 检出 到您的 public
文件夹中 。 本质上,工作树允许您在不同目录中签出同一本地存储库的多个分支:
rm -rf public
git worktree add -B gh-pages public upstream/gh-pages
1
2
3
2
3
使用 hugo
命令 重新生成站点, 然后在 gh-pages
分支 上提交生成的文件 :
commit-gh-pages-files.sh
hugo
cd public && git add --all && git commit -m "Publishing to gh-pages" && cd ..
1
2
3
4
2
3
4
如果本地 gh-pages
分支中 的更改 看起来没问题,请将其推送到远程存储库:
git push upstream gh-pages
1
2
2
设置 gh-pages
为您的发布分支
为了将您的 gh-pages
分支用作发布分支,您需要在GitHub UI中配置存储库。 一旦GitHub意识到您已经创建了这个分支,这很可能会自动发生。 您还可以从GitHub项目中手动设置分支:
- 转到 设置 → GitHub页面
- 在 来源中 ,选择“ gh-pages分支”,然后选择“ 保存” 。 如果未启用该选项,则可能尚未创建分支,或者尚未将分支从本地计算机推送到GitHub上的托管存储库。
片刻之后,您将在GitHub Pages站点上看到更新的内容。
放入脚本
要自动执行这些步骤,可以创建具有以下内容的脚本:
publish_to_ghpages.sh
#!/bin/sh
if [ "`git status -s`" ]
then
echo "The working directory is dirty. Please commit any pending changes."
exit 1;
fi
echo "Deleting old publication"
rm -rf public
mkdir public
git worktree prune
rm -rf .git/worktrees/public/
echo "Checking out gh-pages branch into public"
git worktree add -B gh-pages public upstream/gh-pages
echo "Removing existing files"
rm -rf public/*
echo "Generating site"
hugo
echo "Updating gh-pages branch"
cd public && git add --all && git commit -m "Publishing to gh-pages (publish.sh)"
#echo "Pushing to github"
#git push --all
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
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
如果工作目录中有待更改,这将中止,并且还确保删除所有先前存在的输出文件。 调整脚本以使其具有品味,例如,如果您不需要在推送之前查看gh-pages分支,则包括最后一次推送到远程存储库。