SVN是一種版本管理系統,前身是CVS,是開源軟件的基石。即使在溝通充分的情況下,多人維護同一份源代碼的一定也會出現混亂的情況,版本管理系統就是為了解決這些問題。
SVN中的一些概念 :
a. repository(源代碼庫)
源代碼統一存放的地方。
b. Checkout (提取)
當你手上沒有源代碼的時候,你需要從repository checkout一份。
c. Commit (提交)
當你已經修改了代碼,你就需要Commit到repository。
d. Update (更新)
當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更。
Centos 搭建SVN服務,有效的管理代碼,以下三步可以快速搞定。
1、安裝
[root@www ~]# yum install subversion
[root@www ~]# svn -v 判斷是否安裝成功
svnserve, version 1.6.11 (r934486) 出現類型提示,說明安裝成功。
有了SVN軟件后還需要建立SVN庫。
[root@www ~]# mkdir /opt/svn/repos
[root@www ~]# svnadmin create /opt/svn/repos
執行上面的命令后,自動在repos下建立多個文件, 分別是conf, db,format,hooks, locks, README.txt。
2、配置
上面的操作很簡單,幾個命令就搞定, 下面的操作也不難。
進入上面生成的文件夾conf下,進行配置, 有以下幾個文件authz, passwd, svnserve.conf
其中authz 是權限控制,可以設置哪些用戶可以訪問哪些目錄, passwd是設置用戶和密碼的, svnserve是設置svn相關的操作。
2 .1先設置passwd
[root@www ~]# vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret
hello=123
用戶名=密碼
這樣我們就建立了hello用戶, 123密碼
2.2 再設置權限authz
[root@www ~]# vi authz
[/]
hello= rw
意思是hello用戶對所有的目錄有讀寫權限,當然也可以限定。
如果是自己用,就直接是讀寫吧。
2.3最后設定snvserv.conf
[root@www ~]# vi snsvserv.conf
anon-access = none # 使非授權用戶無法訪問
auth-access = write # 使授權用戶有寫權限
password-db = password
#authz-db = authz # 訪問控制文件
realm = /opt/svn/repos # 認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字。
采用默認配置. 以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
好了,通過以上配置,你的svn就可以了。
3、連接
[root@www ~]# svnserve -d -r /opt/svn/repos 啟動svn:
如果已經有svn在運行,可以換一個端口運行
[root@www ~]# svnserve -d -r /opt/svn/repos --listen-port 3391
這樣同一臺服務器可以運行多個svnserver
好了,啟動成功后,就可以使用了。
建議采用TortoiseSVN, 連接地址為: svn://your server address (如果指定端口需要添加端口 :端口號)
連接后可以上傳本地的文件,有效的管理你的代碼。
svn 命令詳解
1、將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡寫:svn co
2、往版本庫中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加當前目錄下所有的php文件)
3、將改動的文件提交到版本庫
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開關)
例如:svn commit -m “add test file for my test“ test.php
簡寫:svn ci
4、加鎖/解鎖
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某個版本
svn update -r m path
例如:
svn update如果后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,于版本庫同步。如果在提交的時候提示過期的話,是因為沖突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
簡寫:svn up
6、查看文件或者目錄狀態
1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】
2)svn status -v path(顯示文件和子目錄狀態)
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st
7、刪除文件
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 (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化
9、查看文件詳細信息
svn info path
例如:svn info test.php
10、比較差異
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差異)
例如:svn diff -r 200:201 test.php
簡寫:svn di
11、將兩個版本之間的差異合并到當前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)
12、SVN 幫助
svn help
svn help ci
13、版本庫下的文件和目錄列表
svn list path
顯示path目錄下的所有屬于版本庫的文件和目錄
簡寫:svn ls