[譯] Hexo git deployer 刪除了提交歷史記錄該怎麼整?

原文:Hexo git deployer removes commits history? Let's do something about that!git

我發現 Hexo 是構建博客和應用許多知名的軟件開發原則的好工具,其中之一是自動化。這就是我決定將此博客與 Travis CI 集成以執行 GitHub pages 部署的緣由。但幾天以後我注意到一個重要問題 - 從 CI 服務器部署新版本的博客致使從 master 分支中刪除全部提交併從一次又一次地初始化提交開始。我花了一段時間才找到解決這個問題的工做方案。這篇博文解釋了這個問題的簡單解決方案。github

<!--more-->bash

爲何 hexo deploy 會首先刪除歷史記錄?

讓咱們從瞭解實際發生的事情開始。當你爲 git 部署選項運行 hexo deploy [1]命令時,Hexo 會建立一個名爲 .deploy_git 的隱藏文件夾,並將生成的文件從 public 文件夾複製到該文件夾​​。接下來,它初始化目標爲 Hexo 遠程部署分支的git存儲庫(若是它尚不存在),並從該文件夾執行 git push --force 到倉庫和你在 _config.yml [2]文件中定義的分支。服務器

清單1. 博客的部署配置hexo

deploy:
  type: git
  repo: git@github.com:wololock/wololock.github.io.git
  branch: master

若是你從本地計算機構建和部署博客,而且永遠不會刪除(或意外丟失)你的博客源代碼,你可能永遠不會遇到此問題。當你從未被擦除的工做空間執行此操做時,則存在具備完整歷史記錄的文件夾 .deploy_git,而且 hexo deploy 僅推送實際修改的那些文件。當你遷移到像 Travis CI 這樣的 CI 服務器時,這就變了,由於它使用乾淨的工做區和倉庫的新克隆執行構建。在這種狀況下,.deploy_git 文件夾根本不存在,將從頭開始從新建立。ide

那麼如何部署和保存歷史呢?

我發現解決方案很是簡單。之前我負責部署的 .travis.yml 文件部分看起來像這樣:工具

清單2. 之前的 Travis CI 部署配置spa

deploy:
  skip_cleanup: true
  provider: script
  script: hexo deploy
  on:
    branch: develop

只要我將更改推送到 develop 分支,它就會觸發 hexo deploy。在這種狀況下,它最終建立了一個新的 .deploy_git 文件夾並強制將初始提交推送到 GitHub 倉庫。而後,我作了一個小改進 - 我建立了一個簡短的 bash 腳本。code

清單3. 部署博客使用的腳本對象

#!/bin/bash

# 使用已部署文件初始化目標
git clone --depth 1 --branch=master https://github.com/wololock/wololock.github.io.git .deploy_git

cd .deploy_git

#從 ../public/ 複製以前刪除全部文件
# 這樣 git 能夠跟蹤上次提交中刪除的文件
find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null

cd ../

# 部署
hexo clean
hexo deploy

這個腳本徹底按照它在註釋中所說的那樣作:

  • 它將 master 分支從遠程存儲庫克隆到 .deploy_git 以獲取現有提交歷史記錄。
  • 而後它從 .deploy_git 中刪除全部非 git 對象存儲庫文件,所以從 public 文件夾複製文件將跟蹤已刪除的文件。
  • 最後 - 它執行常規部署的 hexo deploy 命令。

最後,這是在引入部署bash腳本後的部署配置部分:

清單4. 當前的 Travis CI 部署配置

deploy:
  skip_cleanup: true
  provider: script
  script: sh deploy.sh
  on:
    branch: develop

因爲這個解決方案,我可以保留站點更新的歷史記錄,並跟蹤使用給定站點更新實際修改的文件的更改。

github hexo history

最後的話

我但願你發現這篇文章頗有用。它描述了 Hexo + Travis CI + GitHub 用例的解決方案,但它能夠解決從 CI 服務器環境運行時其餘相似靜態站點生成器可能遇到的問題。

參考

  1. Documentation: https://hexo.io/docs/deployment
  2. https://github.com/wololock/w...
相關文章
相關標籤/搜索