svn命令行操作「推荐公司新人svn使用教程」

大家好,今天杨梦瑶给大家准备的干货是svn命令行操作,公司新人svn使用教程,以及关于教程,仓库,平台的一系列相关内容,认真阅读完,把我想表达的思路完全理解,相信你很快就可以掌握!

33ee6ea4d86df986210d9e5bdb173a90.png

一、SVN工作原理

SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。

每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地(Checkout),然后用户可以在本地任意修改,最后用svn命令进行提交(Commit),由svn源代码库统一管理修改。如下图:

2049bdaa0f9d95d21d005812765ba38a.png
  • SVN服务器:运行SubVersion服务的计算机,SubVersion支持Linux和Windows,更多的是安装在Linux下。SVN提供服务有两种方式(运行方式):独立服务器和借助Apache服务器,分别使用SVN协议和Http协议。
  • SVN客户端:用户通过SVN客户端同SVN服务器打交道,SVN客户端分为命令行工具和图形化工具。最流行的客户端是TortoiseSVN。也可以在Eclipse中使用SVN插件。
8adbb8aa02f8857299a815149d50164f.png

二、SubVersion的使用

可以在http://subversion.apache.org/packages.html下载SVN并安装(本文使用windows版本,过程不多说)。在SVN中集成了服务器端和客户端组件:

  • 服务器组件(管理员用):svnadmin、svnserve
  • 客户端组件(程序员用):svn

这些组件命令都位于SubVersion安装目录下的bin目录下。

友情提示:安装完SVN后,通过”svnadmin –version”验证是否安装成功。如果出现错误“svnadmin不是内部或外部命令”,则需要手动将SVN的bin目录加入到path环境变量下。

1、创建SVN仓库

1)先创建一个目录:E:svnrepoepoDemo1。后面就使用该目录作为SVN仓库。

2)创建仓库:svnadmin create E:svnrepoepoDemo1。创建仓库后的目录结构如下:

85923c8f29d2dc435919fce14ccae562.png

3)启动SVN服务:svnserve -d -r E:svnrepoepoDemo1,如下图:

5216dbd0a004240382471ddbf5df209c.png

这样就启动了repoDemo1这个仓库的服务(单仓库),如果在svnrepo目录下还有其他仓库,且要同时启动多个仓库,执行svnserve -d -r E:svnrepo即可(多仓库)。

一般情况下,访问SVN仓库的URL格式形如:svn://192.168.1.6/repoDemo1,但如果启动的是单仓库,则URL直接用:svn://192.168.1.6表示。svn协议的默认端口号为3690。

小技巧:如果需要频繁使用该仓库,则可将该SVN服务注册成windows服务,这样在计算机开机时就可以启动该服务。如下图:

f0682aebce9df15f8bab9977126142f6.png

删除该windows服务:sc delete svnService。

2、SVN客户端操作(命令行)

重点:checkout(检出)、commit(提交)、update(更新)

1)在E盘下建立user1、user2两个目录,模拟两个协同工作的用户的workspace。

2)检出:第一次和SVN服务器交互时,需要使用checkout将仓库检出到本地。

27cbb12477a6b367ca61f18ed9c8fcde.png

说明:检出一次,就建立了与SVN仓库的连接。

3)提交:commit

在user1目录下新建Demo1.java文件,将该文件提交到SVN仓库。下图演示了三种典型的错误提交。

2699904d5dc93afb00af479588b9e265.png

4)更新:update

切换到user2的工作空间(user2目录下),user2第一次使用SVN仓库,需要检出。user2修改Demo1.java后提交。切换到user1目录,更新(update)。

6ef19d30823524bdefff38a48a736e43.png

5)删除与恢复:delete、revert

cbd9595e37b11542a19a8e20e33a9fbc.png

说明:如果delete后,提交到服务器(commit),则服务器上的数据也被删除了(慎用)。

三、SVN的目录约定

  • /trunck:开发主线
  • /branches:支线副本
  • /tags:标签副本(一旦创建,不允许修改)

1)使用trunk作为主要的开发目录

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。

当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。

2)下图为struts2的SVN仓库目录:

968960500a432c8de18ba59fe84b6e34.png

