每次我运行 Jekyll 时,它都会破坏目标文件夹的全部内容。问题在于我的目标目录是一个小型 git 存储库,我用它来推送到我的实际服务器。有没有办法阻止 Jekyll 删除 Git 文件,这样我就不必生成内容然后复制它们?
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
.
你看过 Jekyll wiki 的部署部分吗?- https://github.com/mojombo/jekyll/wiki/Deployment。它清楚地解释了 Jekyll 部署步骤。
你为什么要从目的地推?那很不好!从其他克隆推送它。
我也想要这个设置。找到了修复 Jekyll 的拉取请求,使其不会删除 .git 目录: https ://github.com/mojombo/jekyll/pull/337
在那里阅读我的评论,如:
- 该修复程序实际上略有损坏(使其成为 .git 而不是 .git$)
- 我相信更好的解决方案是将它作为配置变量来处理其他文件,如 .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 的完整提交历史,但找不到任何解释为什么它会这样做)
@manojlds,我不确定我是否理解,TPW 的默认 _config.yml (我已经自定义)将 _site 目录的位置显示为“。”,在博客目录中也包含 Git 存储库。有没有办法移动这个目录,这样它就不会到处乱扔文件?我想我在这里遗漏了一些东西,因为 Jekyll 拒绝生成任何东西,或者发生了上述情况,我必须清理留下的烂摊子。
对于 _site 可以(或应该)位于何处,我们是否有最佳实践?
编辑:看着它,我实际上看到以下内容:
资源: 。目的地:./_site
终端找不到 jekyll gem(通过 RVM 安装)的事实可能是我的问题的原因,而不是 _site 的位置。
我实际上用过
git clone --separate-git-dir repo git@github....
并解决了这个问题。