Jekyll+Git+GitHub Pages使用求助:站点部署与分支管理
解决Jekyll + Git + GitHub Pages协同部署的问题
我来一步步帮你理清这几个关键点,解决你遇到的部署和分支管理问题:
一、如何部署_site文件夹?
你现在的问题是GitHub Pages加载了根目录的index.html,而不是_site里的内容,这是因为GitHub Pages的优先级规则:如果根目录存在静态HTML文件,它会直接加载,而不会触发Jekyll自动构建。这里有两种解决方案:
方案1:让GitHub Pages自动构建(推荐)
这种方式不需要你手动处理_site,GitHub会帮你完成构建和部署:
- 删掉仓库根目录的
index.html(这个文件会干扰Jekyll的自动构建); - 确保你的仓库里有Jekyll的核心源文件:
_config.yml、_layouts、_posts、页面Markdown文件等; - 打开你的GitHub仓库设置,找到「Pages」选项,将「Source」设置为「main/master分支」,并选择「/(root)」;
- 推送你的Jekyll源文件到main/master分支,GitHub会自动运行Jekyll构建,生成并部署
_site里的内容。
方案2:手动推送_site到gh-pages分支
如果你习惯本地构建_site,再手动部署,可以用这个方法:
- 确保你已经在本地生成了最新的
_site文件夹(运行bundle exec jekyll build); - 使用Git子树命令将
_site的内容推送到gh-pages分支:git subtree push --prefix _site origin gh-pages - 到仓库设置的「Pages」选项,将「Source」设置为「gh-pages分支」,选择「/(root)」;
- 之后每次本地构建完
_site,重复步骤2的命令即可更新部署内容。
二、创建新页面时的Git流程
不管用哪种部署方案,核心流程都是在主分支管理源文件,部署分支(或GitHub自动)处理静态文件:
对于自动构建方案:
- 切换到main/master分支:
git checkout main; - 创建新页面(比如在
_pages文件夹新建about.md,或直接在根目录新建); - 本地运行
bundle exec jekyll serve预览效果,确认没问题; - 提交源文件(注意不要提交
_site,把它加到.gitignore里):git add . git commit -m "Add new about page" git push origin main - 等待GitHub自动构建部署,几分钟后就能看到新页面了。
对于手动部署方案:
- 上述步骤1-4和自动构建一致;
- 本地构建生成最新的
_site:bundle exec jekyll build; - 推送
_site到gh-pages分支:git subtree push --prefix _site origin gh-pages; - 完成部署,等待GitHub Pages更新。
三、分支管理建议
清晰的分支分工能避免混乱,这里给你一套简单高效的管理方式:
- main/master分支:这是你的「开发分支」,专门存放Jekyll的所有源文件(配置、布局、文章、页面Markdown等),所有内容修改、新页面创建都在这个分支进行,永远不要在这里存放
_site的静态文件(把_site加入.gitignore); - gh-pages分支:这是你的「部署分支」,仅用来存放
_site生成的静态文件,不需要手动编辑这个分支的内容,完全通过构建命令推送更新; - 额外提示:如果需要测试新功能,可以创建临时分支(比如
feature/new-theme),测试完成后合并回main/master分支,再进行部署。
内容的提问来源于stack exchange,提问作者smorele




