通常在項目或者產品開發流程中,先是開發人員在本地作好開發及測試,其中可能包含不少用於測試用的目錄以及源代碼文件,在部署前每每會有一個build過程。web項目最終build產生出優化生產環境下減小http請求的bundle js,已經有了sprite image外加css代碼的適合生產部署的系統。在部署的時候,不少文件可能並不想部署到服務器上去。如何處理?css
一個可行的策略及步驟以下:git
1. 使用.gitattributes文件中的export-ignore來指定哪些文件將不被打包到部署包;github
2. 使用git archive命令將master或者integration等branch的內容打包: git archive intergation -o release.zipweb
3. 將上述release.zip文件解壓後便可在生產系統中部署。sass
以上3個步驟已是能夠工做了。可是可能仍是有待改進。好比咱們releaes的package也但願在一個repo中作好版本控制,也就是但願放到repo中。同時,咱們可能還有一個本地最後測試production release的需求。你固然能夠另外建一個repo和目錄來專門存放這個包,而且搭建對應的本地生產測試環境。但筆者建議更進一步,也就是使用同一個repo,可是又不但願看到開發repo中太多的歷史信息。那麼能夠繼續下面幾個步驟:服務器
4. 建立一個deliverable的branch,專門用於保存git archive產生的發佈包,並用於本地生產測試。 測試
git checkout --orphan deliverable // 建立deliverable的orphan branch,該分支上將保存全部release包 git rm -rf . // 因爲orphan分支建立後全部index的內容都將自動包內含integration分支的內容,咱們須要所有刪除
5. 將archive integration生成的發佈包解壓後放到deliverable分支的根目錄中。這時deliverable就僅僅包含了乾淨的發佈包文件目錄。優化
6. 使用該發佈包繼續測試是否work,確認ok後,直接git a . git commit便可。ui
7. 之後有新的版本發佈的話,重複第2.步到第6步便可。spa
使用git archive命令能夠很好地拉取git repo中的一個snapshot,同時在.gitattributes文件中指定歸檔策略,將一些沒必要要的文件不放在部署服務器上。
# used to remove files from deployment using `git archive` # git files .gitattributes export-ignore .gitignore export-ignore # drush files build.make export-ignore patches.txt export-ignore # zen 5.x files sites/all/themes/*/sass export-ignore sites/all/themes/*/sass-extensions export-ignore sites/all/themes/*/images-source export-ignore sites/all/themes/*/fonts export-ignore sites/all/themes/*/config.rb export-ignore sites/all/themes/*/STARTERKIT export-ignore
最後執行如下命令生成對應的包
git archive master | bzip2 -9 > latest.tar.bz2
相似gh-pages方法部署
https://coderwall.com/p/-bcoua/how-to-create-gh-pages-branch
https://stackoverflow.com/questions/19980631/what-is-git-checkout-orphan-used-for
https://stackoverflow.com/questions/4750520/git-branch-gh-pages
https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/
https://gist.github.com/chrisjacob/833223