svn使用教程(个人笔记)

本文参考:https://www.cnblogs.com/dreamaker/p/10490112.html
https://blog.csdn.net/justry_deng/article/details/82259470

安装

如果命令行操作,勾选command line client toolwill be install on local hard driver,不用命令行跳过这一步。

image_1ak3cf587b5a15j21i9s1ne8uhf1g.png-55kB

一路next安装。安装完毕后,在任意地方右键查看快捷菜单。发现TortoiseSVN即表示安装成功。

image_1ak3cneu9tb6pu8k44rck90k1t.png-135kB

如果勾选了安装命令行工具,那么输入命令SVN,有如下提示也表示安装成功

image_1ak3ctqp61c0a1vku1e30cib9312a.png-9.6kB

但是此时菜单全是英文的,如果你不习惯英文,可以去下载语言包,记得下对系统位数。

image_1ak3b28uv1et21lelqiglpr1krjm.png-46.3kB

安装完语言包之后,可以右键进入setting设置。

image_1ak3d7reg1tdhdqjhfhim319d2n.png-89.7kB

选择喜欢的语言(比如中文),然后确定,不出意外,现在的语言已经切换到中文了。

image_1ak3dama4kcf1flmr9a8d1hqe34.png-187kB

安装教程到此结束,下面开始介绍SVN的使用。

使用说明

创建仓库

  1. 假设您的要放置 Repository的地方是D盘,您需要先建立一个空的目录。如图例:

    image
  2. 鼠标右键后,选择TortoiseSVN->Create repository here

    image
  3. 创建成功

    image
  4. 创建默认文件结构

    image
  5. Start Repobrowser(文件库浏览器)

    image
    image
  6. 默认的Svn Repository文件结构

    image
  • 咦!这样一个简单的本地svn repository 就成功搭建了。

查看svn repository仓库

image.png

检出项目

假如项目已经在服务器的仓库里,那么现在你要做的就是把它检出到本地。
首先创建一个空文件夹。在空文件夹内右键,选择SVN检出。

image_1ak3do46q18kl1l79c9u4pu1mdd3h.png-21.5kB

现在你看到应该是这个界面,填入版本库地址,选择确定。

image.png

此时会弹出一个对话框让你输入账号密码,输入你的账号密码即可。记得勾选保存认证,不然每次操作都会让你输入。

image_1ak3e0eesor01kg616s81aj11h524b.png-21.5kB

等几分钟就可以检出完毕。

image_1ak3e38931rr19dg1cbd1t8pn3g4o.png-51.4kB

此时在你的目录下就能看到你的项目,现在可以开始愉快的工作了。

image_1ak3e6ja4gnsvep1oaluia2pp55.png-5.3kB

导入项目

但是有时候你已经在本地建立好了项目,需要把你项目推到SVN上,此时应怎么做呢?
右键选择版本库浏览器。

image_1ak3eopb116i6192u14i4c7r1avu6c.png-101kB

在相应目录下,右键,加入文件/加入文件夹,选择相应目录即可。

image_1ak3etni4fba1oi017rv1u6m1gn16p.png-116kB

比如我现在有个项目叫SVNProject,我想把它传到SVN上。

image_1ak3f04bl1k5q1qmrrcmu4m1j2j76.png-50.7kB

那么我只需选择加入文件夹即可。

image_1ak3f5l6f1h8f1rimgee1544sdc7j.png-35kB

务必要输入提交信息。这样别人才能知道你干了什么。

image_1ak3f7oe71gs6mkdlucdrrqq880.png-31.7kB

导入成功就能看到目录。

image_1ak3fbqo13gu1uji53ku5g1bs68d.png-110.6kB

但是,不要以为导入成功就可以了。你还得重新检出,重新检出的项目才是受SVN控制的,务必记得检出。

image_1ak3fghhcg9fk9oab61n5q1sqg8q.png-110.6kB

在SVNProject上右键检出到本地,然后在里面进行修改。现在就可以愉快的工作了。
检出过后的右键菜单变成了这样。

image_1ak3fnbnn1ber1u0k1hbs1ti6ovi97.png-24.4kB

提交

绿色表示当前文件没有被修改过(看不见颜色的重启下电脑就好了)。

image_1ak3g3u171j9j1r40mbp1hkv12ju9.png-4.1kB

假如我现在在我是新项目.txt中加了一行字,然后保存。

image_1ak3g7ct21svq1lrejruu6e16okm.png-6.1kB

发现现在变成了红色,红色表示已修改。

image_1ak3g9vfl1rqc1mvb19s81hg1t3913.png-4.9kB

怎么提交修改?
在根目录下,右键选择提交。

image_1ak3gdc7j17dt1n50d1l8e1trp1g.png-25.2kB

务必记得输入提交信息(虽然不输入也能提交),提交信息可以方便日后查看。

image_1ak3gif5h13l11rfmorm87g5a71t.png-74kB

提交完毕后,可以发现又恢复到了绿色。

image_1ak3gngr3o2amk41abkod91ogi2a.png-5kB

