二,建立檔案庫(建立一個項目)
(服務端操作,以後沒有特殊註明都是用戶端操作)
mkdir /usr/local/svn
svnadmin create /usr/local/svn/java
三,將項目文檔(檔案夾)入庫
例如把本地的java項目匯入至檔案庫的java目錄裡:
mkdir java
mkdir java/trunk //主線
mkdir java/branches //分支
mkdir java/tags //標記,用來存放不再變動的分支
svn import . http://localhost/svn/java /
-m "Initial repository layout"
或
svn import java http://localhost/svn/java /
-m "Initial repository layout"
四,checkout(co)擷取伺服器上的檔案到本地機器上
所有想拿到伺服器上的項目的人員都可以通過這個操作來達到目的(當然可能要有許可權)
cd /usr/local/work //先建立本地的工作路徑
svn co http://localhost/svn/java java /
--username afa --password guesswhat
五,網頁訪問方式
http://server/svn/java
注意:不能直接存取svn目錄
六,commit 提交
當本地工作目錄上修改或建立檔案或檔案夾時,伺服器上得倉庫並不會自動修改,需要使用commit命令把本地做的修改儲存到伺服器上.每次修改後commit,伺服器上得版本號碼會加1.
$svn commit –m "commit message"
七,新增檔案或檔案夾
$ touch test.java
$ svn add test.java
$ svn commit –m "add test.java"
八,本地更新檔案update
(不帶參數則更新為最新版本)
$ svn update –r 3 test.java
//本地的test.java更新為第三次提交的版本
注意幾個狀態:
A 新增
D 刪除
U 更新
C 衝突
G 合并
技巧:在每次做修改之前,都先執行update操作,可大大減少衝突的發生.
九,建立分支(branch)和標記(tag)
分支和標記的差別:標記是儲存不再做修改的分支
$ svn checkout http://serverip/svn/java java
$ cd java
$ svn copy trunk/calc branches/calc-branch-1.0
$ svn status
$ svn commit -m "Creating a private branch of java"
十,合并分支(1)
1,合并從某個版本都某個版本
例如:把分支343-344上的版本合并到主幹上來:
$ cd 到主幹相應的目錄(要注意目錄)
(如 /usr/local/work/java/trunk)
$ svn merge -r 343:344 /
http://serverip/svn/java/branches/java-branch-1.0
十,合并分支(2)
2,合并整個分支
例如:如從341版本產生了分支到現在要合并起來:
$ cd 到主幹相應的目錄(如 /usr/local/work/java/trunk)
$ svn merge -r 341:HEAD /
http://serverip/svn/java/branches/java-branch-1.0
十,合并分支(3)
3,合并時產生衝突的處理--主要是靠手動修改.
<<<<<<>>>>>> .merge-right.r15
branches 1 add branch test
branches 2
branches 3
修改完了之後,用svn resolved命令(或手工把svn產生的多餘的控制檔案刪除)再commit就OK了.
十一,svn status
顯示本地更新,如果沒有任何更新(或剛剛commit)則沒有任何資訊顯示.
十二,"svn diff"顯示詳細的更新細節
$ svn diff -r 343:344 http://serverip/svn/java/trunk/work.java
十三,svn revert
移除使用者的本地更新(本地做了更新如修改,合并等操作,但沒有提交時有效).
十四,svn resolved
當手工解決了版本衝突之後,在commit之前執行,用來告訴SVN "我已經解決了衝突,請讓我提交吧" ,要不然就要手工刪除SVN產生的相關檔案,否則不能執行"commit"操作.
$ svn resolved work.java //目前的目錄下的work.java
十四,svn delete(1)
1,本地刪除
$ svn delete myfile
$ svn commit -m "Deleted file 'myfile'."
十四,svn delete(2)
2,直接在伺服器(自動commit)
$ svn delete / http://server/svn/java/test.java /
-m "Deleting file 'yourfile'"
注意:不管是本地刪除還是直接在伺服器執行刪除操作,都只對目前的版本生效,以前的版本中仍然存在被刪除的東西,即可以找回被刪除的東西.
第三部分
Subversion的備份
(服務端)
一,完整式備份與恢複
$ svnadmin dump java > dumpfile
$ svnadmin create dumpjava //可以修改倉庫(項目)的名字
$svnadmin load dumpjava dumpfile1
$ svnadmin dump myrepos --revision 1001:2000 --incremental > dumpfile2
$ svnadmin dump myrepos --revision 2001:3000 --incremental > dumpfile3_
$ svnadmin load newrepos < dumpfile1
$ svnadmin load newrepos < dumpfile2
$ svnadmin load newrepos < dumpfile3
第四部分
Subversion的許可權控制
(交給Apache管理)
一,建立口令檔案(使用Apache的htpasswd)
$ cd /urs/local/Apache/bin //進入到apache的bin目錄
$ htpasswd -c /etc/svn-auth-file afa
//第一次: 以 -c 建立口令檔案
$ htpasswd /etc/svn-auth-file test
//第二次不用-C參數,但要指定口令檔案(含路徑)
$
二,編輯httpd.conf檔案,加入身分識別驗證設定(重啟Apache後生效)
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
三,更細緻的許可權控制――分組管理
DAV svn
SVNParentPath /usr/local/svn
AuthzSVNAccessFile /etc/svn/authz.conf
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
四,authz.conf的內容
[groups]
everyone = afa,test, tommy, songjy, robert _
groupA = afa,robert
groupB = test, tommy , songjy
[projectA:/]
@everyone = r
_ @groupA = rw
[projectB:/]
_ @everyone = r
@groupB = rw
謝謝!