我将发布一个我设置的解决方案,该解决方案利用GitHub Pages已使用Jekyll的事实,而该公司已经在使用Automatic Page Generator。
git checkout gh-pages
mkdir _layouts
mv index.html _layouts
git checkout master -- README.md
mv README.md index.md
- 将以下文本添加到
index.md
---
layout: index
---
您还需要打开index.html
文件并进行以下更改:
从README.md
文件的Markdown中删除呈现的HTML 。通常在<section>
或<article>
标签之间。将该HTML替换为文本,{{ content }}
这将使我们可以将该文件用作jekyll。我们将布局应用到的文件将放置在content标签所在的位置。
找到您的项目页面主题的CSS。对我来说,这是一条类似于以下内容的行:
<link rel='stylesheet' href='stylesheets/stylesheet.css' />
这需要更改为
<link rel='stylesheet' href='{{ site.path }}/stylesheets/stylesheet.css' />
- 您网站上存储的任何其他资产(将用于此布局)也都需要加上前缀
{{ site.path }}
。
这样,Jekyll将markdown文件呈现为目录中index.html
布局的内容_layouts
。为了不仅针对README.md文件而且还对您在master分支中可能具有的其他文档进行此过程自动化,我采取了以下步骤:
创建名为的文件,post-commit
其中包含以下内容:
#!/bin/bash
###
### The following block runs after commit to "master" branch
###
if [ `git rev-parse --abbrev-ref HEAD` == "master" ]; then
# Layout prefix is prepended to each markdown file synced
###################################################################
LAYOUT_PREFIX='---\r\nlayout: index\r\n---\r\n\r\n'
# Switch to gh-pages branch to sync it with master
###################################################################
git checkout gh-pages
# Sync the README.md in master to index.md adding jekyll header
###################################################################
git checkout master -- README.md
echo -e $LAYOUT_PREFIX > index.md
cat README.md >> index.md
rm README.md
git add index.md
git commit -a -m "Sync README.md in master branch to index.md in gh-pages"
# Sync the markdown files in the docs/* directory
###################################################################
git checkout master -- docs
FILES=docs/*
for file in $FILES
do
echo -e $LAYOUT_PREFIX | cat - "$file" > temp && mv temp "$file"
done
git add docs
git commit -a -m "Sync docs from master branch to docs gh-pages directory"
# Uncomment the following push if you want to auto push to
# the gh-pages branch whenever you commit to master locally.
# This is a little extreme. Use with care!
###################################################################
# git push origin gh-pages
# Finally, switch back to the master branch and exit block
git checkout master
fi
编辑:我为README.md
文件和降价更新了上面的脚本,docs/*
以都使用相同的布局文件。这是一个比以前更好的设置。该脚本位于您的.git/hooks/
目录中。bash必须在您的道路上。
_config.yml
使用以下内容创建文件
markdown: redcarpet
path: http://username.github.io/reponame
上面的脚本还同步docs/*
了在master
分支目录中找到的markdown文件,以便它们也可以在GitHub Pages站点上查看。如果您包含以下jQuery函数,以便.md
从gh-pages
分支的锚点剥离扩展名,则可以相对链接到这些文档。您可以index.html
在_layouts
目录中添加以下脚本:
$(document).on('ready', function () {
$('a').each(function (i, e) {
var href = e.href;
if (href.search('.md') > 0)
$(this).attr('href', href.split('.md')[0]);
});
});
编辑:我在存储库中更改了上面的代码,这是一种快速而肮脏的方法,但是,如果您了解我的意思,它将无法在所有情况下正常工作。例如,company.mdata.md
不会处理markdown文件正确地。为了解决这个问题,我将其更新为以下脚本,该脚本会更仔细地检出href并删除扩展名(如果找到)。我还使脚本更加通用,允许通过更改ext
变量来删除其他扩展名。这是代码:
$(function () {
$('a').each(function () {
var ext = '.md';
var href = $(this).attr('href');
var position = href.length - ext.length;
if (href.substring(position) === ext)
$(this).attr('href', href.substring(0, position));
});
});
我想在CoryG89 / docsync上设置一个示例存储库,如果您想了解所有这些功能如何协同工作,可以在此处找到项目页面。
README.md
版本推送到GitHub页面的远程脚本?