假如现在加入了一个新文件。可以看出是蓝色的。蓝色表示不属于版本库的未知文件,未知文件是不能提交的。

image_1ak3grpb5hgbs62sj4tthfql2n.png-11.6kB

记住选择增加把它加入到版本库里面去。

image_1ak3h1boe1njh1dhrhu1bjr1t333k.png-50.7kB

增加完毕后,变成了蓝色加号,表示新增加的版本库文件。

image_1ak3h5j9j1j4cnfhhq2vv2lba41.png-4.3kB

接下来,只需写代码,然后提交即可。
删除文件也应该右键提交,如下。

image_1ak3hcqrakda18mc5pg1dlke4d4e.png-57.7kB

记得随时检查你的文件状态,如果没有添加到版本控制里要及时添加进去,不然你的文件提交不上去。

更新

假如你和B同学在协作。B同学写完代码提交到了SVN上,如果你想获取最新修改,就需要选择更新(如果服务器上已经有别人提交过的新的,你是提交不上去的,必须先更新再提交)。
怎么知道服务器有没有更新?你可以直接选择更新,有没有更新一下就知道。或者右键检查修改,然后检查版本库,就能看到服务器上改了哪些文件。

image_1ak3i1mon1f871qr9178eds61qoq4r.png-100.3kB

右键选择HEAD和BASE比较。

image_1ak3i7ql4mre1t6e17r717o81nlq58.png-22.9kB

左边的表示你的代码,右边的表示服务器上的代码。

image_1ak3i9ado1p6cv6aoh460210it5l.png-117.7kB

如果有修改记得及时更新到本地然后再继续工作。

但是有时候更新会冲突,比如你和服务器上的改了同一个地方。
这时候你需要更新下来解决冲突。

image_1ak3ihv861ceq1gko16jl1uu3mqe62.png-68.8kB

它会提示你哪个文件冲突,你只需打开那个文件,按照需求解决冲突即可。

image_1ak3ikl7a1c9dmk619r9d371mui6f.png-11.4kB

<<<<<<.mine到====表示你的代码,其他表示服务器的代码。你只需改成你想要的。

image_1ak3iojkm7ic6911jr39021qk46s.png-5.1kB

然后选择解决,告诉SVN我已经解决冲突了就行了。

image_1ak3itj8gt8315rf1flij6k1l1979.png-41.3kB

剩下的就是团队协作间的更新提交操作,这里不做赘述。

查看日志

选择显示日志,可以看出团队里面的人干了什么。

image_1ak3j48bv6r9tnm821u3gpjn7m.png-30kB

可以看出谁谁谁,什么时间,干了什么事。最后那一列信息是自己提交的时候写的。建议大家提交时务必要填写提交信息,这样别人一看就知道你干了什么。提交信息对于自己也是有好处的,时间长了也能看到当初做了什么。

image_1ak3j7va3jbt147j1s2thni1eui83.png-98.6kB

版本回滚

如果你改了东西,但是还没有提交,可以使用还原功能。


image_1ak4pcd3bpac328t5u1mas1k1v9.png-103kB

但是如果我们写错了东西并且提交了上去怎么办?通过版本回滚可以将文件恢复到
以前的版本。右键更新至版本,通过查看日志来选择版本,然后回滚即可。


image_1ak3k9pl5nt0euj10eob6e1pai8t.png-21.1kB

有时候我们需要查看以前版本的代码。此时我们可以新建个文件夹检出到指定版本。

image_1ak3kifgr1b1q1fv0p871f25jda9a.png-158.9kB

版本控制

版本控制有好几种方法,如下。

  1. 在提交发布版本时添加版本信息,这是最简单的一种方法。


    image_1ak3locvo1ndq4pg1nohuhn1fh89n.png-17.1kB
  2. 打标签
    每次发布版本时应该打标签。右键选择分支/标记。在至路径以版本号打上标签即可


    image_1ak3muiav1t0o9v21a5qfnt3ut9.png-28.3kB
    image_1ak4tm0e3aal1t71r94p941h9p2a.png-80kB

    这样你就有了一个v1.0版本的标签。
    以后如果你想查看某个版本的代码,只需切换过去就行


    image_1ak3n7ai51l6b77j10811plc12ba13.png-14.9kB

SVN几个重要文件夹说明:

我们一般习惯性在创建repository仓库后,再在刚才创建的仓库里面再创建trunk、branches、tags这三个文件夹,而不是直接将项目提交到仓库的根目录下(虽然直接将项目分享到仓库的root根目录下也是可以的,但是我们一般不这么做)。主要目的是:为了给项目各个阶段,各个版本归类、分阶段存储、并行开发。

trunk文件夹: 主干,我们一般把项目提交到此文件夹里面,在trunk中开发。

branches文件夹:分支,我们一般把那些需要打分支,但是有可能会修改的项目代码,打分支到此目录。

tags文件夹:分支,我们一般把那些阶段性(如迭代各期)的项目代码,打分支到此目录。

