5

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

4

5 回答 5

5

你可以有:

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

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

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

要将新--work-dir选项作为您的 repo 的默认选项,您可以使用git-config --add core.worktree ../PATH/, where PATH- 相对于.git.

于 2011-05-17T06:32:09.473 回答
2

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

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

于 2011-05-17T06:32:52.033 回答
1

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

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

  1. 该修复程序实际上略有损坏(使其成为 .git 而不是 .git$)
  2. 我相信更好的解决方案是将它作为配置变量来处理其他文件,如 .svn。

无论如何,我的 Jekyll 行现在是:dest_files << file unless file =~ /\/\.{1,2}$/ || file =~/\/\.git/

效果很好!我什至在使用 octopress(只需将您的 deploy_dir 更改为公开)并在 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 目录)可以是您的 github 存储库来发布您的站点(分支的子模块或我的父存储库)

使用 octopress 使用 public 和 _deploy 似乎毫无意义,但我很高兴听到拆分 public 和 _deploy 目录的其他原因 - 除了 Jekyll 删除 .git 目录。(我通读了 octopress 的完整提交历史,但找不到任何解释为什么它会这样做)

于 2011-11-15T03:47:40.003 回答
0

@manojlds,我不确定我是否理解,TPW 的默认 _config.yml (我已经自定义)将 _site 目录的位置显示为“。”,在博客目录中也包含 Git 存储库。有没有办法移动这个目录,这样它就不会到处乱扔文件?我想我在这里遗漏了一些东西,因为 Jekyll 拒绝生成任何东西,或者发生了上述情况,我必须清理留下的烂摊子。

对于 _site 可以(或应该)位于何处,我们是否有最佳实践?

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

资源: 。目的地:./_site

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

于 2013-03-06T16:18:25.790 回答
0

我实际上用过

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

并解决了这个问题。

于 2012-03-17T08:55:26.963 回答