Ubuntu下svn客戶端常用命令

Ubuntu下svn客戶端常用命令

1. 查看版本庫下文件和目錄列表:
svn list path
顯示path目錄下的所有屬於版本庫的文件和目錄
簡稱:svn ls

2. import一個工程到版本庫
如將本地目錄android_ori導入到版本庫svn://192.168.101.47:8888/SmartPhone/
svn import -m "New import" android_ori svn://192.168.101.47:8888/SmartPhone

需要注意以上命令只是將本地android_ori目錄下的文件傳到svn服務器的SmartPhone目錄下,不會在版本庫中創建目錄android_ori,如果希望創建目錄如android_r1則在URL後加android_r1:
svn import -m "New import" android_ori svn://192.168.101.47:8888/SmartPhone/android_r1

svn默認上傳會過濾掉一些文件,如.so, .a, .dll, .lib等,我們可以通過--no-ignore參數來改變限制上傳的文件,--no-ignore表示不過濾任何文件,即支持所有的文件上傳。
svn import -m "New import" --no-ignore android_ori svn://192.168.101.47:8888/SmartPhone/android_r1

3. checkout文件到本地目錄
svn checkout path
如:
$ mkdir android_r1_svn
$ cd android_r1_svn
$ svn checkout svn://192.168.101.47:8888/SmartPhone/android_r1 .
簡寫:svn co

4. 檢查文件狀態或者日誌
svn status [文件/目錄]
svn log [文件/目錄]
svn log -r6:8 [文件/目錄] 查看版本6到版本8之間的日誌
如:
svn status device/google
svn log device/google

5. 文件/目錄比較(工作拷貝與項目創庫中的比較)
svn diff [文件/目錄] 或者 svn diff -r HEAD [文件/目錄] -r HEAD:表示最新版本
如:
svn diff -r HEAD device/google

版本符號說明:
HEAD --------- 項目倉庫中的最新版本
BASE --------- 工作拷貝的基準版本(也就是checkout出來時的版本)
COMMITTED ---- 最後一次checkin的版本
PREV --------- COMMITTED之前的一個版本

6. 更新本地工作拷貝
svn update(up) [文件/目錄]
update時的一些文件標誌:
U ------ 表示文件被更新
G ------ 表示項目創庫中的文件和本地工作拷貝的文件合併到了一起
C ------ 表示合併時,有衝突產生
A ------ 新加入了一個文件
D ------ 刪除了一個文件
? ------ 表示該文件或者目錄沒有被svn管理
M ------ 該文件被修改
更新到某個版本:
svn update 如果後面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,於版本庫同步。如果在提交的時候提示過期的話,是因爲衝突,需要先update,修改文件,然後清除svn resolved,最後再提交commit)
衝突解決:
當svn update時,如果存在某個文件存在衝突,打開衝突的文件,<<<<<<<< 和 >>>>>>>> 表明了衝突發生的地方。
當衝突發生時,如果想使用項目倉庫中的版本,而放棄本地拷貝的修改,可以使用以下命令:
a、svn revert [衝突的文件/目錄]
如:svn revert device/google/chaba/camera.cfg
b、svn update [衝突的文件/目錄]
(svn resolved [文件/目錄] && svn updata [文件/目錄],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷貝的修改,而放棄項目倉庫中版本的修改,可以如下:
a、cp 文件/目錄.mine 文件/目錄
b、svn resolved 文件/目錄
c、svn ci -m "use my version please" 文件/目錄
(在上面的三個步驟中,似乎不用做步驟a也可以達到目的)

7. svn add — 添加文件、目錄或符號鏈。
添加文件、目錄或符號鏈到你的工作拷貝並且預定添加到版本庫。它們會在下次提交上傳並添加到版本庫,如果你在提交之前改變了主意,你可以使用svn revert取消預定。

8. svn delete -- 刪除倉庫中某個目錄
svn delete -m "remote u-boot directory" svn://192.168.101.47:8888/SmartPhone/android_r1/u-boot
note: 這個命令會直接刪除服務器端的目錄

9. 提交工作修改
svn checkin -m "comments" [文件/目錄]
簡寫:svn ci
如:svn checkin -m "add aere/R7629M target" device/google

其它問題:
1) checkout到本地的代碼編譯出現如下錯誤:
zip error: Invalid command arguments (cannot repeat names in zip file)
make: *** [out/target/product/damrey/system/etc/recovery-resource.dat] Error 16
make: *** Waiting for unfinished jobs....
解決
方法一:請升級SVN的版本至1.7版本,採用1.7版本的SVN,編譯過程中將不會產生任何因爲SVN而導致的編譯錯誤。升級方法如下:
ubuntu中svn版本升級到1.7
1、卸載原來的svn:sudo apt-get remove subversion
2、添加1.7資源庫:sudo apt-add-repository ppa:dominik-stadler/subversion-1.7
3、更新apt:sudo apt-get update
4、安裝依賴的java庫:sudo apt-get install libsvn-java
5、安裝新版svn:sudo apt-get install subversion
6、確認安裝版本:svn --version
svn升級後在原來的工作副本中使用svn updagte更新代碼會有出錯提示:
svn: E155036
解決:先使用svn upgrade升級本地svn版本,這個過程較慢,也可以直接刪除本地目錄重新checkout。

方法二:Delete all .svn files & subdirectories
由於各個image是單獨生成的,所以需要在編譯單個image時添加相關命令刪除相應文件夾下的.svn文件
以recovery.img爲例,如果需要刪除recovery.img中的.svn文件,需要修改如下Code:

修改build/core/Makefile文件中的$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \依賴關係,在如下Code:
cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \
> $(TARGET_RECOVERY_ROOT_OUT)/default.prop
之後添加:
@if [ -d $(TARGET_RECOVERY_OUT) ]; then find $(TARGET_RECOVERY_OUT) -name '*.svn' | xargs rm -rf; fi

其中@if前面是一個TAB鍵

刪除不同Image對應文件夾下的.svn文件時,這段Code添加的位置也會有所不同
各個Image的生成命令位於build/core/Makefile 中,直接到該文件中尋找生成各個Image的依賴關係,添加上述命令即可
另,刪除不同Image下的.svn文件時,上述添加Code中,TARGET_RECOVERY_OUT也要做出相應修改,修改爲相應文件夾路徑即可


發佈了30 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章