SVN 使用详解(创建仓库,数据提交,分支创建与合并等)

现在版本控制工具常用的有 GIT 和 SVN,今天,我们就来分享下 SVN 下如果创建分支与合并分支。首先,我们需要在我们的计算机上安装SVN的客户端(该步骤略)。

目录

创建 SVN 仓库

trunk/branches/tags 模式

拉取文件

提交文件

更新文件

查看日志

本地查看日志

仓库查看日志

还原文件

删除文件

创建分支

仓库创建分支

本地创建分支

合并分支


创建 SVN 仓库

SVN 是个版本控制工具,要想通过它来管理我们的文件,首先需要创建一个 SVN 仓库。这个 SVN 仓库类似于我们的数据库,它将保存我们管理的所有文件。

这个仓库你创建在计算机本地,就叫做本地仓库;如果你创建在远程计算机或者网络上,那就叫做远程仓库。本地仓库和远程仓库的访问方式一样,无非在拉取文件时,本地仓库填写的是本地SVN地址,远程仓库填写的远程SVN地址。

因此,为了方便,我们这里采用本地仓库的方式进行演示。

我们在本地计算机随便一个目录下(D:\items),鼠标右键单击,如下图选择,开始创建 SVN 仓库。

创建后,我们可以看到文件夹下已经有了仓库相关的初始化资源了。这时 SVN 会继续弹窗提示【译文:仓库已被创建,现在是否创建默认的(trunk/branches/tags )文件夹结构?】,我们选择【创建该文件夹结构】。

这个时候,我们带有 trunk/branches/tags 结构模式的SVN仓库就已经创建好了,最后点击【确定】即可。

trunk/branches/tags 模式

上面,我们提到了 trunk/branches/tags 文件夹结构模式,这又是什么意思呢?

首先我们可以看看没有该模式下的代码控制会是什么样子的?

如上图所示,如果没有使用 trunk/branches/tags 文件夹结构模式,那么整个文件版本控制就一个主流程分支,那么张三,李四,王五在开发的时候,不断向仓库提交代码,就会导致每个版本的代码进行封存。

比如我要统计1,2,3期分别的代码量,由于整个开发都在一条线上,因此很难确定。

又比如,我们1,2,3期三个版本中有一个存在bug,如果你想修复1期的bug,那么代码应该是在10-09号的1期代码上进行修改,而不能揉杂到后面的代码。

当然这里只是举的两个小案例,接下来我们看看 trunk/branches/tags 模式是个什么意思?

他的意思是指:在 SVN 仓库的根路径下,会创建 trunk,branches,tags 三个文件目录。

SVN 为了规范文件管理,建议将主干流程代码放在 trunk 下;将各个分支代码放在 branches 下;将每个版本的代码放在 tags 下。

比如,你开发一个 app 的项目,那么:

trunk 下放的就是正式环境最近一个稳定版本的代码,他的代码变化是由 branches 合并而来的,它并不直接参与代码的开发;

branches 下则是根据功能迭代,人员变化,版本bug修复等需求,从 trunk 或 tags 中创建出来的分支代码。如果主干代码 trunk 需要进行功能迭代,那么我们可以从 trunk 中分离出一个分支进行开发,开发好了在合并到主干流程,并进行一个版本封存。如果需要修复一个版本的bug,那么可以从 tags 下找到对应版本,然后分离出一个分支进行修复,修复好了再合并到原版本。也就是,我们的代码开发都是基于branch 分支下进行更新的。

tags 下则放的各版本的封存代码,比如app1.0版本,app1.1版本,app1.2版本等,一般只读不写。

拉取文件

下面我们来演示下,SVN 如何拉取仓库中的文件。

我们以另外一个地方(E:\my)作为我们读取文件的存放处。

首先,我们拉取 SVN 文件需要知道仓库的地址,我们回到刚刚的 SVN 处,如下图所示,选择 Repo-brower。

