[TOC]shell
檢出 checkoutvim
# 檢出代碼 ➜ svn co repo_url # 檢出代碼,並指定目錄名 ➜ svn co repo_url saved_dir_name
加入版本控制 addcentos
# 添加指定文件 ➜ svn add /path/to/file # 添加全部 .sh 後綴的文件 ➜ svn add *.sh # 遞歸添加當前目錄下的全部新文件 # 若是使用參數 --no-ignore 則新增時會包含被設置爲忽略的文件 ➜ svn add . --force
提交 commit緩存
➜ svn ci -m '提交更改'
更新 update服務器
➜ svn up [file|path] # 更新到指定版本 11 ➜ svn up -r 11 [file|path]
清除鎖定 svn cleanup
svn
重定向倉庫地址到新地址post
➜ svn switch --relocate old_repo_url new_repo_url
切換當前項目到指定分支測試
➜ svn switch svn://branch_url
檢查工做副本下的文件狀態 svn st
ui
查看工做副本的版本庫概覽信息 svn info
url
查看版本庫上某個目錄下的文件列表(不須要本地檢出)
➜ svn list svn://192.168.1.15/blog
建立 branch、tag
➜ svn cp svn://trunk_url svn://branch_url -m '建立分支' ➜ svn mkdir svn://branch_url -m '建立空分支' ➜ svn cp svn://trunk_url tag_url -m '建立標籤'
刪除 branch、tag
➜ svn rm svn://branch_url -m '刪除分支' ➜ svn rm svn://branch_url -m '刪除標籤'
查看 branch、tag
➜ svn ls ^/branches --verbose ➜ svn ls ^/tags --verbose
查看提交記錄
# 查看整個項目或指定文件目錄的提交記錄 ➜ svn log [file|dir] # 查看兩個指定版本之間的提交記錄 ➜ svn log -r 11:5 [file|dir] # 查看最新的 5 條提交記錄 ➜ svn log -l 5 [file|dir] # 查看帶目錄信息的提交記錄 ➜ svn log -l 5 -v [file|dir]
查看指定版本號的文件內容
➜ svn cat file -r 版本號
查看文件的修改詳情(行級)
# 比較工做副本下的文件與緩存在 .svn 的「原始」拷貝 ➜ svn diff # 比較工做副本下的文件與指定版本號 5 下的文件 ➜ svn diff -r 5 file # 比較兩個版本庫下的文件 ➜ svn diff -r 11:2 file
查看文件每一行的最後修改人
➜ svn blame file
基本使用
# 忽略指定文件或目錄 svn propset svn:ignore 'file|dir' dir # 忽略當前目錄中全部以 .log 結尾的文件 # . 表示當前目錄,當指定具體目錄時,該目錄需處於版本控制狀態 svn propset svn:ignore -R '*.log' . svn ci -m 'ignore *.log file'
要忽略的文件已經被 add 過了
svn revert -R [file|dir]
svn del [file|dir] # 只從 svn 中忽略,而不刪除本地文件 svn del --keep-local [file|dir]
而後再執行忽略設置並提交。
使用配置文件
新建 .svnignore 文件,寫入相似以下內容:
runtime *.log *.apk *.class
而後執行設置
svn add .svnignore svn propset svn:ignore -R -F .svnignore .
提交設置
svn ci -m 'add .svnignore and set some ignore'
建立了一個文件夾,而且把它加入版本控制,但忽略文件夾中的全部內容
➜ svn mkdir dir2 ➜ svn propset svn:ignore '*' dir2 ➜ svn ci -m 'Adding "dir2" and ignoring its contents.'
建立一個不加入版本控制(忽略)的文件夾
➜ mkdir dir1 ➜ svn propset svn:ignore 'dir1' . ➜ svn ci -m 'Ignoring a directory called "dir1".'
導入一個目錄 import
➜ svn import /tmp/upload svn://192.168.0.1/repo1 -m 'add module upload'
⚠️注意:分支合併到主幹後應當刪除該分支,由於在 SVN 中該分支已經不能進行刷新也不能合併到主幹。
# 進入主幹目錄 ➜ cd trunk # 查看建立分支時的版本號 ➜ svn log -q -v -l 1 --stop-on-copy svn://branch_url # 合併分支上的最新代碼到主幹 # svn1.8+ 能夠不加參數 --reintegrate ➜ svn merge --reintegrate svn://branch_url # 查看分支中哪些改動已經被合併到主幹 ➜ svn mergeinfo svn://branch_url # 查看分支哪些改動還未合併 ➜ svn mergeinfo svn://branch_url --show-revs eligible # ⚠️ 提交本次合併(不提交的話,合併不會生效,也會影響後面的更新操做) ➜ svn ci -m 'merge from branch r11:r5 into trunk'
# 進入分支目錄 ➜ cd branch # 合併以前,可使用 svn mergeinfo 命令查看主幹上有哪些待合併的版本信息 ➜ svn mergeinfo -v svn://trunk_url --show-revs eligible --log # 合併主幹上最新代碼到分支 ➜ svn merge svn://trunk_url # ⚠️ 提交本次合併(不提交的話,合併不會生效,也會影響後面的更新操做) ➜ svn ci -m 'merge from trunk r11:r5 into branch'
revert
# 查看文件狀態 ➜ svn status # 回滾單個文件 ➜ svn revert /path/to/file_name # 回滾一個目錄 ➜ svn revert dir_name # 回滾整個項目 ➜ cd trunk ➜ svn revert -R .
merge -r
先更新到最新代碼
# 這裏獲得最新版本號 11 ➜ svn up Updating '.': At revision 11.
找到要回滾到的版本號
# 查看最新的 50 次提交記錄 # 最後的參數能夠指定文件或目錄 ➜ cd trunk ➜ svn log -l 50 [file|dir]
假如咱們想要回退到的版本是 5,能夠執行命令 svn diff -r 11:5 [file|dir]
簡單查看兩個版本的區別。
回滾到指定版本號
➜ svn merge -r 11:5 [file|dir]
驗證回滾是否成功
➜ svn diff -r [file|dir]
提交本次回滾操做到倉庫
➜ svn ci -m "Revert revision from r28 to r25,because of ..."
其它地方更新本次回滾操做
➜ svn up
svn up
場景:咱們有一個目錄是穩定版本的環境,由於誤操做執行了
svn up
後,代碼被更新到了倉庫中的最新版本,而最新版尚未測試經過,因此咱們須要先將更新的代碼回滾,以下:
➜ cd trunk ➜ svn merge -r 13410:13962 .
⚠️注意:千萬不要提交,不然倉庫中的代碼也會回滾,而咱們只但願本地目錄回滾,等到能夠執行 svn up
的時候,再恢復:
➜ svn revert -R . ➜ svn up
svn checkout
---> svn co
svn update
---> svn up
svn commit
---> svn ci
svn delete
---> svn rm
或 svn del
svn copy
---> svn cp
svn list
---> svn ls
svn status
---> svn st
svn switch
---> svn sw
svn diff
---> svn di
# 查找合併時的衝突文件,手工解決衝突 ➜ svn st | grep ^C # 告知svn衝突已解決 ➜ svn resolved filename # 提示合併後的版本 ➜ svn commit -m ""
備份源倉庫
svnadmin dump /path/to/repo > repo.dump
新建倉庫
svnadmin create new_repo
注意:若是是遷移到 Windows 下,使用 VisualSVN 建立新倉庫時,不要建立默認目錄結構(branches、trunk、tags),不然在導入備份時候可能由於目錄衝突發生報錯而中斷。
從備份文件導入新建的倉庫
svnadmin load /path/to/new_repo < repo.dump
建議:切換代碼的 svn 倉庫地址時,最好使用新 svn 地址進行從新檢出的方式操做;若是直接使用 svn switch --relocate svn://svn_old svn://svn_new
進行切換,有可能報相似 uuid
衝突的錯誤。
svn: Can't convert string from 'UTF-8' to native encoding
解決:
➜ echo "export LC_ALL=zh_CN.UTF-8" >> /etc/profile ➜ source /etc/profile
SSL handshake failed: SSL 錯誤:Key usage violation in certificate has been detected.
場景:在 CentOS 服務器上,經過 svn 命令檢出 VisualSVN 管理的倉庫代碼時。
解決:安裝高版本的 svn ,以下
添加軟件源 vim /etc/yum.repos.d/wandisco-svn.repo
[WandiscoSVN] name=Wandisco SVN Repo baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.8/RPMS/$basearch/ enabled=1 gpgcheck=0
刪除舊版本 yum remove subversion*
安裝新版本
yum clean all yum install subversion