1. 程式人生 > >Subversion的檢視改動歷史、放棄修改、反向合併

Subversion的檢視改動歷史、放棄修改、反向合併

        提交改動:首先更新svnupdate,發現問題,解決之後執行自動測試工具,測試完成後再提交程式碼,並且注意一定要附上註釋資訊svn commit –m “message”。這裡需要注意註釋資訊不是你修改的什麼,而是為什麼這麼修改。因為修改了什麼很容易通過diff命令檢視,而為什麼修改才對後來者有幫助。

        檢視改動歷史:使用svnlog 命令,帶檔名用svn log filename帶版本使用svn log –r19:21 filename帶冗餘資訊用svn log –r 24 –vfilename,需要注意的是在使用filename時,路徑必須切換到filename所在環境。例如命令列:D:\www.gongqingkui.cn\hello\src\demo>svn log -r 188 -v hello.java跟蹤了第188版本的hello.java所做的修改。

D:\www.gongqingkui.cn\hello\src\demo>svn log -r 188 -v hello.java
------------------------------------------------------------------------
r188 | gongqingkui | 2012-11-07 10:35:54 +0800 (星期三, 2012-11-07) | 1 行
改變的路徑:
   M /hello/src/demo/hello.java

為了開始整合測試做好提交工作
------------------------------------------------------------------------

        但是這個並不是太詳細,使用svnblame filename可以逐行檢視修改歷史,例如svn blame hello.java可以檢視程式碼所有的修改,結果為:

D:\www.gongqingkui.cn\hello\src\demo>svn blame hello.java
   187 gongqingkui packagedemo;
   140 gongqingkui publicclass hello {
   140 gongqingkui      public static void main(String[] args) {
   140 gongqingkui             System.out.println("hello");
   143 gongqingkui             System.out.println("newline.");
   144 gongqingkui             System.out.println("gongqingkui");
   188 gongqingkui              System.out.println(“整合測試開始”);
   140 gongqingkui      }
   140 gongqingkui }

        為了丟棄本地修改的程式碼,我們使用svn revert 命令來去掉改正。假設我們修改了許多程式碼,又不願意提交,最好使用revert命令而不是刪除。因為刪除有可能會出錯,而revert則不會。現在我們加了一行程式碼System.out.println("不願意提交的程式碼");使用svn status檢查發現:

D:\www.gongqingkui.cn\hello\src\demo>svn status
M       hello.java

        也就是說,發現我們對hello.java進行了修改,現在我們並不願意提交這個修改,想要去掉它。使用svn revert hello.java,再用svn status檢查發現修改已經去除了。

        反向合併:現在假設客戶在釋出版本程式中發現了一個bug(程式程式碼在某行沒有封閉)報告給了我們,這個錯誤是最新版本才有的,而稍舊版本則沒有,我們需要把舊版本合併到新版本中,就是反向合併。下面我們來修改下。

        首先使用svnupdate更新,執行log命令發現第192版本可能有錯。

D:\www.gongqingkui.cn\hello\src\demo>svn log
------------------------------------------------------------------------
r192 | gongqingkui | 2012-11-07 10:52:37 +0800 (星期三,2012-11-07) | 1 行
 
        為了測試錯誤,董**提交了一個不帶結束符號的輸出語句
------------------------------------------------------------------------

加上-v引數顯示冗餘資訊

D:\www.gongqingkui.cn\hello\src\demo>svn -r 192 -v log
------------------------------------------------------------------------
r192 | gongqingkui | 2012-11-07 10:52:37 +0800 (星期三,2012-11-07) | 1 行
        改變的路徑:
   M/hello/src/demo/hello.java
------------------------------------------------------------------------

         為了測試錯誤,董**提交了一個不帶結束符號的輸出語句

        以上程式碼顯示,董**在hello.java裡提交了一個錯誤,我們使用svn-v log hello.java檢視詳細記錄,發現最後一個版本192修改了程式碼。我們對比最後一個和倒數第二個版本:svn diff –r 192:191 hello.java,看出對某行程式碼進行的修改。現在我們發現這行程式碼191版本是正確的,我們準備將程式碼還原到第191版本,使用svn merge –r 192:191 hello.java進行反向合併,合併後提交即可。

        為了對更大程式碼進行撤銷,需要切換到相應目錄,執行svn merge –r 192:191 .命令,注意最後的.是表示當前目錄。檢視本地檔案修改使用命令svn status;