然后,我们可以看见刚刚前面所提到的三个模式文件夹,我们选择 trunk 主流程,然后复制他的URL,这就是我们需要的 SVN 仓库地址。

 然后我们回到本地处,鼠标右键单击,选择【SVN Checkout...】

这时,我们将刚刚的地址填进去,然后选择【OK】。

这个时候,我们就可以看到一个svn的隐藏文件夹,这个.svn的文件夹就是 SVN 的相关版本控制的记录(切记不要删了哈,不然你本地的代码就管理不起来了,SVN搞一个隐藏式的基础文件夹,其实就是不想让你看见,免得你手残删除掉,这里我们让你看见,也是为了方便学习,加深理解)。

如果看不到,可以按照如下设置进行查看。

提交文件

上面我们拉取仓库文件后,除了SVN基础的配置文件夹外,好像并没有看到什么东西,这是正常的,因为我们刚刚建立的仓库,确实没有一个文件,现在我们就不妨提交一个文件试试。

 我们创建一个滕王阁诗.txt文件,并写上内容,然后进行保存。

 

然后,我们右键选择 Commit 进行提交(记住提交方式,后面提交我们不再累述)。

首先我们把 【Show unversioned files】前面的勾选选上,如果不勾上,我们是无法看到新提交的文件的;然后把你需要提交的文件前面的勾也勾上,表示我要提交这个文件;最后在上面可以写点本次提交的内容,方便后面查看日志的时候,明白你这次提交的内容是干啥的,最后选择【OK】。

看到下面这个页面,就表示我们的文件已经提交成功了,同时也可以看到,我们的原文件上已经多了一个绿色的勾勾符号,这表示该文件已经被 SVN 管理起来了。

然后我们回到刚刚的仓库界面,就可以看到我们提交的文件了,以及包括他的文件大小,提交时间,提交者等信息。

更新文件

我们回到本地,把刚刚的内容进行更新,添加上诗的名字和作者,点击保存。

保存后,我们可以看到,文件图标上的绿色勾勾已经变为了红色感叹号了,这个就表示这个文件已经有变动了。

绿色勾勾:表示本地文件和仓库文件内容是完全一致的。

红色感叹号:表示本地文件已经发生变更。

我们继续提交,输入提交时的更新信息,点击【OK】。

我们再次进入仓库,双击文件打开,可以看到,更新的内容已经同步到了仓库中。

查看日志

不管是在本地,还是仓库,我们都可以看到文件的所有的提交记录。

本地查看日志

我们选择本地对应的文件,右键如下图所示,选择【Show Log】

然后,就可以看到该文件所有的历史提交记录。

我们选择一次提交,然后右键选择【Compare with previous revision】,就可以看到本次提交的内容了。

 如下图,我们可以看到,这次提交的版本(右边)和上次版本(左边)的区别了。

仓库查看日志

同理,我们在仓库中,选择该文件,右键同样可以看到该文件的历史提交记录。

还原文件

现在,假设有个小朋友,将我们的文件内容进行了随机打乱(如下图),并进行保存。这个时候,你想打他的心都有了,但你现在最想的是将文件进行还原。

这个时候,我们可以选中文件,如下所示,选择【Revert】进行还原即可。

 然后我们勾选我们需要还原的文件,点击【OK】即可。

这时,可以看到我们的文件已经还原成功了(出现了绿色勾勾,就表示已经和仓库中的最新版本保持了一致)。

删除文件

下面,我们再来演示下,如何删除仓库中的文件。

首先,我们继续添加两个新文件(1.txt 和 2.txt),并提交到仓库中。

然后我们将本地的两个文件直接删除掉。

 然后点击空白处,进行提交。

 填写提交记录,并选择【OK】。

 删除成功弹窗提示。

创建分支

