一、上傳項目到SVN服務器上
svn import project_dir(本地項目全路徑) http://192.168.1.242:8080/svn/IOS/Ben/remote_dir(svn項目全路徑) -m "必填, 不填此命令執行不會成功."
注: 服務器上remote_dir若不存在, 會自動建立;
只會上傳project_dir目錄下的文件到remote_dir的目錄下
import以後, project_dir並無自動轉化爲工做目錄, 須要從新checkout(後面會用到)php
二、下載checkout svn項目到本地
svn checkout http://192.168.1.242:8080/svn/IOS/remote_dir (svn項目全路徑)project_dir(本地目錄全路徑) --username 用戶名 --password 密碼vim
svn checkout 簡寫:svn cobash
三、添加新文件
svn add file(文件名)
svn add *.php(添加當前目錄下全部的php文件)服務器
四、提交到版本庫
svn commit -m "LogMessage" [-N] [--no-unlock] PATH(若是選擇了保持鎖,就使用--no-unlock開關)
svn commit -m 「提交當前目錄下的所有在版本控制下的文件「 * ( *表示所有文件 )網絡
例如:svn commit -m "add test file for my test" test.php
svn commit -m 「提交個人測試用test.php「 -N --no-unlock test.php ( 保持鎖就用–no-unlock開關 )
注意:必須帶上-m參數,參數能夠爲空("")dom
svn commit 簡寫:svn ci編輯器
五、更新文件
svn update
svn update -r 修正版本 文件名
svn update 文件名
例如:
svn update (後面沒有目錄,默認將當前目錄以及子目錄下的全部文件都更新到最新版本)
svn update -r 200 test.cpp ( 將版本庫中的文件 test.cpp 還原到修正版本(revision)200)
svn update test.php ( 更新與版本庫同步 )
提交的時候提示過時衝突,須要先 update 修改文件,
而後清除svn resolved,最後再提交commit。ide
svn update 間寫: svn upsvn
六、查看文件或者目錄狀態
1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預約加入到版本庫;K:被鎖定】
2)svn status -v path(顯示文件和子目錄狀態)
第一列保持相同,第二列顯示工做版本號,第三和第四列顯示最後一次修改的版本號和修改人。
注:svn status、svn diff、svn revert這三條命令在沒有網絡的狀況下也能夠執行的,緣由是svn在本地的.svn中保留了本地版本的原始拷貝。測試
svn status 簡寫:svn st
七、刪除文件
svn delete path -m "delete test fle"
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
推薦使用:
svn delete test.php
svn ci -m 'delete test file‘
svn delete 簡寫:svn del/remove/rm
八、查看日誌(顯示文件的全部修改記錄,及其版本號的變化)
svn log path
svn log -l 3查看最新的三條記錄
例如:svn log test.php
九、查看文件詳細信息
svn info path
例如:svn info test.php
十、比較差別
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差別)
例如:svn diff -r 200:201 test.php
svn diff 簡寫:svn di
十一、合併文件(將兩個版本之間的差別合併到當前文件)
svn merge -r m:n path
例如:
svn merge -r 200:205 test.php(將版本200與205之間的差別合併到當前文件,可是通常都會產生衝突,須要處理一下)
十二、SVN 幫助
svn help 所有功能選項
svn help ci 具體功能的說明
1三、版本庫下的文件和目錄列表
svn list path
顯示path目錄下的全部屬於版本庫的文件和目錄
svn list 簡寫:svn ls
1四、建立歸入版本控制下的新目錄
svn mkdir newdir
例如:
svn mkdir -m "Making a new dir." svn://localhost/test/newdir
用法: 一、mkdir PATH...
二、mkdir URL...
建立版本控制的目錄。
一、每個以工做副本 PATH 指定的目錄,都會建立在本地端,而且加入新增
調度,以待下一次的提交。
二、每一個以URL指定的目錄,都會透過當即提交於倉庫中建立。
(在這兩個狀況下,全部的中間目錄都必須事先存在)
注:添加完子目錄後,必定要回到根目錄更新svn update一下,否則在該目錄下提交文件會提示「提交失敗」
注:若是手動在checkout出來的目錄裏建立了一個新文件夾newsubdir,
再用svn mkdir newsubdir命令後,SVN會提示:
svn: 嘗試用 「svn add」或 「svn add --non-recursive」代替?
svn: 沒法建立目錄「hello」: 文件已經存在
此時,用以下命令解決:
svn add --non-recursive newsubdir
在進入這個newsubdir文件夾,用ls -a查看它下面的所有目錄與文件,會發現多了:.svn目錄
再用 svn mkdir -m "添hello功能模塊文件" svn://localhost/test/newdir/newsubdir 命令,
SVN提示:
svn: File already exists: filesystem '/data/svnroot/test/db', transaction '4541-1',
path '/newdir/newsubdir '
1五、恢復本地修改
svn revert: 恢復原始未改變的工做副本文件 (恢復大部份的本地修改)。
用法: revert PATH...
注意: 本子命令不會存取網絡,而且會解除衝突的情況。可是它不會恢復
被刪除的目錄
svn revert foo.c <- 丟棄對一個文件的修改
svn revert --recursive . <-恢復一整個目錄的文件,. 爲當前目錄
1六、代碼庫URL變動
svn switch (sw): 更新工做副本至不一樣的URL。
用法: 一、switch URL [PATH]
二、switch --relocate FROM TO [PATH...]
一、更新你的工做副本,映射到一個新的URL,其行爲跟「svn update」很像,也會將
服務器上文件與本地文件合併。這是將工做副本對應到同一倉庫中某個分支或者標記的
方法。
二、改寫工做副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變更
(好比方案名或是主機名稱變更),可是工做副本仍舊對映到同一倉庫的同一目錄時使用
這個命令更新工做副本與倉庫的對應關係。
svn switch 間寫: svn sw
1七、解決衝突
svn resolved: 移除工做副本的目錄或文件的「衝突」狀態。
用法: resolved PATH...
注意: 本子命令不會依語法來解決衝突或是移除衝突標記;
它只是移除衝突的相關文件,而後讓 PATH 能夠再次提交。
1八、輸出指定文件或URL的內容
svn cat 目標[@版本]...若是指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也能夠寫具體版本號,這樣輸出結果是能夠提交的)
1九、查看svn版本
svn —-version
20、新建分支branchs,在分支上繼續開發
一、svn mkdir branches
二、svn copy svn://server/trunk svn://server/branches/ep -m "init ep"
2一、該版本完成,打tag,發佈版本
一、svn mkdir tags
二、svn copy svn://server/trunk svn://server/tags/release-1.0 -m "1.0 released"
使用發生的一些問題:
一、錯誤:
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found
問題緣由是:
沒有設置svn編輯器的環境變量,主要是import、commit中填寫comment要用
解決方法:
一、在 終端中 sudo vim /etc/bashrc 打開文件
加入:export SVN_EDITOR=vim
二、編輯完之後通常須要讓配置文件當即生效,可執行命令:
source /etc/bashrc(也能夠不進行這一步)
二、問題:
不當心提交了一些動態改變根本不須要的文件到svn服務器上
解決:
svn resolved filename 放棄對文件的修改,
svn ci -m "update" 提交全部文件
svn rm test.log 刪除掉這個文件。
svn ci -m "update" 再次提交
三、發生衝突:
兩人同時修改同一文件同一部分,前後提交,出現衝突
svn ci -m "update"
svn: Commit failed (details follow):
svn: Aborting commit: 'test.log' remains in conflict
解決:
A、放棄本身的更新,使用svn revert(回滾),而後提交。在這種方式下不須要使用svn resolved(解決)
B、放棄本身的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行resolved filename並提交(選擇文件—右鍵—解決)。
C、手動解決:衝突發生時,經過和其餘用戶溝通以後,手動更新目標文件。而後執行resolved filename來解除衝突,最後提交。
堅持使用本身的更新,找到.mine的文件名,恢復爲原文件名,而後執行:svn resolved file_name