注:其实也不一定非要手动创建这三个目录,在我们打分支选择打到branch或tags等时,会自动在对应的repository仓库的根目录下创建该文件夹。

注:我们在第一次连接SVN的repository时,可以指定连接目标仓库下的不存在的文件夹,当我们第一次将项目
team>>>share project时,将会在该仓库下自动创建URL中不存在的文件夹,并把代码放进去。

提示:开发时,可以以开发trunk中的项目代码为主,当开发到某个时期(你觉得比较重要的时期)时,可以看情况将需要备份的文件夹(或文件)打分支到其他如branches、tags等文件夹下。


image.png

注:需要时,我们可以从SVN上同步分支中的任意时期的项目代码(注:我们当然也可以同步trunk主干下的最新的代码)。

注:有时,我们也可以在branches中开发(但是需要即时将trunk中的代码合并到branches中,但是暂时不将branches中合并到trunk主干上),然后开发到一定程度的时候,再将branches合并到主干trunk上。此方式,也很常用。

声明一:本次示例的软硬件环境为:Windows10、VisualSVNServer、TortoiseSVN、Eclipse。

注:VisualSVNServer主要用作SVN服务端、TortoiseSVN主要用作SVN客户端。

声明二:由于Eclipse或其它IDE开发工具的SVN插件版本不同等原因,所以这里并不以SVN插件来介绍分支的使用,
下面是以TortoiseSVN客户端来介绍分支的使用的。

准备工作:

这里使用VisualSVNServer创建一个本地仓库:

image.png
image.png

注:创建repository时需要先创建user,这里就不详细介绍了。

注:创建SVN仓库的方式较多,本人这里是利用VisualSVN Server创建的。

创建完成,如下图所示:

image.png

注:右键目录或仓库,会出现拷贝连接SVN的URL的选项。

往SVN中放入一些东西,方便下面讲解。

注:可以使用Eclipse的SVN插件将项目分享到SVN的仓库中,也可以使用TortoiseSVN将文件夹add到SVN的仓库中,还可以……这里就不再给出具体步骤了。

使用TortoiseSVN来管理SVN:

使用TortoiseSVN来查看一下SVN中的内容:

image.png
image.png
image.png

使用TortoiseSVN检出SVN中的项目:

image.png
image.png

可以看见,已经检出到桌面了:

image.png

SVN打分支:

方式一:先检出,再打分支


image.png
image.png

注:to path中输入或选择要打分支到哪一个文件夹下;如果是输入的是不存在的文件夹的话,那么会自动在SVN中创建该文件夹。

注:/branches/project20180831是指当前仓库文件夹下的branches文件夹下的project20180831文件夹。

分支创建完毕,我们再去看一下:

image.png
image.png

注:在某一个枝干上的操作,其作用范围就是其自身,并不会影响到其他枝干(注意:这里说的是一般操作,分支合并等情况除外)。

可以简单测试一下:在主干trunk上略作修改之后,提交。再用TortoiseSVN查看一下分支上的对应文件,发现是修改
前的;查看主干上的对应文件,发现是修改后的。说明枝干之间不会发生干扰。

注:打分支之前,要保证本地的和服务器上是一致的,即:打分支前需要update、commit。

方式二:直接在客户端,通过Copy to的方式,打分支

选择要备份的目录:

image.png

右击 > Copy to,填写要打分支到哪里:


image.png

填写分支信息:

image.png

点击ok后,刷新一下客户端,可看见打分支成功:

image.png

合并分支:

提示:合并分支即>>>选择目标分支合并到当前所处分支。


image.png

注:可以合并文件也可以合并整个文件夹,看自己的需求。


image.png
image.png
image.png

如果Test merge测试没冲突的话,是这样的:

image.png

此时直接再点击Merge合并即可。

Merge解决冲突:

如果Test merge测试有冲突的话,是这样的(示例):

image.png

此时点击Merge,会出现:


image.png

点击Edit conflict来编辑冲突:

image.png

在合并后的枝干对应栏中编辑后,Save保存后关闭。

点击已解决Resolved按钮:


image.png

点击OK即可:

image.png

此时,(冲突已经解决并且)已经合并完毕了。

注:Merge合并之后,只是在本地的当前枝干发生了变化,而在服务端SVN中的当前枝干还是合并之前的;所以合并之后确认没问题后还需要commit到服务端SVN,以保证其他小伙伴能拿到最新的代码。

注:如果发现合并之后,还有问题,那么可以回退

image.png

切换分支:

image.png
image.png

注:我们在打分支时,取的分支文件夹名虽然和项目名不同(如下图),但是当我们切换分支时,右击项目(Abc_SVN_Test)之后,选择要切换到的分支时,直接选我们打分支时起的文件夹名字即可。虽然两个文件夹不同,但是切换分之后,还是会以Abc_SVN_Test为文件夹名,只是里面的内容变成了切换到的分支的内容。

image.png

注:切换分支后,我们的update、commit等基本操作,其作用范围只是当前分支,并不会影响其他分支。

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