现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的。

四、TortoiseSVN的使用

TortoiseSVN是现在最流行的SVN客户端工具,使用图形化界面和SVN仓库交互(作为命令行方式的替代)。关于TortoiseSVN的安装省略。

安装完成后,在任意位置右击都能看到TortoiseSVN选项。

1、基本操作

1)创建仓库

创建目录:E:svnrepoepoDemo2,进入该目录下,右击 — TortoiseSVN — Create repository here,并创建默认的SVN目录结构,如下图所示:

e839466be90b30327446462be8c5be76.png

2)检出:checkout

在E盘下建立user3、user4两个目录,模拟两个协同工作的用户的workspace。

进入user3目录下,右击 — SVN Checkout,在URL of repository中输入:file:///E:/svnrepo/repoDemo2。【此时仓库还没有启动SVN服务,所以使用file://】

dbbee9bd2fb9296809db9a4378cba7b3.png

3)提交:commit

在user3/trunk目录下新建Demo1.java,在该文件上右击 — TortoiseSVN — add,则将Demo1.java纳入版本控制。然后右击 — SVN Commit,提交至代码仓库。

4)更新:update

对user4进行上面的检出操作。并修改user4目录下的Demo1.java(如增加一个字段),并commit。

回到user3/trunk,右击 — SVN Update。

5)启动SVN服务。这步需要在命令行中输入:svnserve -d -r E:svnrepo

6)访问SVN仓库。在任意空白位置右击 — TortoiseSVN — Repo browser,URL输入:svn://192.168.1.6/repoDemo2即可浏览SVN仓库中的内容,如下。

bd2d819745abb23031c0ab74f05d1629.png

2、其他操作

下面的操作都位于右键菜单的TortoiseSVN中。

1)删除:delete

删除文件或目录,不能直接用Windows的删除命令来操作,那样只是没有显示出来,实际并没有删除,在更新后,删除的文件又会被更新出来的。要想从库中删除,必须选中你要删除的内容,TortoiseSVN — delete,这样才会将这个文件标记成要删除的。确认需要删除后,使用前面所讲的提交命令,就会真正的在库中删除了。

2)重命名:rename

重命名也不能直接用Windows的重命名命令来操作,必须选中你要重命名的文件,TortoiseSVN — rename。修改后提交就可以更新到仓库。

改名的处理方式相当于新增了一个以新名称命名的文件,原名称命名的文件进行了删除。

3)还原:revert

在未提交之前,你对前面做的操作反悔了,可以使用revert来恢复。

4)检查更新:Check for modifications

① 此功能可以显示你所做的修改有哪些还没有提交的。② 还可以看到版本库里的改动,即别人提交了哪些文件的改动,你还没更新到本地。

5)导出:export

使用SVN的工作空间每个目录下面都有一个.svn隐藏目录,利用SVN的export命令可轻松地导出不含.svn目录的工作空间。

3、冲突问题的解决(☆)

何时发生:接着4.1节中的操作,假设user3和user4目录下的Demo1.java都更新到了最新版本。user3修改Demo1.java,提交至仓库。若user4也修改Demo1.java并提交,此时user4的TortoiseSVN会报提交版本过时的错误,并提醒user4需要更新,更新时就会发生冲突。如下图:

7b9d786e7cb0e0e6354ab1614b2e89ea.png

对于每个更新冲突的文件,Subversion会在冲突文件所在目录下放置了三个文件:

  • Demo1.java.mine:发生冲突时的本地版本。
  • Demo1.java.r3:最后更新之后的本地版本。
  • Demo1.java.r4:仓库中的最新版本。

解决方法 1:

① 在Demo1.java上右击 — TortoiseSVN — Edit conflicts,这时你需要确定哪些代码是需要的,做一些必要的修改然后保存。小技巧:编辑冲突时,可使用直接复制需要的代码到Merged窗口即可。

② 编辑完成后保存,直接选择Mark as resolved,即标记为冲突已解决。退出编辑冲突窗口,发现冲突发生时生成的三个文件被自动删除了,且Demo1.java变成了未提交状态。

78121d0302728f7f5d4669ed69c7a8ea.png

③ commit,OK。

