Subversion的簽出、更新、新增檔案目錄、拷貝移動檔案和處理合並衝突
本文總結Subversion常用的功能,以備索引。
1. 簽出
a) 使用svn checkout(co)命令從專案目錄中取出東西並且新建一個工作拷貝。
b) 不指定名稱則使用原檔案目錄名。Svn checkout svn://192.168.195.54/simple將svn目錄的simple專案拷貝到當前目錄下的simple下。
c) 指定新目錄名為svn checkout svn://192.168.195.54/simple simpleNewName。
d) 可以在checkout後加上版本名稱如:svn checkout –r 7 svn://192.168.195.54/simple simpleNewName為拷貝第7版程式到simpleNewName下。
e) 使用svn info simpleNewName可以瞭解拷貝資訊。
2. 保持更新
a) 保持一小時更新一次的頻率。
b) Svn update命令來更新,如果再子目錄,則只更新子目錄。
c) 可以指定多個檔案或者目錄,如svn update build.xml scr/ test/
d) Svn的update返回狀態為A新增,U更新,D刪除,G修改合併,C衝突。
3. 新增檔案和目錄
a) Svn add dir 只是記住了新增到倉庫中的檔案的名字,並沒有實際把改動提交,必須在使用commit命令。
4. 拷貝、移動檔案和目錄
a) 對檔案的拷貝和移動,都最好通過svn命令進行。
b) Svn copy from.txt to.txt;from.txt拷貝一份為to.txt。再svn commit –m‘xxxx’;提交,使用svn log to.txt檢視檔案狀態。
c) 重新命名檔案svn move a.java renew.java將a.java重新命名為renew.java,再提交svncommit –m “xxx”。這樣做的好處是保留了檔案的拷貝記錄。
d) 重新命名目錄svn move a b將目錄重新命名,最後提交。
e) 以上命令在本地工作目錄操作,也可以在客戶端使用URL操作:svn move –m “xxx” \ svn://192.168.195.54/simple
5. 檢視修改內容
a) Svn diff a.txt檢視上次在專案倉庫更新了工作拷貝後修改了什麼。可在不連線伺服器的情況下,藉由以往歷史版本推出什麼修改了。
b) 比較版本之間的差異svn diff –r19:20 clock.java,時間之間的差異svn diff -r{"22:10"},最新版本svn diff – r HEAD,基準版本svn diff –r BASE,最後改動版本svn diff –r COMMITTED,前一個版本svn diff –r PREV。eg.svn diff –r PREV:BASE a.java
c) 生成補丁檔案svn diff > mychangs.patch;補丁的應用patch –p0 –I mychanges.patch。這個功能可以把修改程式碼臨時性匯入系統中,不過要注意倉庫的同步。
6. 處理合並衝突
a) AB程式設計師更新最新程式碼,A程式設計師修改程式碼上傳後,B使用者繼續修改同一檔案後上傳戳先錯誤。使用svn update 命令來檢查,發現衝突,解決衝突的方法有三種:
i. 扔掉自己的改動:svn revert a.txt,svn update a.txt
ii.扔掉倉庫中的改動cp a.txt.mine a.txt本地檔案拷貝到倉庫,svn resolved a.txt說明解決完成。
iii.手工修改<<<>>>部分程式碼,最後提交svn resolveda.txt。
以上修改完成後,就可以update,確認無誤後commit程式碼。