无需版本控制RMarkdown输出的类gh-pages网页部署方案咨询
R Markdown 网站部署避冗余解决方案
我们日常使用bookdown、blogdown、distill等基于RMarkdown的R包搭建网站,默认通过GitHub Pages部署到username.github.io/repo格式的地址时,经常会遇到输出文件被误提交、仓库体积膨胀、提交记录冗余的问题,以下是两种符合要求的解决方案:
方案1:Git完全忽略输出文件,替代部署方式(URL保持不变)
该方案无需将输出文件纳入版本控制,部署全程支持命令行操作,网站访问地址和原gh-pages格式完全一致:
- 第一步:在项目根目录创建
.gitignore文件,添加所有网站输出相关的目录和文件,让Git完全忽略这些内容,示例配置如下:# 忽略常见RMarkdown网站输出目录 _book/ _site/ public/ # 忽略零散输出文件 *.html *.css *.js *_files/ - 第二步:配置GitHub Actions自动构建部署,在项目根目录新建
.github/workflows/deploy.yml文件,添加自动构建规则,后续仅需要通过git push命令推送Rmd源文件到主分支,GitHub服务器会自动完成网站构建、推送到gh-pages分支的全流程,本地完全不需要处理输出文件,最终访问地址依然是username.github.io/repo。
方案2:Git临时忽略输出文件,仅显式命令触发部署
该方案保留gh-pages的部署逻辑,仅在需要部署时执行单独命令提交输出文件,日常操作不会误提交:
- 同样先将所有输出目录和文件添加到
.gitignore中,日常git commit -a等操作不会触发输出文件的提交 - 在项目根目录新建部署脚本
deploy.sh,封装部署逻辑,示例内容如下:#!/bin/bash # 执行网站构建,根据你使用的R包替换对应构建命令 Rscript -e "blogdown::build_site()" # 强制添加被忽略的输出目录到暂存区 git add -f public # 生成专属部署提交 git commit -m "deploy: 网站内容更新" # 将输出目录推送到gh-pages分支 git subtree push --prefix public origin gh-pages # 清理主分支的部署提交记录,不影响正常开发提交 git reset HEAD~1 git rm -r --cached public - 后续需要部署时,仅需要执行显式命令
bash deploy.sh即可完成全流程,日常操作完全不会误提交输出文件。
内容的提问来源于stack exchange,提问作者Ratnanil
相关产品推荐
相关产品推荐

