關於線上靜態頁面資源更新的一些經驗分享


關於線上靜態頁面資源更新的一些經驗分享

最近在負責公司的后台項目,包括了后端和前端。后端直接編譯完打成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文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM