SVN使用指南

使用背景
  • 电脑发生故障,文件没有备份而丢失了
  • 由于人员离职,导致某些资料丢失了
  • 我怎么知道手头的公共资料是不是最新版呢?
  • 想要追溯几个月前的某个状态,却发现那个版本的文件已经被当作垃圾删除了
  • 每天要花费很多时间来向别人提供需要共享的资料
  • 相似的应用系统,每次都重复开发,难以复用
  • 一个软件被用于多个项目,发现其中存在一个BUG,所有这些项目都要进行修复
  • 人员分布在两地开发,版本如何同步
  • 甲乙两人为不同目的修改了同一份文件,乙的提交在甲提交之后,导致甲修改的内容丢失了
一 简介

是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源以及实现最终集中式的管理。
SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。
前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。

二 安装SVN服务器

1. 首次查看服务器(虚拟机)是否安装了SVNServer
rpm -qa |grep svn
2. 如果没有安装,执行
yum -y install subversion
3. 安装好了之后,新建一个SVN目录
mkdir /home/svn
4. 新建一个版本仓库

svnadmin create /home/svn/project
# project是版本仓库名,在配置文件中会用到

5. 将你需要放在svn上的工程,放进project目录中

#例:
cd /home
mkdir  my_files
cd my_files
touch text.txt
mv /home/my_files/  /home/svn/project

6. 初始化版本仓库
命令:

svn import 需要放到svn上的文件夹/ file:///home/svn/project -m “版本说明” --username xx --password xx
这里需要注意的是,如果后边不加用户名和密码,可能导致客户端在update时,不需要输入用户名和密码就可以update

svn import /home/svn/project/my_files/ file:///home/svn/project/ -m "create a 
directory" --username zll --password root

7. 添加用户
要添加SVN用户非常简单,只需在/home/svn/project/conf/passwd文件添加一个形如“username=password”的条目就可以了


8. 修改用户访问策略
/home/svn/project/conf/authz记录用户的访问策略。
直接查看[groups]配置项

# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# 这个配置项的规则是:组名 = 组下面的用户
root = root,zll

#[repository:/baz/fuz]
#[project:/] 如果你的仓库下边就一个版本的话 就不需要使用xxx 直接一个斜杠就完事
#[project:/xxx] 如果你的仓库下边有多个版本的话xxx就是那个文件夹的名字

# @harry_and_sally = rw  表示为某个组赋予什么样的权限,r表示可读,w表示可写
# * = r  通配符*表示选择其他所有组,其他组的权限为可读
[project:/]  # 表示选择project下面所有的放到svn上面的版本
@root = rw
* = r  # 后面可以不写权限,表示任何权限都不赋予

# 经过测试发现,svn server 配置权限的时候,需要在每一个文件夹下给所有用户组配置权限,否
 #则会出现认证失败的现象。也就是说,当配置好需要拥有权限的用户组后,还需要为其他组赋予权限。

9. 修改svnserve.conf文件,让用户和配置生效

[general]
anon-access = none
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz

10. 启动服务器
svnserve -d -r /home/svn
11. 测试服务器
svn co svn://192.168.x.x/project
只要看到Checked out revision 1 就表示服务器已经建立成功。
到此为止独立svn服务器就建立好了
12. 注意:
如果客户端想要使用的话, url地址一定是这个样子的:svn://192.168.x.x/project,不是https开头。如果想要使用http的头的话 需要配置SVN服务器的HTTP支持。
13. 常用svn命令

1. svn up/update  更新代码
2. svn st/status   查看修改状态
3. svn ci -m “”   提交代码
4. svn add +文件或目录   添加新文件或者目录
5. svn del 文件或者目录   删除文件或者目录
6. svn resert 文件/目录   将已经修改了的代码恢复到初始状态
7. svn co/checkout svn://192.168.X.X/    下载库上的代码
8. svn diff 文件或者目录    比较修改前后的文件
三 安装SVN客户端

官方下载地址: https://tortoisesvn.net/downloads.html

下载中文语言包

开始安装客户端:
Next -->Next-->1.选择安装路径 2.Next-->Install
安装语言包:
下一步-->完成

四 SVN客户端的配置

