使用SVN、Git生成和應用patch的命令


    SVN和Git兩種版本控制系統生成和應用patch的區別。

一、SVN:

1、在指定版本間生成patch:

svn diff -r 421:438 > r421_438.patch        //是r421以后當前目錄的所有修改,不包括r421修改
diff -r 421:422    是r422的當前目錄的所有修改。
diff -c 422    跟上一行一樣,表示r422的changes。

2、svn應用patch:

  p1:數字1表示文件深度,即目錄,需要根據patch文件中修改路徑+當前所在目錄確定的.

  例如:項目TestAndroid的源碼目錄:..../TestAndroid/test/media/...

  test.patch文件中路徑:--- a/media/....
  其中a不是有效路徑,下述為根據當前所在目錄不同,對應的命令參數
  當當前所在目錄為test/時,patch -p1 ......
  當當前所在目錄為media/時,patch -p0 ......

二、Git:

1、生成patch

(1)兩個commit間的修改(包含兩個commit)【此時-o 后面是生成patch文件夾名,此時所有patch均在該目錄下】

  git format-patch <r1>..<r2>
  如:
  git format-patch d77aaac74845435744c49ae65511d9e1be79ed5c 046ee8f8423302f5070ca81b4e246516e919cd7a -o patchDir

(2)單個commit
    git format-patch -1 <r1>
    git format-patch -n <r1>    【從節點r1向前的n個節點的提交(包括r1)】    

(3)從某commit以來的修改(不包含該commit)【記住:此時並非生成一個patch文件;而是每個提交都會生成一個patch文件】
    git format-patch <r1>

2、檢查及應用patch

(1)把生成的patch文件拷貝到目標git目錄下
(2)檢查patch文件
      git apply --stat 0001-minor-fix.patch
(3)查看是否能應用成功
      git apply --check 0001-minor-fix.patch
(4)應用patch
      git apply 0001-minor-fix.patch    【僅應用,並未提交;查看狀態顯示為 M】
(5)另一方法:【應用並提交,不建議使用】
      git am -s < 0001-minor-fix.patch      【使用-s在提交記錄中會出現Signed-off-by信息,簽名信息】
      或   git am < 0001-minor-fix.patch    【根據具體情況而定】

3、原文參考:http://www.linuxidc.com/Linux/2014-09/106323.htm

4、關於git中patch的一點思考:

(1)在本地Git Bash中自測,git patch 針對某個目錄或文件的使用?

  上述情況不合理,patch不可能去針對某個目錄或文件;因為:修改一個bug時可能會涉及多個文件,這樣生成patch是按照某次提交來生成的,這樣才有意義,才是完成的。
  若僅針對某個文件生成patch,這很有可能不是一次完整的提交,也沒實際意義!

 


免責聲明!

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



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