将Jekyll站点发布到Git存储库

时间:2011-05-17 06:18:21

标签: git jekyll

每次我运行Jekyll时,它都会破坏目标文件夹的全部内容。这个问题是我的目标目录是一个小的git repo,我用它来推送到我的实际服务器。有没有办法阻止Jekyll删除Git文件,这样我就不必生成内容然后复制它们了?

5 个答案:

答案 0 :(得分:5)

你可以:

  • 你的git repo在别处(即不在受Jekyll部署影响的目录中)
  • 让你的脚本将git repo推送到你的服务器,指定一个GIT_WORK_TREE变量,目标文件夹为值

换句话说,工作树目录本身不需要.git 它可以在其他地方,您的脚本可以通过GIT_WORK_TREE--work-tree=<path>选项引用实际工作树。

如果您的脚本是Jenkyll复制/删除文件的目标目录的一部分,您可以执行相反的操作,并提及.git实际上与GIT_DIR变量或--git-dir=<path>的位置选项。

要将新的--work-dir作为您的回购的默认选项,您可以使用git-config --add core.worktree ../PATH/,其中PATH - 相对于.git的实际工作目录的路径。

答案 1 :(得分:2)

您是否看过Jekyll维基的部署部分? - https://github.com/mojombo/jekyll/wiki/Deployment。它清楚地解释了Jekyll的部署步骤。

你为什么要从目的地出发?那很不好!从其他克隆推送它。

答案 2 :(得分:1)

我也想要这个设置。找到这个修复Jekyll的拉取请求,使其不删除.git目录: https://github.com/mojombo/jekyll/pull/337

在那里阅读我的评论,如下:

  1. 修复实际上稍微破了(使它成为.git而不是.git $)
  2. 我相信更好的解决方案是将此作为配置变量来处理其他文件,例如.svn。
  3. 无论如何,我的Jekyll系列现在写着:dest_files << file unless file =~ /\/\.{1,2}$/ || file =~/\/\.git/

    效果很好!我甚至使用octopress(只需将你的deploy_dir更改为public)并在Rakefile中注释掉以下行:

        #  (Dir["#{deploy_dir}/*"]).each { |f| rm_rf(f) }
        #  Rake::Task[:copydot].invoke(public_dir, deploy_dir)
        #  puts "\n## copying #{public_dir} to #{deploy_dir}"
        #  cp_r "#{public_dir}/.", deploy_dir
    

    现在你的公共目录(而不是_deploy dir)可以是你的github repo来发布你的网站(在我的情况下分支的子模块或我的父仓库)

    对于octopress公开和_deploy似乎毫无意义,但我很高兴听到为什么要分割public和_deploy dirs的其他原因 - 除了Jekyll删除.git目录。 (我阅读了octopress的完整提交历史,但找不到任何解释为什么这样做的方式)

答案 3 :(得分:0)

我实际上用过

git clone --separate-git-dir repo git@github....

并解决了这个问题。

答案 4 :(得分:0)

@manojlds,我不确定我理解,TPW的默认_config.yml(我已经自定义)将_site目录的位置显示为“。”,在博客目录中也包含Git仓库。有没有办法移动这个目录,以便它不会在整个地方喷出文件?我想我在这里遗漏了一些东西,因为要么Jekyll拒绝生成任何东西,要么发生上述情况,我必须清理留下的烂摊子。

对于_site可以(或应该)所在的位置,我们是否有最佳实践?

编辑:看着它,我实际上看到了以下内容:

来源:。 目的地:./_ site

终端无法找到jekyll gem(通过RVM安装)的事实可能是我的问题的原因而不是_site的位置。