關於線上靜態頁面資源更新的一些經驗分享
目錄
- 關於線上靜態頁面資源更新的一些經驗分享
關於線上靜態頁面資源更新的一些經驗分享
最近在負責公司的後臺專案,包括了後端和前端。後端直接編譯完打成jar包直接上線執行沒什麼問題。但是前端的頁面檔案更新每次都要把頁面給運維,然後告訴運維路徑讓運維挨個替換,當然也可以整包替換,
但是如果檔案比較多的情況下,整包替換就不合適了。因為現在開發的專案版本控制基本必不可少了,這時候可以利用版本控制軟體來生成Patch檔案,然後直接交給運維,讓運維在專案根目錄打補丁就行。
關於Linux的Patch
如果熟悉linux的話對patch命令肯定不陌生,linux很多軟體程式碼的更新都用的是patch,相較於重新下載整份原始碼,patch檔案體積小隻需要更新改動的地方。patch本身和diff經常一起用的,具體的用法我就不詳細介紹了,網上已經說明很多了。這裡用來更新頁面的思路其實和linux中的思想是一樣的。
常用的的格式:
patch -d /root/amqp -p0 -E</root/amqp/0001-.patch
-d 指明瞭patch的工作目錄,此處指原始碼的根目錄。
-pN中的N表示忽略路徑中的第幾層。如patch檔案中路徑為a/src/main/java/spittr/chen/AlertServiceImpl.java,如果需要忽略前面的a目錄就需要指明-p1
-E表示如果檔案更新之後為空則刪除這個檔案。
-R表示反向,回滾更新
-b用於備份改動的檔案,用於重要的操作
關於git
git作為最流行的版本控制軟體也實現了diff和patch的功能,git匯出patch有兩種方式,git diff和git format-patch 。git diff用於生成通用的patch格式,而format-patch用於生成git專用的patch檔案。不過我經過測試,兩種生成的檔案都是和linux的patch命令相容的,也就是說兩種生成的檔案都可以直接使用patch命令來打補丁。不過這裡有一個需要的需要注意的地方就是,git生成的patch檔案中,在指明影響的檔案路徑時,預設原來的檔案前面會加上路徑a/,而改動後的檔案前面會加上路徑b/(我查看了git官網文件也有提及,但是不清楚為什麼要預設這麼寫,如果有知道的希望能告知下),如下所示:
diff --git a/src/main/java/spittr/chen/AlertServiceImpl.java b/src/main/java/spittr/chen/AlertServiceImpl.java new file mode 100644 index 0000000..7c8ebd1 --- /dev/null +++ b/src/main/java/spittr/chen/AlertServiceImpl.java
所以在linux中使用的時候需要指明引數-p1來忽略第一層路徑,或者在使用git diff命令時加上引數--no-prefix。
其實git本身也有對應於linux patch的命令apply,還有更為強大的am。但是要求是必須是git專案。如果使用的git專案,推薦使用git的命令尤其是am命令,他必須使用format-patch生成的檔案,format-patch檔案攜帶了提交的記錄包括作者,提交註釋,日期等等,資訊和pull差不多。關於這兩個命令網上有很多的教程這裡不再說明。對於我這個需求。已經因為線上的頁面檔案一般是資料夾的形式存在,所以使用linux的patch即可滿足需求。
關於Idea
如果你用的開發工具是Idea的話,idea可以很方便的生成patch檔案。如下圖:
在版本的控制的log標籤頁,選中自己需要生成補丁的提交記錄右鍵即可生成patch檔案。