SVN用法及切版本与合版本

SVN用法及切版本与合版本

(原创内容,转载请注明来源,谢谢)

SVN(Subversion)在工程中运用广泛,多人合作项目、项目版本控制等方面,SVN都是不可或缺的。虽然最近很多项目也在使用Git,但SVN仍是现在流行的版本控制系统。SVN与Git相比,最大的一个优势是存在全局版本号。

一、概述

SVN分为客户端和服务端,即需要在一台大家都能访问到的服务器上安装SVN的服务端,然后各自的电脑里安装SVN的客户端。安装的过程这里不讲,有很多博客如http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html讲的不错。

二、基础命令

1、获取代码

svncheckout svn版本路径。checkout可以简写为co。

该命令用于获取SVN服务器上某个版本路径的代码。

2、更新代码

svnupdate [路径/文件名]。update可以简写为up。

该命令用于获取SVN服务器上某路径某文件的最新内容,如果不加路径和文件默认获取SVN服务器最新版本的所有内容。

3、提交代码到临时路径

1)svn add 文件名。

新添加的文件,需要使用此方法将新的文件提交到临时路径下。

2)svn delete 文件名。delete 可以简写为del或者rm。

删除一个文件,需要使用此方法,告诉临时路径该文件即将被删除。

4、提交代码到SVN服务器

svnci –m ‘comment’ 文件名。commit可以缩写为co,-m是用于添加备注的,建议每次commit的时候,都需要提交备注,这样以后有问题的时候,也便于查找原因。

上述第三点的add和delete命令输完后,必须使用commit命令提交到服务器,才会生效。另外,平时修改完的文件,也需要commit才会生效。

5、冲突解决

svnresolve

svnup获取svn ci时,假设发现文件my.php有冲突,会收到如下提示:选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,(mc) 我的版本, (tc) 他人的版本,(s) 显示全部选项。

如果要抛弃自己的编辑,可以选择tc,如果已经确定别人不需要他们的改动了,可以选择mc。但是,通常选择p进行推迟,然后会生成my.php.mine,my.php.r上一版本号,my.php.r本版本号,my.php。可以用vi打开my.php,会发现<<<<<<<、=======、>>>>>>>类似这样的分割,标记着自己的改动和他人的改动。

修改完成后,删除<<==>>这些记号和没用的自动生成的备注后,使用如下命令;svn resolve –accept working my.php,告诉SVN已经解决冲突,并且会自动删除上述生成的那些文件。然后再用SVN ci进行提交即可。

如果无法确定是否保留对方的修改,则需要叫上改动人员一起查看问题。

6、其他命令

1)svn diff 文件名,diff可以缩写为di,该命令用于比较当前路径下的文件与SVN服务器相对应路径下的文件的差异,可以具体到每一行,会显示差异的行的内容。如果不输入文件名,会比较所有的文件。

另外,可以用svn di –r版本1:版本2 文件名,比较两个版本之间的差异,默认是比较本地版本与当前SVN服务器版本的差异。

该方法在commit之前,建议使用,如果有冲突也可以提前处理。

2)svn convert 文件名。

该命令可以将某个文件还原成SVN服务器的版本,该操作将使本地的修改丢失,该命令等同于rm 文件名 + svn up 文件名。即把文件删了再重新获取。

另外,svnconvert –recursive * 可以递归还原所有文件。

3)svn mkdir 文件夹名。

该方法会在SVN临时路径创建一个文件夹,相当于mkdir 文件夹名 + svn add 文件夹名。

4)svn cat 文件名。

该方法不检出文件,仅查看服务器上该文件的内容。

5)svn status。status可以简写为st或者stat。

该命令用于查看当前路径下,本地SVN副本和SVN服务器上的差异,返回的结果是一个英文字母+文件名,即本地文件与SVN服务器不一致的文件名。

英文字母:M-修改,U-线上有更新,A-新增,D-删除,?-本地新增还未添加到SVN临时路径,C-冲突。

7、查看日志

svnlog 文件名。该命令会查看文件的所有版本commit的日志信息:版本、作者、日期、comment。如果不加文件名,则为所有文件的版本信息。

三、分支合并与切版本

1、概述

在大型项目中,版本通常分为tags、trunks、branches三种。

tags表示快照,即当前线上生产系统的版本,通常不在此类型下进行开发,除非紧急上线。

trunks表示当前的主版本,branches是分支版本。通常合作者都在各自的branches上开发,并及时与trunks进行同步,每次开发前也从trunks进行更新。

因此,分支合并通常指trunks合并到tags,切分支通常指trunks复制一份branches。

2、命令

1)合并分支

svnmerge 路径1 路径2 [合并后的路径]。默认合并于当前路径。

该方法会把两个文件合并。建议使用该命令之前,需要先进行svn up,并把冲突解决以后在指向,否则会合并失败。

另外,svn merge以后,仅合并到暂存的路径下,需要svn ci进行提交到SVN服务器才可以。

2)切分支

svn copy 主路径 复制后的路径 –m ‘comment’。copy可以简写为cp。

该命令将服务器上的文件复制一个工作副本到本地,在服务器并不保存这些文件,只有一个指向该文件的节点。

——written by linhxx 2017.07.12

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术

文件的相对路径和绝对路径以及根相对路径

  如果当前文档和目标文档所在的文件夹位置平行,则书写为:文件夹名称/目标文档全称;

662
来自专栏微信公众号:Java团长

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

导读:因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料。GitHub虽然有些许改版,但并无大碍。

834
来自专栏pangguoming

CentOS中zip压缩和unzip解压缩命令详解

以下命令均在/home目录下操作 cd /home #进入/home目录 1、把/home目录下面的mydata目录压缩为mydata.zip zip -r m...

2535
来自专栏Spring相关

在Centos7上安装Docker

在Centos7上安装Docker-ce直接用yum install docker -y安装的docker版本为1.12,但是docker发展很快,现在都18....

1153
来自专栏后端技术探索

推荐!手把手教你用 Git

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自...

702
来自专栏Java后端技术

Centos7设置IP为固定值

注意:如果发现你的虚拟机连不上网,ping固定地址的时候出现:connect:Network is unreachable;而且使用以下命令查看ip时发现ip并...

694
来自专栏后端技术探索

推荐!手把手教你用 Git

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自...

382
来自专栏Aloys的开发之路

热切换Log4j级别配置

做一个产品或者项目,在测试时一般要打印详细的log,发布以后,因为打印日志会损失性能,所以通常在生产机上将log4j级别设置为最高,以提高效率,一旦客户那里出了...

1925
来自专栏北京马哥教育

ansible常用模块简单介绍

本篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、...

780
来自专栏小二的折腾日记

Linux修改用户名和所属组

腾讯云的云服务器的,初始的用户名和主机名都是分配的。主机名其实还好了,用户名总是一个ubuntu有点看的不爽,正好看到了用户管理,就在这准备改一下,mianhk...

902

扫码关注云+社区