1. 程式人生 > >工作中遇到的svn 命令總結----不斷更新

工作中遇到的svn 命令總結----不斷更新

2011-11-09 更新 --------------------------------------------------------------------------------------------- 1) 將修改後的檔案提交到版本庫 命令: svn commit 檔名 -m "註釋內容" 簡寫:svn ci 檔名 -m "註釋內容" 比如,將修改後的android2.3/packages/apps/DeskClock/res/layout-land/desk_clock.xml提交到版本庫: a)  在android2.3/packages/apps/DeskClock/res/layout-land/下使用: svn ci -m packages/apps/DeskClock/res/layout-land/desk_clock.xml  "修改了desk_clock.xml檔案中的時鐘第20行" b)  cd到packages/apps/DeskClock/res/layout-land/,再svn ci -m "修改了desk_clock.xml檔案中的時鐘第20行"  2) 將新增加的檔案“預定新增到版本庫” 命令:svn add 檔名/目錄 作用: 將新的檔案預定新增到版本庫中(實際上並沒有真正地新增到版本庫中),前提是,版本庫中沒有這個檔案,這個檔案必須是新的。svn add之後,還必須使用svn ci 才能真正的提交到版本庫中去。 例1:將新增加的android2.3/packages/apps/DeskClock/res/layout-land/desk.xml新增到版本庫中去: a) 在android2.3/packages/apps/DeskClock/res/下使用: svn add android2.3/packages/apps/DeskClock/res/layout-land/desk.xml b) cd到packages/apps/DeskClock/res/layout-land/ svn add desk.xml
例2: 假如有一個目錄:rep1/rep2/rep3/a.xml,這個目錄和子目錄都是新建立的,現在要想把這個目錄和子目錄以及子目錄中的所有檔案都新增到版本庫中去,怎麼辦? 方法:cd到rep1目錄的父目錄中,然後svn add rep1,這個命令會遞迴地把rep1以及子目錄和子目錄中的所有檔案都“預定提交到版本庫”中,然後再svn ci rep1 -m "註釋內容”,這樣就可以遞迴地把rep1以及子目錄和所有檔案真正地提交到伺服器中。 3) 將版本庫同步到當前專案中,或者說將當前版本更新到版本庫中某個版本 命令:svn up -r x test 表示將版本庫中的某個檔案test或者原始碼同步到版本x 例子: 假如版本庫中有一個版本27,我想把當前專案同步到版本27,則可以使用: svn up -r 27 注意: a. 使用svn up表示從伺服器上同步檔案,預設情況下同步到最新版本; b. 要區分up和ci的區別,up是把當前專案更新到版本庫中的某個版本,而ci是把當前檔案或者某個目錄更新到版本庫中,如果有新檔案,則必須先使用add再ci;
c. svn up只會把更新伺服器上新的檔案,而不改變本地已經修改的尚未提交到伺服器上的檔案。 --------------------------------------------------------------------------------------------- 2012.4-13 更新svn ci 和 svn add ---------------------------------------------------------------------------------------------  如果要提交這個dir1目錄以及該目錄下包含的所有新增的檔案,那麼使用: svn add dir1 然後使用svn ci -m "註釋內容" 即可將新增加的目錄和該目錄中的所有檔案都提交到版本庫中了。 注意:這種方式會導致一個問題:假如編譯核心後,這個目錄dir1下面會生成一些.o檔案和其他一些目標檔案,而這些目標檔案是不能提交到伺服器的,這種情況下有兩種解決方法: 一:直接把這些生成的.o檔案和不需要的檔案刪除掉,然後再svn add dir1。這種方法的缺點就是需要重新編譯。 二:不刪除生成的.o檔案和其他檔案,先使用svn add --depth=empty dir1 將這個目錄新增,而並不新增目錄下面的其他檔案,然後再svn ci dir1提交這個空目錄,最後再以這種方式:svn add ./dir1/fie_a 新增該目錄下的其他指定的檔案,然後再svn ci ./dir1/fie_a 就可以了,這避免了勿提交不需要的檔案。這種方法的缺點就是對於提交較多檔案時不方便。 --------------------------------------------------------------------------------------------- 2012.5.10 更新 --------------------------------------------------------------------------------------------- 檢視修改的所有的log記錄:svn log 檢視某個具體版本號的所有修改的記錄: svn log -v  -r n 注:n是某個版本號 例子: 假如要檢視320這個版本號的修改記錄,就用:svn log -v -r 320 --------------------------------------------------------------------------------------------- 2012.6.6 更新 --------------------------------------------------------------------------------------------- 要比較兩個版本有什麼差異,或者說想知道某個版本和之前的版本相比到底修改了哪些內容,用diff命令即可: svn diff -r m:n path