这里要特别声明一下——SVN客户端不是指一个桌面应用程序,而是集成到系统的右键菜单中的插件。因此使用客户端向资源库下载项目资源、提交项目资源等都是通过右键菜单来完成的。

修改默认语言项为简体中文

五 SVN菜单

六 SVN操作

6.1 检出
用于客户端第一次从SVN服务器上下载版本库数据

注意,这里使用虚拟机模拟企业环境,想要在Windows客户端连接Linux服务端,需要先把Linux
端的防火墙关闭。命令:systemctl stop firewalld

  1. 在本地新建一个目录用来存放要下载的版本库

  2. 进入到新建的目录中,在空白处点击右键,选择“SVN检出”

  3. 在版本库URL中输入版本库地址:svn://192.168.x.x/project

  4. 输入配置好的用户名和密码
  5. 下载该版本库下的项目


绿色对勾图标: 当客户端文件与服务器文件完全同步的时候,系统就会显示以上图标

6.2 提交
用于将客户端的改动上传到SVN服务器

  1. 在本地任意受SVN控制的目录或文件中进行改动,比如在目录中创建新的文件
  2. 在目录中的空白地方点击右键,选择“SVN提交”
  3. SVN自动检查该文件夹客户端的改动,并将其列在弹出窗口的“变更列表”栏;在弹出窗口的“信息”

    栏写上对此次提交的注释,以便将来追溯;点击“确定”将客户端的改动上传到服务器。

6.3 更新
用于客户端从SVN服务器下载最新版本库。

  1. 在服务器端检出一份版本库,在检出版本库中进行文件的操作
  2. 选择本地受SVN控制的目录,右键点击空白的地方,选择“SVN更新”,更新完成点击“确定”。

    6.4 删除
    用于在受SVN控制的状态下,删除文件或文件夹。
    “删除”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将删除操作上传到服务器;将“删除”操作“提交”到服务器后,仅是从服务器的最新版本中删除了此文件或文件夹,在历史版本中仍可找回此文件或文件夹;
    1.首先删除本地的某个文件
    2. 右键点击目录空白处,点击“SVN提交”
  3. 在一个空白目录下,点击右键选择“SVN检出”,在URL输入框输入版本库的地址,查看当前检出的版本库内容

    6.5 改名
    用于在受SVN控制的状态下,对文件或文件夹改名。
    “改名”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将改名操作上传到服务器。不要用Windows“重命名”来实现改名,因为这个操作不受SVN控制,SVN会将其理解为删除原文件、增加一个新文件,从而导致文件改名后不能跟踪到改名前的状态
    1.选中要改名的文件,点击鼠标右键,点击SVN菜单中的“改名”
    2. 点击鼠标右键,选择“SVN提交”
    3. 点击两次“确定”即可。

6.6 移动
用于在受SVN控制的状态下,移动文件或文件夹的位置。

  1. 在受SVN控制的某层文件夹或文件上点右键,选择“TortoiseSVN-版本库浏览器”
  2. 在弹出窗口拖动文件夹或文件到需要的位置
  3. 由于是对服务器版本库直接操作,移动后将自动执行一次“提交”操作。
  4. 移动完成后需要在客户端执行一次“更新”,以下载最新状态

6.7 更新至版本
用于取出文件的某历史版本。
1.在受SVN控制的某层文件夹或文件上点右键,选择“TortoiseSVN-更新至版本…”

  1. 在弹出窗口中填写要取的版本号,点“确定”取回该版本。

七 SVN常见图标

当客户端文件与服务器文件完全同步的时候,系统就会显示以上图标

当客户端文件与服务器数据存在冲突时,系统会出现以上图标

当服务器端的文件已经删除时候,那么客户端文件就会显示以上图标

我们编写的文件已经提交到队列中,系统会显示以上图标

我们编写的文件没有提交到队列中,系统会显示以上图标

客户端文件已经修改但是未提交,系统会出现以上图标

当客户端文件以只读的形式存在时,系统会出现以上图标

当服务器数据已经锁定的时候,客户端文件会自动显示锁定图标

客户端文件已经忽略,不需要进行提交上传,系统会显示忽略图标。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342