以前一直用 SVN 圖形界面,隻會使用頁面 update, commit ,branch 等功能,前兩天為了打一個docker 鏡像,在centos 上安裝了SVN ,發現命令中有一個 patch,不明所以,因此記錄一下。
定義patch 中文意思是補丁,顧名思義在版本管理系統中就是給系統的代碼打補丁。公司裡面用的比較少,因為大家一個團隊使用一個SVN 地址提交代碼,但是在全世界程序員參加的開源項目使用這種方式就不行了,需要有專門人來做代碼 review 和 merge。每個人 fork 一個分支,開發完之後生成一個 patch 文件給原項目人員,由他們審查之後決定要不要合并到主幹代碼中(GitHub 裡叫 Pull Request)
放一張流程圖:
類 Unix 系統中都會自帶 patch 和 diff 程序,可以使用這兩個來演示一下補丁的使用。
我們現在有兩個文件(SVN 系統中是本地跟遠程文件diff,實際也是兩個文件)file1, file2,他們的文件内容分别如下:
$ cat file1
this is file1
nothing more
line 3
$ cat file2
this is file2
nothing more
使用 diff 比較兩個文件:
$ diff -u file1 file2
--- file1 2018-09-07 10:57:28.853583937 0800
file2 2018-09-07 10:57:06.062578590 0800
@@ -1,3 1,2 @@
-this is file1
this is file2
nothing more
-line 3
這就是 patch 文件的格式,可以看到是使用特殊的符号來标識每行内容的增減,修改,最開始是文件的時間戳信息。我們創建一個 file-diff.patch文件,然後就可以用patch 程序來打上補丁。
$ diff -u file1 file2 > file-diff.patch
$ patch file1 file-diff.patch
patching file file1
$ cat file1
this is file2
nothing more
如果你同時修改了file1,patch 和file1 内容就可能産生沖突,這回生成file1.rej文件,這就需要你自己手動去解決沖突,合并代碼了。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!