都已经用了git
,为何还要介绍svn
呢?为了让aicoder.com的学员可以掌握多种的源代码管理工具的使用方法,更快的融入到项目开发中,特整理此文档。css
一般软件开发由多人协做开发,若是对代码文件、配置文件、文档等没有进行版本控制,将会出现不少问题:html
版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便未来查阅特定版本修订状况的系统。python
SVN(Subversion)是一个开源的版本管理工具。linux
svn是基于客户/服务器模式:nginx
复制-修改-合并方案(Subversion默认的模式):git
在这种模型里,每个客户读取项目配置库创建一个私有工做副本——版本库中文件和目录的本地映射。用户并行工做,修改各自的工做副本,最终,各个私有的复制合并在一块儿,成为最终的版本,这种系统一般能够辅助合并操做,可是最终要靠人工去肯定正误。web
锁定-修改-解锁方案:npm
在这样的模型里,在一个时间段里配置库的一个文件只容许被一我的修改。 此模式不适合软件开发这种工做。gulp
su
yum install subversion -y
检验是否安装上了vim
svnser --version
#(注意是两个 - )
mkdir /home/svndata/objects
在该文件夹下建立版本库
svnadmin create /home/svndata/objects
找到SVN配置文件夹
cd /home/svndata/hgd/conf/
成功进入后,输入命令 ls 能够看到该目录下的文件:authz passwd svnserve.conf
vim svnserve.conf
进入文件后 按i进行编辑,将下列代码前的#和空格删去,直至顶格
anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #该路径为仓库路径
编辑结束后 按esc退出修改模式 后再输入:wq,即保存退出
vim passwd
密码文件内容以下:
[user] username = password
格式:用户名=密码
修改后同上保存退出
vim authz
权限有三种:rw(读写)r(只读)w(只能写)
[group]
用户组=成员1,成员2.。。。。 [/]#总权限 @用户组 = 权限 [objects:/]#下级子仓库权限 @用户组 = 权限
systemtcl stop firewalld.service
关闭开机启动
systemctl disable firewalld.service
查看防火墙状态
firewall-cmd --state
出现not running就表示关闭成功了
svnserve -d -r /home/svndata/objects
至此svn就能够用了
hooks
目录。对应修改post-commit
文件就是当有提交的时候自动执行的钩子。
例如:
REPOS="$1" REV="$2" #DIRS=$(svnlook dirs-changed $REPOS) #echo $DIRS | grep -c trunk #touch /usr/local/webserver/nginx/html/index.txt /usr/bin/svn up --force /home/svndata/scratchFile/hgd/branches/dev --username "admin" --password "xxxxxxxx" cd /usr/local/webserver/nginx/html rm -rf ./* cd /home/svndata/scratchFile/hgd/branches/dev npm i gulp dist cp -R /home/svndata/scratchFile/hgd/branches/dev/dist/* /usr/local/webserver/nginx/html exit 0
svn客户端须要经过网络访问svn服务端提交文件、查询文件等,可经过如下客户端类型访问svn服务端:
一、使用Subversion提供的客户端命令
使用方式:在命令行下输入命令操做。
二、使用Torotise图形化界面操做(推荐)
三、使用开发工具插件操做(推荐)
TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不须要为使用它而付费。
TortoiseSVN是 Subversion 的 Windows 扩展。它使你避免接触 Subversion 枯燥并且不方便的 Command Line。它彻底嵌入 Windows Explorer,使用时只需在正常的窗口里右键操做就能够了
下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载连接。
目前最新版为 1.11.0 下载地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/
在语言补丁包中咱们能够找到中文的补丁并下载下来:
运行下载的 TortoiseSVN 安装程序
运行下载的 TortoiseSVN 中文语言包
修改 TortoiseSVN 默认语言
TortoiseSVN 安装完后默认的界面是英文的,咱们能够经过设置修改为已安装语言
使用Tortoise浏览svn服务端的仓库的内容:
进入公司后,第一步就是要获取公司的源码快速上手项目。
能够找老大要一下仓库的地址,并让代码管理员帮忙建立仓库的帐号和密码。
Repo-browser : 浏览仓库中资源信息
Export :导出项目 ,和checkout区别 (checkout检出后文件,含有.svn隐藏文件夹, 会和SVN仓库交互, export导出,没有.svn隐藏文件夹)
import 将本地资源导入到svn 服务器
检出项目,复制项目的副本到本地。
在要检出的目录中右键:
5.3.2 add
在检出的目录中添加文件:
图标: 这是一个新文件
n Add to ignore list :添加到忽略列表 (标记该文件不须要版本控制 )
n Add : 标记这个文件添加到服务器
已经标记要添加到版本库
当检出目录或子目录中内容有修改,目录图标变为:
提交Commit 提交本地修改至svn服务器:
在检出目录或要提交修改的目录右键:
提交后目录中的内容与svn服务同步,目录图标变为:
更新仓库的文件到本地
在检出目录或子目标或文件上右键:
Delete :删除版本库文件
标记删除后,本地文件删除,标记删除后须要提交。
在检出目录或子目录操做会记录操做日志,提交前能够回滚操做。
在要回滚的检出目录或子目录中右键:
两个客户端同时修改同一个文件, 改动同一个位置,发生冲突状况
若是当commit 遇到文件已通过时,说明另外一我的可能改动过 ----- update
db.properties 将本地和服务器合并到一块儿的文件 (不要直接看) db.properties.mine 我本地本身修改后的文件 db.properties.r16 我修改以前的文件 db.properties.r17 别人修改后的文件
手动Merge 后,须要将编辑后冲突文件,标记为已经解决 , 再进行commit
假如咱们在 branch 分支中对文件进行了修改或增长了文件,要 merge 回 trunk 目录中,方法很简单。以上面的例子来讲,咱们在 D:\runoob01\trunk
目录空白处,按下鼠标右键,选择 Merge(合并):
这个画面主要分为三个部份,前面的 From: 与 To: 是要问您打算从 Branch 中的哪一个版本到哪一个版本,merge 回原来的 trunk 目录中。所以,From 跟 To 的 URL 字段应当都是指定原来 branch 的目录下。剩下的就是指定要 merge 的 revision 范围。以上面的例子而言,咱们从 Branch 的 Revision 7 开始 merge 到 Branch 下面的最新版本。您能够透过,Dry run 按钮,试做一次 Merge。这个 merge 只会显示一些讯息,不会真正的更新到 trunk 的目录去。只有按下 Merge 按钮后,才会真正的将 branch 的档案与 trunk 的档案合并起来。
若是您确认此次的 merge 没有问题,您能够直接使用 commit 来将这两个被修改的档案 commit 回 SVN repository 上。若是有问题,您能够直接修改这两个档案,直到确认 ok 了,再行 commit。
所谓的 Tag 或是 Release 就是一个特别的版本,由于这个版本可能有特别的意义。例如:这个版本是特别的 Milestone 或是 release 给客户的版本。其实,Tag 与 Release 的做法与 Branch 彻底相同。只是 Branch 可能会须要 merge 回原来的 trunk 中,而 tag 及 release 大部分都不须要 merge 回 trunk 中。
举例来讲,今天咱们的 trunk 作了一版,这个版本被认定是软件的 1.0 版。 1.0版对于开发来讲是一个很是重要的里程碑。因此咱们要特别为他作一个标记,亦即 Tag。假设,这个 1.0 版是要正式 release 给客户或是相关 vendor,咱们要能够为他作一个 Release 的标记。基本上,SVN 只有目录的概念,并无什么 Tag 的用法。因此您会看到在 SVN 的选单上面,Branch 与 Tag 是同一个项目。以这个 1.0 的例子来讲,咱们在 runoob01 目录下建立 tags 目录用于存放打 tag 的版本,并提交到版本库,而后在 Trunk 上面,按下鼠标右键,选择 Branch/Tag 的项目:
成功的话,您就在对应的 Tag 目录下面创建了一个 v1.0 的目录。固然,若是您这时到 Tag 的目录下面去,会看不到这个目录,您须要在 Tag 目录下面 update 一下,才能看到它。
参考老马的git分支管理教程:https://ke.qq.com/course/368468?tuin=1eb4a0a4