解决方法 2:

直接修改Demo1.java,把其中的一些标记删除即可(前提是服务器上的和本地的内容都需要保存)。

4、TortoiseSVN图标

1b370581ed6b7e1593192034708fad83.png

部分图标的说明:

  • normal:状态正常
  • modified:对本地的副本做了修改,需要提交到服务器
  • conflicted:有冲突
  • readonly:文件是只读的,要修改必须先获取锁
  • locked:获得锁
  • deleted:计划从版本库中删除
  • added:已被计划纳入版本控制
  • non-versioned:未纳入版本控制

5、认证与授权

所谓认证(Authentication),就是给使用该仓库的用户分配一个用户名和密码,用户在连接仓库的时候需要输入用户名/密码。授权(Authorization)就是为指定用户分配特定的权限,如只读、读写等。认证与授权的设置需要修改仓库conf目录下的文件,如下:

  • authz:认证文件,分配用户名、密码。
  • passwd:授权文件,为现有用户分配组,并为组分配权限。
  • svnserve.conf:指定认证、授权文件的位置。

1)修改conf/svnserve.conf

2acbea6ea00dc8e308b55121f38161ae.png

2)修改conf/passwd

6d50846eb02b660e8bccc663746b463a.png

3)修改conf/authz

69825edb99e873bf3228c28e5fb1a88b.png

这样,当用户再次执行checkout、commit、update时,就会要求认证。

五、subclipse插件的使用

Eclipse提供了集成SVN的插件 — subclipse,本文重点关注subclipse的使用。Eclipse中插件的安装不是这儿的重点。安装成功后,可以看到下面的视图(Windows — Show View)和透视图(Windows — Open Perspective):

36639aac9c53b8e8374cba11b0f7b5ff.png

下面的操作使用了4.1节中的资源库(repoDemo2)。

1)关联资源库

进入SVN资源库研究透视图,在SVN资源库面板上右键 — 新建 — 资源库位置,URL中输入:svn://192.168.1.6/repoDemo2。

2)共享项目:share Project

新建一个Java Project,名称为svnProject,在项目中新建一个Demo1.java。

共享项目:在项目上右键 — Team — Share Project…,将项目导入到repoDemo2。在输入文件夹名时,一般选择使用项目名称作为文件夹名。

3)提交:Commit

共享之后,项目并没有提交到仓库中,此时在项目上右键 — Team — Commit,就可以将现在的项目提交到仓库中。

4)检出:Checkout

新建一个workspace,模拟另外一个用户(user2)。首先还是关联资源库,在svnProject上右键 — 检出为。

ccec7296ff549ecd7c8c0e4e9bc2713f.png

在Demo1.java中新增一个字段并提交(在user2的workspace中做的)。

5)更新:

切换到user1的工作空间,更新项目。不多说,Team — update

6)冲突处理

冲突的产生见4.3节。原则:提交之前先更新。

4.3节中的两种解决方法也适用于subclipse,解决方法1对应着subclipse中的Synchronize视图(View),解决方法2类同。

六、SVN与Apache整合(用到再看)

业务场景:在上面的Demo中,SVN仓库对外提供服务都是通过SVN协议,最直观的体现就是URL都是以svn://开头的。在开源项目中使用的SVN仓库对外提供服务时都是使用http协议,此时需要结合Apache服务器。

1)安装Apache服务器(假定安装在C:Apache2.2)

2)修改C:Apache2.2confhttpd.conf释放掉注释和增加红色边框的两行(有顺序要求)

5e5673878eebe0b41bbedda125d8e67d.png

3)从SVN安装目录的bin目录下,拷贝mod_authz_svn.so和mod_dav_svn.so到C:Apache2.2modules目录中

4)用Apache服务器的htpasswd创建密码文件

db2f76c19067299370a4f8ead2dd3a8e.png

5)拷贝project1_password到E:epositorysvnproject1conf目录下

6)拷贝以下内容到Apacheconfhttpd.conf最后

046582e0e945b37626140e981c3c363b.png

7)访问http://localhost/svn/flyne/trunk即可访问SVN仓库。