例如:svn diff -r 200:201  x.c (對x.c這個檔案的版本200和版本201比較差異) 然後終端會出現修改的記錄,減號表示舊版本中的,加號表示新版本中要新增的內容,@@符號後面第一個是修改後的行數。 --------------------------------------------------------------------------------------------- 2012.8.28 更新 --------------------------------------------------------------------------------------------- svn up (svn update) 狀態縮寫含義:   A:add,新增  C:conflict,衝突  D:delete,刪除  M:modify,本地已經修改  G:modify and merGed,本地檔案修改並且和伺服器的進行合併  U:update,從伺服器更新  R:replace,從伺服器替換  I:ignored,忽略


---------------------------------------------------------------------------------------------
2013.06.19 更新 --------------------------------------------------------------------------------------------- 在windows下遇到svn ci失敗的bug,如下: Command: Commit  
Error: Commit failed (details follow):  
Error: Working copy  
Error:  '\\172.16.1.18\backup\zhulf\MXDongle\amlogic8726_0427\uboot\customer\board\configs'  
Error:  locked  
Error: sqlite: attempt to write a readonly database  
Error: sqlite: attempt to write a readonly database  
Completed!:    遇到這個問題,是因為檔案被別人許可權鎖住了,必須自己獲得鎖才可以提交。 先在windows下單獨把這個檔案所在的目錄checkout下來,然後右鍵選擇這個要提交的檔案,選擇TortoiseSVN -> Check for modifications,系統會彈出一個對話方塊,對話方塊中會顯示這個要提交的檔案,再右鍵單擊這個檔案,選擇get locked,然後會彈出一個對話方塊,勾選左下角的rend 對話方塊,再單擊確認按鈕,然後在第一次彈出的對話方塊中會看到這個檔案獲得鎖了,鎖的許可權是自己的名字了,這表明自己可以提交該檔案。然後第一次出現這個對話方塊中右鍵單擊該檔案,選擇committe即可提交到伺服器上。


---------------------------------------------------------------------------------------------
2013.07.05 更新 --------------------------------------------------------------------------------------------- 取消所有本地編輯,就用svn revert files/directory 比如我修改了一個本地檔案,還沒有提交,現在發現這個修改不正確,不想修改了,就可以使用svn revert 取消修改即可
---------------------------------------------------------------------------------------------
2013.08.10 更新 --------------------------------------------------------------------------------------------- 把本地資料匯入到svn 伺服器:svn import 比如說:先在本地下載了android4.2原始碼,然後必須先匯入到svn伺服器,才能在svn 伺服器上svn co到本地進行操作。意思就是說,你要想使用svn操作原始碼,必須先把原始碼放到svn 伺服器上,而這個動作就是svn import。 svn import    -m   "New the source base"      test/      svn://192.168.1.9/sis685base/sis691qg           --no-ignore 
-m 表示新增一個註釋,註釋內容是雙引號裡面的內容 test就是本地原始碼目錄,需要匯入到svn伺服器上的svn://192.168.1.9/sis685base/sis691qg 目錄中 svn://192.168.1.9/sis685base/sis691qg 就是svn伺服器上原始碼的位置
--no-ignore 表示不忽略任何檔案,全部import到svn伺服器上去 敲入這個命令後,終端回顯: Adding XXX... 表示先新增到快取中,最後新增成功時會顯示諸如: Committed revision 1. 的提示 ---------------------------------------------------------------------------------------------
2013.08.21 更新 --------------------------------------------------------------------------------------------- 如何檢視當前已更新的版本? svn info 比如: svn info
Path: .
Working Copy Root Path: /disk4/android4.2

Revision: 167
Node Kind: directory
Schedule: normal
Last Changed Author: xiaozhu
Last Changed Rev: 167
Last Changed Date: 2013-08-17 18:14:03 +0800 (Sat, 17 Aug 2013)
可以看到,當前已經更新到167版本 ---------------------------------------------------------------------------------------------
2013.11.7 更新 --------------------------------------------------------------------------------------------- svn up出現衝突,如何解決? 原因是本地修改了某個檔案,沒有提交伺服器上已經有人提交了這個修改。兩個檔案一樣導致衝突 把本地檔案先svn revert,而後svn up 或者手動把衝突的檔案先備份起來,把本地恢復到最新,而後對比衝突的檔案,找出差異,最後修改再提交。
注:如轉載本文請註明出處。