二,创建文件库(新建一个项目)
(服务端操作,以后没有特殊注明都是客户端操作)
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
谢谢!