好了,这上面就是整篇文章的内容了,希望这篇文章可以帮到你,仔细阅读完svn命令行操作「推荐公司新人svn使用教程」这篇文章,如果感觉还不错的话!点个赞吧!赠人玫瑰有留余香!

本文发布者:万事通,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/10161.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年10月17日 09:47
下一篇 2022年10月17日 09:50

相关推荐

  • 五红汤不放枸杞会失功效吗 重要:五红汤不放枸杞功效怎么样

    小伙伴们你们好,今天卫则将为大家深入剖析一下五红汤不放枸杞会失功效吗,五红汤不放枸杞功效怎么样的内在逻辑,还有关于枸杞,功效,红枣,红糖,花生这些的实用干货和最新内容,在这篇文章中,我会为初学者提供一些学习的方法和技巧,希望能够帮助你更好地学习。 五红汤是比较受欢迎的一种滋补汤,它可以起到很不错的功效与作用,一般都是用红豆、红枣、红花生、红枸杞以及红糖熬制而…

    2023年4月25日
  • 密春雷个人资料简介「推荐密春雷的真实身份」

    大家好,今天赵婷婷给大家讲解下关于密春雷个人资料简介,密春雷的真实身份的事情,以及春雷,兄弟,人寿这些一系列的相关干货内容,经过我各种整理总结之后,决定写下这篇文章分享给大家。 图片来源:中房报图库 密春雷为人低调,甚少在公开场合露面。不过,资本江湖中关于他的传说并不少。其控制的览海控股,不仅在医疗大健康、银行、地产、汽车、煤矿等诸多领域均有布局,还是险资上…

    2022年11月1日
  • 20万公里的宝马740能买吗「详细讲解:两百多万的宝马740」

    美好的1天即将在这里开始,下面就由笔者秦珊珊来一起聊聊20万公里的宝马740能买吗,两百多万的宝马740,还有宝马,销量,镀铬,鼻孔,尺寸等等等各种相关干货内容,这些其实都是一些必备知识,只是有些时候我们没有遇到就没有去了解而已! 宝马740在D级车的销量越来越好的原因很简单,就是奥迪的知名度和受认可度越来越不如从前,而奔驰S在大改款换代以后的的造型也是一言…

    2023年3月6日 自媒体
  • 老太被蜱虫叮咬去世 四名亲属感染,确诊为新型布尼亚病毒

    大家好,我是本站的新闻记者李涛,感谢您的阅读,老太被蜱虫叮咬去世 四名亲属感染,确诊为新型布尼亚病毒成为了近期备受关注的话题,引起了人们的广泛关注和关心。让我们一起揭开这个事件的真相,看看到底发生了什么事情! 七旬老太上山采茶被蜱虫叮咬后,开始发烧、腹泻,几天后不见好转,意识模糊,被送到当地医院,没能抢救过来不幸去世。老太去世后,家属为其擦身、穿寿衣,料理完…

    2023年4月26日
  • 淘宝统计数据怎么看「最新手把手教你查看淘宝数据」

    各位朋友们大家好,这次何泓翰想和大家聊聊关于淘宝统计数据怎么看,手把手教你查看淘宝数据,还有数据,权重,收藏等各种干货文章,如果你是老司机,你可能觉得很简单,但如果你是新手,你可能就不这么想了。 淘宝运营过程中我们一定要通过查看各项数据指标来调整自己的运营方向,在淘宝运营推广阶段对于宝贝流量的爆发有至关重要的作用,究竟我们要看哪些数据指标比较好呢? 淘宝运营…

    2022年9月23日 自媒体
  • 胡夫金字塔是建筑史上的奇迹这充分说明了什么「秒懂:谁发明了金字塔」

    小伙伴们大家好,今天赵曼孜讲的文章是胡夫金字塔是建筑史上的奇迹这充分说明了什么,谁发明了金字塔,还有金字塔,科学家,奇迹,建筑,发电站相关的各种内容,希望你认真看完这篇文章后,能充分理解我想表达的意思。相信你很快就能掌握!你离大牛越来越近了! 铜线为何会在金字塔内出现?金字塔的建造是否真是远古发电站?种种不可能难道真和外星生物有关吗?大家好,来到我一个朋友说…

    2023年3月20日 自媒体