SVN是Subversion的简称,他是开源的版本控制工具,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subversion可以通过网络访问它的版本库,从而使用户在不同的电脑上进行操作。
SVN属于集中化的版本控制系统,支持并行读写文件,支持代码的版本化管理。Git是一个分布式版本控制系统,Git擅长的是程序代码的版本化管理。
Git按照元数据方式存储,体积很小;SVN按照原始文件存储,体积较大。
GIT没有一个全局的版本号,SVN的版本号实际是任何一个相应时间的源代码快照。
Git的分支操作不会影响其他开发人员;而SVN会影响,创建新的分支则所有的人都会拥有和你一样的分支。
Git没有严格的权限管理控制,只要有帐号,就可以导出、导入代码,甚至执行回退操作。SVN则有严格的权限管理,可以按组、按个人进行针对某个子目录的权限控制。区分读、写权限。更严格的,不支持回退操作。保证代码永远可以追踪。
Ubuntu安装命令
apt-get install subversion
CentOS安装命令
yum install subversion
安装apache服务
yum install httpd
安装svn服务和httpd模块
yum install subversion mod_dav_svn
建立版本库目录
mkdir -p /data/svn/repo
配置 /p>
svnadmin create /data/svn/repo
执行上面的命令后,自动建立repo测试库,查看/data/svn/repo 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。
[root@localhost password]# cd /data/svn/repos/conf [root@admin conf]# vim passwd
修改passwd为以下内容:
[users] # harry = harryssecret # sally = sallyssecret hello=123
用户名=密码
这样我们就建立了hello用户, 123密码
以上语句都必须顶格写, 左侧不能留空格, 否则会出错.
[root@admin conf]# vi authz
目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:
#设置[/]代表根目录下所有的资源 或者写成[repl:/] [/] hello = rw
意思是hello用户对repo测试库下所有的目录有读写权限,当然也可以限定。 如果是自己用,就直接是读写吧。
以上语句都必须顶格写, 左侧不能留空格, 否则会出错.
[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
以上语句都必须顶格写, 左侧不能留空格, 否则会出错.
查看svn的服务是否启动
ps -ef|grep svn
如果没有启动执行 下面命令即可:
svnserve -d -r /data/svn/repo --listen-port=3690
/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
svn://ip地址
端口默认为3690,输入配置好的用户名和密码即可。
注意:此处千万不能 svn://ip地址/repo,否则无法访问。
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
比较差异。
svn di -r 2:3 123.txt
(查看123.txt
的2
版本和3
版本之间的差异)。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 参数 递归回滚