如何防止GitHub Pages的“自动生成器”在重新生成网站之前删除所有内容?

17
我为我的小项目创建了一个精美的GitHub Pages 网站,并将其他页面添加到gh-pages分支中。 我的问题是,每次我从“设置=>自动页面生成器”重新生成网站时,所有内容都会被清除,我必须手动恢复文件。 有没有办法防止或解决这个问题? 如果自动生成器只覆盖而不删除现有文件,那就好多了。
4个回答

37
  1. 检出 gh-pages 分支。
  2. 创建目录 _layouts
  3. 移动 index.html_layouts 目录下。
  4. 编辑 _layouts/index.html 文件,将内容部分的内部 HTML 替换为 {{content}}
  5. 新建文件 index.md
  6. 将自动页面生成器的 Markdown 内容粘贴到 index.md 中。
  7. index.md 前面加入以下内容:

    ---
    layout: index
    ---
    
  8. 创建_config.yml
  9. _config.yml中包含以下内容:

    markdown: kramdown
    kramdown:
       auto_ids: true
    

    这一步是为了匹配GitHub的Markdown语法。

  10. 添加并提交更改,然后将分支推回GitHub。

现在,您只需从GitHub源代码浏览器中的gh-branch编辑index.md,它将使用jekyll自动更新,并不会影响您的gh-branch中的任何内容。

您还可以使用占位符{{page.varname}}使布局中的更多项目可编辑,然后在index.md的头部添加varname:your text


3
非常感谢,这正是我一直在寻找的!不过为了让它正常工作,我不得不将 layout:index 更改为 layout: index。否则就会出现 "deep_merge" 错误。 - chris838
谢谢你的回答!事实上,为什么Github不提供至少一个按钮来完成这个操作呢?</rant> - Blaisorblade
它可以工作,但它不会创建页面生成器创建的锚点...也许有一些Jekyll设置可以做到这一点? - esp
1
好的,我已经添加了Jekyll配置以包含ID,使#链接正常工作。 - esp
GitHub会在将来转换为仅使用kramdown渲染,因此配置应该改为使用它生成id,而不是redcarpet。详情请参考https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0 - jbtule
现今,2016年,是否存在更加简单的流程? - Peter Krauss

2

经过多次尝试后,我找到了解决方案。

我注意到我的网站唯一更改的文件是index.html,其余生成的站点都相同。在index.html中,有一个<section>content</section>标签,其中包含从markdown生成的html。

因此,我创建了两个文件header.incfooter.inc,它们包含主页的“静态”部分。内容部分应该从README.md文件生成。

我发现github提供了一个API,可以以原始模式渲染markdown为html。点击这里查看详细信息。
所以,拼图的最后一块是获得指向我的项目的README.md的永久链接,带有RAW内容; 我恰好在这里找到了。

因此,我编写了这个简单的bash脚本,仅重新生成index.html,而不触及其余站点:

#!/bin/sh
PG_DIR=$(dirname $0)
RAW_README_URL=https://raw.github.com/lviggiano/owner/master/README.md
GITHUB_API_URL=https://api.github.com/markdown/raw

cat $PG_DIR/header.inc
curl -s $RAW_README_URL | curl -s --data-binary @- -H 'Content-Type: text/plain' $GITHUB_API_URL 
cat $PG_DIR/footer.inc

然后我只需按照以下方式启动脚本:
$ cd myproject
$ git checkout gh-pages
$ git pull origin gh-pages:gh-pages
$ ./bin/autogen > index.html
$ git commit -m "updated index.html from latest README.md" index.html
$ git push origin gh-pages:gh-pages

请查看此处的实现细节。

我测试了“闰年”布局;但我认为它也适用于其他布局。


0
不,不可能。当你进行“生成”操作时,GitHub会清除gh-pages存储库。你现在所做的就是最好的办法。另一个选择可能是不使用GitHub页面生成器来更改样式,而是找到样式的源代码(它们可能在GitHub上某个地方),通过提交更改来手动更改它们(替换CSS文件和其他微小的调整)。

0

你可以使用exclude选项配置Jekyll以跳过某些目录。

(请注意,Jekyll还有一个keep_files选项--用于目标目录中的文件。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接