所谓创建分支,就是指将原来的数据进行备份,然后形成一个新的分支,我们就可以通过修改分支上的文件,这样原数据就不会受到影响。普通的分支为 branch,对代码进行版本封存的叫 tag 分支,两种的创建方式都一样,只是叫法不同而已,下面以创建 tag 分支为例进行演示。

仓库创建分支

 进入仓库,我们选择主干 trunk,右键选择【Copy to...】 。

这时他会让你填写URL,一般我们将代码的版本都是封存在 tags 下,并且以版本号作为区分路径,所有这里我们将URL改为..../tags/1.0(前面根目录不动,将trunk改为 tags/1.0 即可),这就 表示这个下面存放的是 1.0 版本的代码文件。

 填写好对应的备注,点击【OK】。

 选择根目录,右键点击【Refresh】进行刷新(由于拷贝需要时间,所以文件多的话就稍微等一下再刷新)。

刷新后,我们可以看到,主干代码的文件夹和文件已经成功备份到1.0版本了。

本地创建分支

我们在本地的根目录,右键单击空白处,如下图选择【Branch/tag】

 由于刚刚创建了1.0版本,这里,我们以保存1.1版本为演示。首先也需要填写好分支的路径,然后选择 HEAD revision in the repository 表示复制的是最近的版本,最后点击【OK】。

看到下面这个页面就表示已经创建OK了。

现在我们重新进入仓库,可以看到 1.1 版本的tag分支也已经创建好了。

合并分支

假设现在有 2.0 版本新需求要开发,那么我们可以创建一个新的分支,来作为我们新开发的一个分支点。于是,我们可以按照第9步演示,基于 trunk 创建一个  2.0-dev 的分支到 branches 下,如下图所示。

然后,我们复制 2.0-dev 的URL,将它的数据和文件剪切到另外一个新的本地空间里(E:\my2)。

 

 我们将复制的 URL 填入到对应输入框处,点击【OK】。

这个时候,SVN仓库里的2.0-dev 分支的文件已经下载到本地了。

 如下图所示:假设我们这次新的开发里,增加了123.txt,并且修改了 滕王阁诗.txt。

 然后,我们填写好备注,勾选好文件,确定【OK】,将所有文件提交到 SVN 上。

 我们打开仓库可以看到,2.0-dev 中已经有了我们最新数据文件。

 而此时,我们的 trunk 中还是之前的文件。

于是,当我们开发完成后,我们需要将分支的代码,合并到主干 trunk 中去,这样主干的代码在下一发版的时候,才具有新的功能。

我们进入本地的主干根目录里,右键空白选择【Merge...】开始进行合并。

注意:我们在进行任何提交,合并等操作时,记得先【SVN Update】下进行更新。

选择第一个合并即可(第1个是指同一源的两个分支进行合并,第2个可以将不同的树进行合并),点击【Next】进入下一步。

然后填上分支的路径(如果怕填写错误,可在右边三个点的地方进行选择),然后如下图顺序选择。

然后来到下面这个页面,在合并前,可以点击下【Test merge】先测试下,是否能合并成功。如果测试失败,可以先返回,更新或者还原下 trunk,如果更新或还原后还是测试合并失败,那么就需要解决冲突了。

当出现下面类似界面时,没有红色冲突提示时,就表示可以进行合并。

 这个时候,我们就可以点击【Merge】进行真正的合并。

 同理,出现这个界面就表示合并成功了。

合并后,我们可以看到分支 2.0-dev 的123.txt 文件已经到了本地 trunk 中,且另外一个文件也提示发生了变化。

刚刚,我们的合并只是在本地进行的操作,如果你想让仓库也保持合并,那么,现在只需要将合并后的本地 trunk 提交推送到仓库即可。

 OK,这个时候,仓库里也保持了合并操作后的数据。

 这个时候,我们去仓库里看,就可以看到合并后的文件了。

猜你喜欢

转载自blog.csdn.net/sunnyzyq/article/details/122533854