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.txt2版本和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 参数 递归回滚

posted on 2022-07-07 12:59  Chase_Hanky  阅读(35)  评论(0编辑  收藏  举报