为什么还有那么多人用SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了。不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。更有甚者,它甚至让人重回CVS。CVS和SVN的比较类似于比较C++和Java。很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。SVN修正并添加了一些CVS并不拥有的功能。例如,创建标志和分支dubious,你在编辑文件时其他人不会有任何通知。SVN并不是CVS的替代品,只是个不同的系统,类似于CVS。它有些特有的功能,足以作为采用它的理由。这些功能使他更适合于开发环境,例如对PowerBuilder。下面你可以找到两者的相对优势、劣势。
1 存储类型格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。
2 速度
CVS比较慢。
整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(完全备份所有的工作文件)。
3 标志&分支
SVN采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。
4 元数据
CVS只允许存储文件。
SVN允许一个文件有任意多的可命名属性,功能十分完全。
5 文件类型
CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。
SVN会关心所有的文件类型,不需要你来手工操作。
6回滚
CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。
SVN不允许递交后回滚。建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)
7事务
CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN的确支持“零或一”事务原则,这是SVN的一大优势。
SVN站在更高层次上对安全产品,从系统和控制的角度进行了"有机"和"无隙"的整合。由于SVN没有自己的远程管理工具,只能上服务器上用命令行操作,故操作起来比较复杂。为此,svn俱乐部开发出svn管家对svn进行远程管理,svn管家推出了windows版本和linux版本,部署很方便,不用安装额外的环境如mysql、PHP或JAVA。svn管家不仅可以方便的远程修改用户密码,更可以对svn进行远程管理,极大地方便了SVN的用户。
所以虽然说SVN有缺点,但是对于使用者来说还是有继续使用下去的价值的。它的优势比它的缺点更耀眼,所以才会有那么多人还使用SVN
svn总提示out of date的意思是说数据过时了,应该是有人提交过了数据,所以导致再次提交的时候冲突而出现了out of date提示。
可以在开始的时候尝试一下用update更新一下,在代码里标输入team–>update, team–>Show Tree Conflict–>标记"冲突已解决", team–>commit。
或者使用myeclipse工具进行操作,如下图:
1、打开myeclipse工具,然后从左边的项目栏里找到文件,右击项目后找到更新选项,点击选择更新选项。
2、更新完成后,再次右击项目后,选择Show Time Confiict选项,然后点击确定选项。
3、完成后,再右击项目,然后从里面找到提交选项,点击提交选项后即可完成操作。
扩展资料:
TortoiseSVN使用技巧
检出代码
初次使用TortoiseSVN的时候,你需要将服务器的代码下载到本地,这就是SVN Checkout(SVN检出)。
提交代码
在本地使用你喜欢的编辑器,编辑任意文件,保存后该文件图标将会出现红色感叹号,表示这个文件修改过,没有提交,刚刚修改过的globalcss变色了。
关于SVN的版本号是全局的,也就是说SVN仓库中的所有文件变更都共享一个版本号序列,所以如果查看某个文件,或者目录的log,可以发现版本号可能并不是依次递增。
新增文件
在 SVN工作目录下,对于文件修改,完成后只需要commit就ok了,但对于新增文件,或者从其它目录复制进来的文件或文件夹,需要在commit之前需要做一步add操作,即将文件或文件夹添加到svn工作目录中来,否则SVN客户端不认它。
-TortoiseSVN
1、源代码加密软件推荐使用德人合科技加密软件,是一套从源头上保障数据安全和使用安全的软件系统。采用的是文件透明加密模块,对平常办公使用是没有影响的。而且支持与SVN等源代码管理工具无缝结合。
在不改变研发人员原有工作习惯和工作流程的情况下,对EditPlus、Notepad++、ultraEdit、Eclipse、MyEclipse、 Keil、Visusl
studio等源代码开发工具,以及CAM350、PADS、Altium
Designer、Cadence、MentorGraphics等电路设计软件进行受控加密保护。源代码文件加密后,不影响软件的正常编译,合法用户正常双击打开,在授权范围内使用。
2、如果企业内部SVN服务器采取透明模式,即加密文件是可以存放在SVN服务器上的,需要达到的效果是SVN服务器上文件密文存储。则配合应用服务器安全接入系统来实现只有安装了加密客户端的Windows、Linux、MAC端才能够正常的访问公司内部的SVN服务器。
3、如果企业内部采用eclipse、VS等开发工具,从这些开发工具将代码直接上传到SVN服务器上时会自动解密。为了避免明文、密文混乱存放导致版本比对时出现错误等问题。因此,SVN服务器上需统一存放明文文件。则通过服务器白名单功能实现对终端电脑数据进行强制透明加密,对上传到应用服务器数据实现上传自动解密、下载自动加密。
4、再配合应用服务器安全接入系统实现只有安装了加密客户端的Windows、Linux、MAC端才能够正常的访问公司内部的SVN服务器。
Git,这货堪称神器,用了它就再也不想用其他VCS了,就像上了高速就不想再走国道一样。
Git的强大之处在于,你可以在局域网内的任何一个共享路径下创建仓库,而不需要运行任何服务。所有的操作都是基于本地的。这也不难理解可以直接放在快盘里了。
一般的大些公司都有自已的版本管理服务器,远程时 登录***也可以实现操,但是几人的小团队就不太现实了,基本没有***,如果是几个异地朋友想凑在一起创业,就 只能买台服务器做版本管理服务器,这个第一想到成本,对于几个人来说一台服务器一年的成本也不是小数,还要 抽出时间来进行管理,在这里我们接上篇,用网盘来实现Git版本管理,就省了大家不少的精力和钱财,且稳定性还 是有保障的,也基本不用担心空间问题,如我的网盘一般都在50G左右,一般来说做开发项目代码文件不会有这样大的。
一般人使用Git+Github来搭建进行本地远程交互,不过Github弄个私人仓库是要刀乐思的,如果你很抠,或者你的伟大idea不想被别人瞄去,可以考虑用Git+金山快盘搭建私人服务器。
不多说,以下是步骤:
下载安装金山快盘,指定路径,申请账号
下载安装Git桌面版,配置各参数
在快盘文件夹里新建一个文件夹,在这个文件夹里新建仓库一定要选中央资料库,否则会push不上(个人档案库会在这个目录下面生成git的隐藏文件夹,而中央资料库会直接在这个目录生成管理目录,即没有外包git文件夹,push上来的文件不会有源文件,只有Git自己的管理文件了。跟SVN差不多,SVN服务器上的repository也是没有源文件的,只有它自己的管理文件)
建好之后就可以把本地的项目push上去了,本地只管pull、push就行,仓库的同步交由快盘负责。
到此为止就可以使用Git+快盘仓库了,如果不考虑电脑的消耗资源,看起来区别跟svn不大。但是无论从实用性和方便性,Git都优于SVN,SVN+金山快盘是要在本地跑SVN服务的,相当耗资源,而Git不跑什么服务,顶多跑个十来M的快盘,小意思。
并且SVN的分支管理远不及Git,不过Git也有点小缺点,比如更改文件后文件图标不立马变色,调用第三方的对比工具(如BeyondCompare)弹出速度比较慢(最慢的时候我都以为电脑死机了,并且文件如果没有变化diff的话BeyondCompare就不弹出,不人性化)。不过这些都是小问题,可以忍受。
另:基于局域网共享文件夹的Git服务器模式也类似,注意创建仓库的时候选中央资料库就行了。
言归正传,接下来就介绍如何实现网盘+Git Gui 团队间版本管理
这里要说明一下,可用的网盘要有“共享”功能而不是“分享”功能,在百度云网盘、腾讯的微云网盘、360云盘和金山快盘中找了一下,发现只有金山快盘有这个功能,所以团队开发得用金山快盘了来实现了。
1、用金山快盘来做服务,之后把网盘中的相关目录共享给好友这样我们退出网盘,用刚才共享的那邮箱来登录网盘,我们发现这个网盘中多了一个“我收到的共享文件”目录,打开看一下就是我们共享的目录
2、接下来我们需要用上篇的方法把这个目录中的文件clone下来,但是快盘的共享目录是用邮箱来做名称的,如:
D:/htw/kaupanwebtide/sharebox/tinwai@qqcom/MySelf 里面含有@符号,这个在Git里面是有特殊用处的,不用急,我们可以用mklink /J 来做一个目录联接就可以了,具体操作,我们打开Dos窗口输入如下指令:
mklink /J D:/htw/gittest/GitTestgit D:/htw/kaupanwebtide/sharebox/tinwai@qqcom/MySelf
这样我们就建立了一个gitgit到网盘的联接,我们就可以用这个gitgit当网盘路径在Git里面用了
3、我们在gittest目录根目录下面右键选“Git Bash”输入:
git clone GitTestgit
我们下载下来项目代码, 打开看一下和我们在前面网盘提交的是一样的呀,我们还是修改一下代码
4、重复上篇的步骤提交代码,再退出现在用户用原其它用户或原用户登录,再更新一下代码看一下,是不是已经变化了
到此为止,一个小团队的代码版本管理系统就完成了,对于在创业路上的小团队来说是一个不错的选择,当然对于大的团队来说还是有自建的最好
感谢金山快盘提供优质的稳定的免费网盘服务
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。
基于以上所以你在服务上是找不到你提交的原始文件,因为svn每次提交做的都是原子提交,所以你在服务器上能找到的都是一些碎片文件。
0条评论