SVN學習
SVN學習
SVN是Subversion的簡稱,他是開源的版本控制工具,Subversion允許把數據恢復到早期版本,或是檢查數據修改的歷史,Subversion可以通過網絡訪問它的版本庫,從而使用戶在不同的電腦上進行操作。
與git的主要區別:
-
SVN屬于集中化的版本控制系統,支持并行讀寫文件,支持代碼的版本化管理。Git是一個分布式版本控制系統,Git擅長的是程序代碼的版本化管理。
-
Git按照元數據方式存儲,體積很小;SVN按照原始文件存儲,體積較大。
-
GIT沒有一個全局的版本號,SVN的版本號實際是任何一個相應時間的源代碼快照。
-
Git的分支操作不會影響其他開發人員;而SVN會影響,創建新的分支則所有的人都會擁有和你一樣的分支。
-
Git沒有嚴格的權限管理控制,只要有帳號,就可以導出、導入代碼,甚至執行回退操作。SVN則有嚴格的權限管理,可以按組、按個人進行針對某個子目錄的權限控制。區分讀、寫權限。更嚴格的,不支持回退操作。保證代碼永遠可以追蹤。
SVN安裝
Ubuntu安裝命令
apt-get install subversion
CentOS安裝命令
yum install subversion
SVN server安裝(可以不裝)
1.軟件安裝,基于Apache搭建SVN Server
安裝apache服務
yum install httpd
? 安裝svn服務和httpd模塊
yum install subversion mod_dav_svn
2.創建目錄并配置
建立版本庫目錄
mkdir -p /data/svn/repo
配置 /p>
svnadmin create /data/svn/repo
執行上面的命令后,自動建立repo測試庫,查看/data/svn/repo 文件夾發現包含了conf, db,format,hooks, locks, README.txt等文件,說明一個SVN庫已經建立。
3.用戶密碼passwd配置
[root@localhost password]# cd /data/svn/repos/conf
[root@admin conf]# vim passwd
修改passwd為以下內容:
[users]
# harry = harryssecret
# sally = sallyssecret
hello=123
用戶名=密碼
這樣我們就建立了hello用戶, 123密碼
以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
4.權限控制authz配置
[root@admin conf]# vi authz
目的是設置哪些用戶可以訪問哪些目錄,向authz文件追加以下內容:
#設置[/]代表根目錄下所有的資源 或者寫成[repl:/]
[/]
hello = rw
意思是hello用戶對repo測試庫下所有的目錄有讀寫權限,當然也可以限定。 如果是自己用,就直接是讀寫吧。
以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
5.服務svnserve.conf配置
[root@admin conf]# vim svnserve.conf
追加以下內容:
[general]
#匿名訪問的權限,可以是read,write,none,默認為read
anon-access=none
#使授權用戶有寫權限
auth-access=write
#密碼數據庫的路徑
password-db=passwd
#訪問控制文件
authz-db=authz
#認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字
realm=/data/svn/repositories
以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
6.啟動svn服務
查看svn的服務是否啟動
ps -ef|grep svn
如果沒有啟動執行 下面命令即可:
svnserve -d -r /data/svn/repo --listen-port=3690
7.開啟端口
/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/iptables status
8.訪問
svn://ip地址
端口默認為3690,輸入配置好的用戶名和密碼即可。
注意:此處千萬不能 svn://ip地址/repo,否則無法訪問。
SVN常用命令
1、幫助命令: help(h)
svn help 或者 svn h
2、往版本庫中添加新文件:add
svn add xxx.txt
- 命令解釋:這個命令使用之后,還得使用
svn ci xxx.txt命令提交一下。
3、將改變的文件提交到版本庫:commit(ci)
svn commit -m "LogMessage" xxx.txt 或者 svn ci -m "LogMessage" xxx.txt
4、檢出文件到本地:checkout
svn checkout path(項目庫的路徑) 或者 svn co path
5、更新版本:update(up)
svn update -r m path 或者 svn up 或者 svn up -r 200(版本號) 123.txt(文件名)
-
命令解釋 該命令使用頻率應該是最高的。
svn update后面如果沒有目錄或文件,默認將目錄下的文件以及子目錄都更新到最新版。-r:指定更新到哪個版本。
6、查看日志:log
svn log xxx.txt
7、查看文件詳細信息:info
svn info xxx.txt
8、比較差異:diff(di)
svn diff -r m:n xxx.txt 或者 svn di -r m:n xxx.txt
- 命令解釋:對版本
m和版本n比較差異。- -r:需要對比的兩個版本號。舉例:
svn di -r 2:3 123.txt(查看123.txt的2版本和3版本之間的差異)。
- -r:需要對比的兩個版本號。舉例:
9、刪除文件:delete(del,remove,rm)
svn delete path -m "DeleteMessage" 或者 svn del/remove/rm path -m "DeleteMessage
- 命令解釋:使用這個命令有兩種方式。
- 遠程刪除:
svn delete svn://192.168.1.1/project_v1/123.java -m "delete test file"(使用這種方式刪除后,直接會刪除掉版本庫中的文件)。 - 提交刪除:首先
svn delete 123.java,然后svn ci -m "delete file"(推薦使用這種方式)。
- 遠程刪除:
10、對文件加鎖:lock
svn lock -m "LockMessage" xxx.txt #對長時間需要頻繁修改的文件使用
11、對文件解鎖:unlock
svn unlock xxx.txt
12、移動文件或者文件更名:move(mv,rename,ren)
svn move -m "MoveMessage" xxx.txt 或者 svn mv/rename/ren -m "MoveMessage" xxx.txt
- 命令解釋:我們來舉兩個例子,更直觀理解這個命令。
svn move -m "rename file" 123.txt 456.txt(將當前目錄下的123.txt更名為456.txt)。svn move -m "move file" 123.txt test/123.txt(將當前目錄下的123.txt移動到當前子目錄test下去)。
13、列出屬于版本庫下的文件和目錄:list(ls)
svn list path 或者 svn ls
14、查看文件狀態 status(st、stat)
svn status xxx.txt 或者 svn st xxx.txt
- 命令解釋:
svn st -q xxx.txt-q 參數 只顯示本地修改并且倉庫中存在的,新增和未修改的不會顯示。 - 狀態列舉:
? A: 新增,當創建新文件后,執行svn add xxx后顯示為A, 否則顯示為 ?
? C: 沖突,本地修改后與倉庫中的有沖突
? D: 刪除,執行svn del xxx后顯示為D
? M: 本地已變更
? ?: 未納入版本控制,即倉庫中沒有此文件或目錄
? !: 遺失,未執行svn del, 直接將文件或目錄在文件系統中刪除
K: 鎖定,執行操作斷網或強行中止等情況下會出現,或svn lock命令后出現
? I: 忽略 R: 替換 X:未納入版本控制的目錄,被外部引用的目錄所創建
15、回滾revert
svn revert xxx
- 命令解釋:
svn revert -R xxx-r 參數 遞歸回滾
posted on 2022-07-07 12:59 Chase_Hanky 閱讀(68) 評論(0) 收藏 舉報
浙公網安備 33010602011771號