版本控制工具 [转]

DOC到TXT格式转换工具的全面解析 随着信息技术的发展,数据格式的转换需求日益增长,尤其是在文档处理方面。DOC到TXT的转换工具应运而生,旨在简化跨平台文本处理和数据迁移。本章将概述DOC文档转TXT文档工具的基本概念、功能和使用情景,为读者提供一个全面的起点。 阅读详情
版本控制工具

版本控制工具
    版本控制是程序开发、管理必不可少的工具,特别是在多人协作的团队中,适宜的版本控制工具可以提高开发效率,消除很多有代码版本带来的问题。本文首先列举没有版本控制工具时可能遇到的问题,再对主流版本控制工具做概要介绍,之后对作为Java开发者首选的版本控制工具CVS的历史、功能、概念做详细的介绍;最后在Eclipse+CVS环境中,以CVS使用的一个完整流程为例,介绍如何正确的使用CVS工具。

为什么要使用版本控制工具?
如果没有版本控制工具的协助,在开发中我们经常会遇到下面的一些问题:
一、 代码管理混乱。如果是别人添加或删除一个文件,你很难发现。没有办法对文件代码的修改追查跟踪。甚至出现文件丢失,或新版本代码被同伴无意覆盖等现象。
二、 解决代码冲突困难。当大家同时修改一个公共文件时,解决代码冲突是一件很头疼的事。最原始的办法是手工打开冲突文件,逐行比较,再手工粘贴复制。更高级的做法是使用文件比较工具,但仍省不了繁杂的手工操作,一不小心,甚至会引入新的bug。
三、 在代码整合期间引入深层BUG。例如开发者A写了一个公共函数,B觉得正好可以复用;后来A又对这个公共函数进行了修改,添加了新的逻辑,而这个改动的却是B不想要的。或者是A发现这个公共函数不够用,又新做了一个函数,B却没有及时获得通知。这些,都为深层BUG留下隐患。
四、 无法对代码的拥有者进行权限控制。代码完全暴露在所有的开发者面前,任何人都可以随意进行增、删、改操作,无法指定明确的人对代码进行负责。特别是产品的开发,这是极其危险的。
五、 项目不同版本发布困难。特别是对产品的开发,你会频繁的进行版本发布,这时如果没有一个有效的管理产品版本的工具,一切将变得非常艰难。
    上面只是列举了一些没有版本控制系统可能带来的问题,特别是对大型项目和异地协同开发有了一个合适的版本控制工具,它可以有效解决因为代码版本不同引起的各种问题,让我们的开发人员能更多的把精力花费在开发上面。而不是每次都花费很多时间进行代码整合和解决版本不同带来的各种问题。

主流版本控制工具介绍
    现在,有很多优秀的版本控制工具供我们选择,下面就五种主流的版本控制工具做简单的介绍。
Starteam
    是一个集合了版本控制、构建管理(Build Management)和缺陷跟踪系统为一体的软件,并且具有强大的图形界面,易学易用;但管理复杂、维护困难。2002年底被Borland公司收购。
PVCS Version Manager
     是美国的MERANT公司软件配置管理工具PVCS 家族中的一个组成部分,它能够实现源代码、可执行文件、应用文件、图形文件和文档的版本管理;它能安全地支持软件并行开发,对多个软件版本的变更进行有效的控制管理。
ClearCase(CC)
    是ROSE构件的一部分,目前最牛的配置管理工具,主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务。可以控制word, excel,powerpoint,visio等文件格式,对于不认识的格式可以自己定义一种类型来标识。
Visual SourceSafe(VSS)
    简单易用、方便高效、与Windows操作系统及微软开发工具高度集成。
CVS(Concurrent Versions System)
    是开发源码的并发版本系统,它是目前最流行的面向软件开发人员的源代码版本管理解决方案。它可用于各种平台,包括 Linux 、Unix和 Windows NT/2000/XP等等。
    前面三种是重量级的商业版本控制工具,更适合庞大的团队和项目,并且价格不菲。Visual SourceSafe是微软的产品,当然只能用在windows平台并与微软的开发工具无缝集成。CVS免费开源,并且几乎所有开源项目都是使用CVS进行版本管理,无疑,它是我们Java开发者最优选择。

CVS的历史、功能、基本概念的介绍

历史

    CVS 诞生于 1986 年,当时作为一组 shell 脚本而出现;1989年3月,Brian Berlinor用C语言重新设计并编写了CVS的代码;1993年前后,Jim Kingdon最终将CVS设计成基于网络的平台,开发者们能从Internet任何地方获得程序源代码。截至目前最新版本是2004年12月13日发布的1.12.11。

功能介绍
一、 代码统一管理,保存所有代码文件更改的历史记录。对代码进行集中统一管理,可以方便查看新增或删除的文件,能够跟踪所有代码改动痕迹。可以随意恢复到以前任意一个历史版本。并避免了因为版本不同引入的深层BUG。
二、 完善的冲突解决方案,可以方便的解决文件冲突问题,而不需要借助其它的文件比较工具和手工的粘贴复制。
三、 代码权限的管理。可以为不同的用户设置不同的权限。可以设置访问用户的密码、只读、修改等权限,而且通过CVS ROOT目录下的脚本,提供了相应功能扩充的接口,不但可以完成精细的权限控制,还能完成更加个性化的功能。
四、 支持方便的版本发布和分支功能。

基本概念
资源库(Repository)

CVS的资源库存储全部的版本控制下的文件copy,通常不容许直接访问,只能通过cvs命令,获得一份本地copy,改动后再check in(commit)回资源库。而资源库通常为与工作目录分离的。CVS通过多种方式访问资源库。每种方法有不同目录表示形式。
版本(Revision)
每一个文件的各个版本都不相同,形如1.1, 1.2.1,一般1.1是该文件的第一个revision,后面的一个将自动增加最右面的一个整数,比如1.2, 1.3, 1.4...有时候会出现1.3.2.2,原因见后。revision总是偶数个数字。一般情况下将revision看作时CVS自己内部的一个编号,而tag则可以标志用户的特定信息。
标签(Tag)
用符号化的表示方法标志文件特定revision的信息。通常不需要对某一个孤立的文件作tag,而是对所有文件同时作一个tag,以后用户可以仅向特定tag的文件提交或者checkout。另外一个作用是在发布软件的时候表示哪些文件及其哪个版本是可用的;各文件不同revision可以包括在一个tag中。如果命名一个已存在的tag默认将不会覆盖原来的;
分支(Branch)
当用户修改一个branch时不会对另外的branch产生任何影响。可以在适当的时候通过合并的方法将两个版本合起来;branch总是在当前revision后面加上一个偶数整数(从2开始,到0结束),所以branch总是奇数个数字,比如1.2后面branch为1.2.2,该分支下revision可能为1.2.2.1,1.2.2.2,...
冲突(Conflct)
完全是纯文本的冲突,不包含逻辑上的矛盾。一般是一份文件,A做了改动,B在A提交之前也做了改动,这样最后谁commit就会出现冲突,需要手工解决冲突再提交。

CVS与eclipse集成开发
  前面对CVS的历史、功能、概论等理论知识做了介绍。下面我们将使用最流行的Java IDE Eclipse中内置的CVS工具,以一个完整开发流程,介绍实际环境中CVS的正确使用。关于CVS系统的安装,不是本文的内容,您可以从附录的链接中获取安装的介绍资料。

常用的CVS控制命令
Check Out(检出)
把源文件从cvs源代码仓库中取出,缺省的版本是最新的版本,你也可以选择指定的版本。在每次更改源代码之前,需要Check Out最新的版本,再起基础之上对源代码进行修改。将代码目录checkout到指定目录下,所有文件都是read-write。
Check In(检入)
把源代码加入到cvs源代码仓库中,每一个添加进代码库中的文件的版本是 1.1。以后每次修改文件重新ci以后,此文件的版本递增为1.2 ,1.3.……。在每次对源代码修改之后,需要Check In,提交最新版本的源代码。
Synchronize with Repository(与资源库同步,简称同步)
使本地更改与资源库同步,它会列出本地和资源库之间不同的所有文件。
Add to Version Control
将新的文件加入到版本控制之中。
Add to .cvsIgnore
将文件设置到版本控制之外,这样该文件或目录中的文件的更改在CVS中不可见,即使同步也无法发现。

CVS正确使用步骤
一、 同步(Synchronize)

就是将本地更改与服务器同步,同步之后可以清晰的看到上一捡出(Check Out)版本之后本地、服务器上的最新改动。这是非常有用的,特别是敏捷开发,强调集体拥有代码。有了同步功能,你可以全局把握项目的代码,可以很方便的跟踪公共模块代码的任何改动。
具体操作:在Eclipse的资源视图(Resource Perspective)或者Java视图(Java Perspective)中,选中要同步的目录,点击右键选择"Synchronize with Repository",之后它将显示同步的视图。如下图:
 
(图一、CVS同步视图)
同步之后,它有四种Mode可以选择,见上图绿色框框里按钮。从做到右分别为:
Incoming Mode:表示修改是来自服务器,对应于更新(update)操作。
Outgoing Mode:表示修改是来自本地,对应提交(commit)操作。
Incoming/ Outgoing Mode:本地和服务器修改都在该模式(Mode)中显示。
Conflicts Mode:显示本地和服务器修改的冲突文件。
二、 更新(update)
比较简单,选择Incoming Mode,再选中要更新的文件,右键选择update操作。
三、 解决冲突并合并(solve conflct and merge)
如果有冲突文件,冲突文件不能更新。你必须先解决冲突再操作。选中冲突的文件,再点右键选择"Open in Compare Editor",用比较工具打开该文件。如下图:

(图二、CVS比较器视图)

比较器(Compare)视图,左边版本底的是本地文件(Local File),右边是远程服务器文件(Remote File)。使用"Select Next Change"按钮(绿框中的第一箭头向下按钮),逐一查看不同点。如果不同点标识为黑色框框,则不用管它。如果是蓝色框框,则需要手工调整。如上图,不同点是蓝色框框,将鼠标放到两个不同点的中间小方框中,则凸出一个向右的按钮,并显示提示信息"Copy Current Change from Right to Left",意思是将右边服务器的不同点覆盖到左边的本地文件。点中此按钮。重复这样的操作,将所有服务器上的更改拷贝到本地。
如果有一行代码,本地和服务器都同时做了修改。这时,修改点则显示红色框框。这时,你就必须手工做正确的修改。全部修改完成,保存本地文件。
此时,如果修改点没有了蓝色的框框,就可以开始做合并(merge)操作了。操作也很简单,选择该文件,点击右键,选择"Mark as merged"。
注意:必须确保没有蓝色框框,即完全拷贝了服务器的修改才可以做合并(merge)操作,否则会覆盖服务器上的代码。
四、 提交(commit)
更新服务器代码,解决冲突之后,首先要查看本地文件修改之后是否有错误。如果有,当然首先解决错误,再提交。

附录:
http://www.8848software.com/scmchina/scmtools.htm 由很多版本控制工具的文档链接。
http://www.perforce.com/perforce/reviews.html Infrastructure Group对Perforce 和Clearcase, CVS, PVCS,Visual SourceSafe (VSS)几种CM工具进行了定量和定性的比较. 对于定性的比较,内容涉及工具支持的方法和环境;对于定量的比较,包括在不同的项目规模上,执行不同的活动所需要的时间。



版权声明:优快云是本Blog托管服务提供商。如本文牵涉版权问题,优快云不承担相关责任,请版权拥有者直接与文章作者联系解决。


[ 点击此处收藏本文]
发表于 2005年01月19日 9:53 AM

评论

#  分支(Branch)的使用 2005-01-19 10:41 AM moxie
欢迎大家在这里讨论CVS在eclipse中的使用技巧:
分支(Branch)的使用。在我们的CVS基本概论中介绍了分支。我们一个项目可以有多个分支,一个分支修改不对其它分支有任何影响。
假如有一个UM(统一用户管理)项目,这是一个通用的用户管理系统,但我们具体项目比如:财政管理,对用户管理有一些特别的业务需求。这时候,就可以创建一个财政管理UM的分支。添加它自身的业务功能。同时可以与主线的代码进行比较(Compare)、合并(merge)。

#  回复:版本控制工具 2005-01-19 10:09 PM ZoRRo.X
我用过wincvs,感觉很难用。我用jbuilder,感觉很好用。我用过eclipse,感觉不习惯。就这么多,谢谢!

#  回复:版本控制工具 2005-01-19 11:53 PM XiGuaDao
现在还有一个叫做subversion的也是版本控制工具,很有取代cvs的工具,特别是提供了cvs没有的对文件夹目录的版本控制功能,很不错的,值得研究

#  回复:版本控制工具 2005-01-20 10:01 AM graydom
谢谢提供资料
CM方面的东西是开展工作的前提和基础

#  回复:版本控制工具 2005-01-20 10:21 AM moxie
Subversion从功能方面来说,也许确实要比CVS强大。但不要忘记,CVS早已抢先占有了大量的市场,特别是在开源的领域。这个,我认为是Subversion很难达到的。而且,工具够用就行了,不是吗?

#  回复:版本控制工具 2005-01-21 12:08 AM earthharp
p4s
the best

#  回复:版本控制工具 2005-01-21 1:49 PM ibeyond
现在代码管理我使用cvs。
文档管理我使用subversion,觉得都还不错。

#  回复:版本控制工具 2005-01-21 2:33 PM yayv
subversion和cvs同出一个作者之手,而且有cvs2svn的仓库转换工具,从cvs向subversion的转换没有任何障碍。

而且subversion还弥补了cvs的众多不足,有兴趣可以去看看

#  回复:版本控制工具 2005-01-22 10:38 AM dddd
废话,

#  回复:版本控制工具 2005-01-23 8:42 PM michael
楼主说STARTEAM不支持并行开发,我想实在是对StarTeam没有好好了解的缘故。

#  回复:版本控制工具 2005-01-23 10:51 PM NetCobra
恐怕现在除了VSS都支持并行开发了吧?

单就功能来说,Subversion 比起 CVS 还是要多了一些东西的,有些还是不错的;至于“市场”,还是要看需求,现在已经有一些开元软件在使用 Subversion 了。

觉得 WinCVS 不好用的,可以试试 TortoiseCVS,这是一个完全与资源管理器集成的 CVS 工具,比较符合 Windows 使用者的思路,很容易上手;主页是 http://tortoisecvs.sourceforge.net。

对于 Subversion,也有相似的工具 TortoiseSVN,使用方法几乎完全相同,主页是http://tortoisesvn.tigris.org。

#  回复:版本控制工具 2005-01-24 1:13 AM eric
VSS也支持并行开发的,不过VSS的缺省设置是禁止“两个人check out”。
只要改一下VSS的设置就可以了。

VSS的最大缺点也许是不支持Internet,不过如果只在局域网里面使用,我觉得VSS在易用性、方便性方面有优势。


#  回复:版本控制工具 2005-01-24 12:48 PM sydongsun (www.askguoyu.com)
视频入门学习资料下载:
http://www.askguoyu.com/cm/cvs1.htm


#  回复:版本控制工具 2005-01-24 12:50 PM sydongsun (www.askguoyu.com)
同样,网站上也提供了其他关于软件配置管理工具的部分学习资料下载:
参考:http://www.askguoyu.com


#  回复:版本控制工具 2005-01-24 5:25 PM moxie
感谢michael的指正,是我弄错了。仔细查了文档,STARTEAM支持并行开发。再次向michael表示感谢。

#  回复:版本控制工具 2005-01-24 5:30 PM moxie
版本控制工具与开发工具的集成,也是衡量版本控制工具的一个标准,特别是代码的版本控制。VSS主要是与微软的开发工具无缝集成,但拿到别的开发工具上使用,就很麻烦了。

#  回复:版本控制工具 2005-01-27 7:30 PM 老康
你的图片呢?

#  版本控制工具 2005-01-27 8:47 PM whiteeagle
Ping Back来自:blog.youkuaiyun.com

#  回复:版本控制工具 2005-01-28 7:43 PM 非凡
to NetCobra :
VSS在分支、合并方面也做得不太好。

#  回复:版本控制工具 2005-01-30 10:24 PM huitiansou
我一直用Visual SourceSafe(VSS)
换过三家公司用的都是Visual SourceSafe(VSS)



#  回复:版本控制工具 2005-01-30 11:47 PM Arbow
怎么moxie大人放了那么多“硬盘图”上去??

#  回复:版本控制工具 2005-02-01 3:37 PM 放飞自己
现在好象还有一个firefly,不知道谁用过呢?看网上的介绍似乎很不错的喔,不知道哪里有的下载呢?俺也想找个玩玩

#  回复:版本控制工具 2005-02-01 4:24 PM lunar
我使用cvs,但是经常会发生冲突或者提交不上去或者更新不下来的现象,挺烦人的。

#  回复:版本控制工具 2005-02-01 10:12 PM nomagic
我用过CVS,很不好用,会产生很多临时文件夹杂在原代码文件中。我用过starteam,很好用,管理起来并不复杂。

#  回复:版本控制工具 2005-02-02 8:47 PM 杨过
怎么没有svn啊???? 晕!!!!!!!!!!
我们用的是SVN

#  回复:版本控制工具 2005-02-04 10:21 AM smithredsun
联系电话:010-82645151
详情参见:http://www.f c s o f t.com.cn
什么是eform开发平台?
eform是基于浏览器的表单自定义工具,eform是页面设计工具,eform内含大量构件.不用写一行代码便能用eform开发出来常见的功能点.

使用eForm平台有如下好处:
1、用eform平台开发能降低开发人员的技术门槛,使很低水平的人就能开发一个软件项目中常见的功能.例如数据库的数据增删改查打印等等,而这部分功能往往也占居了一个软件项目的大部分.这样一个软件项目开发成员中可以有一大部分人是中专生甚至是高中生就能胜任.从而大大降低了整个软件项目的开发成本.另一方面因为低水平的开发人员很容易招聘到,这样也使软件项目更加容易完成.

2、用eform平台开发的代码一致性比较好,以后维护升级方便.因为只有个性化的功能才需要编写事件代码.所以代码量很少,大量的调用底层的代码,这样代码的集成度高.以后维护升级时修改的代码量非常少.


3、用eform平台开发能大大提高开发效率.eform平台采用对常见的功能和控件内置的方法,使得开发一些常见的功能(如数据库的增删改查,树控件,表格控件)非常容易方便.几乎不用写一行代码.直接通过控件的拖拉然后再设置属性和事件即可完成.开发程序的工作就象是打字员的工作一样.(如图所示开发效率对比示意图)

4、用eform平台开发能很好地应对软件开发项目成员的流动的问题.因为程序员的离职而造成整个项目瘫痪的事例很多.而用eform平台,因为大家都是采用同一模式开发的表单,因而一个人开发的表单很容易被另一个人看懂和使用.这样就使开发人员的流动造成的影响大大降低.企业不再受制于人.
5、用eform平台开发可以使项目不再没完没了,无法关闭.因为可以培训最终用户中的精英,让他们掌握eform平台的使用方法,这样大多需求他们便可以自己做好,而不用麻烦软件开发商了.

eform的设计思路是将数据库程序开发中常用的控制或功能点在eform平台中设计好,通过简单的设置参数或属性即可调用.而遇到很个性化的功能点则可以用传统的代码方式进行开发.因为一个数据库程序开发中大量是增,删,改,查,打印,报表,图表,数据校验等常见的功能点,而这些功能点在eform平台中都做好了,只要简单地设置一下即可完成这些功能点,而且这个设置过程也是可视化的,有相应的设置界面.这样做这些常见的功能点就非常简单快速.而少量的特别的功能点又可通过写代码的方式来完成.也就是说在一张表单中可以一部分功能是直接通过简单的设置一下来完成,另一部分功能是用代码来硬写出来的.这样就达到了常见的功能可以直接调用eform底层的api来实现以提高开发效率,但一个表单又不限定只能实现这些常见功能,你也可随意地用代码来进行无限扩充.这样就达到了既提高了开发效率又能实现很复杂的功能.
eform开发平台分为eform.j2ee和eform.net两个版本.eform.j2ee是用java编写的,面向j2ee应用.eform.net是用.net编写的,面向.net应用.实际上整个eform开发平台共有三部分的代码,① 一部分是htc js dhtml等前台的代码,② 一部分是java的代码,③ 一部分是.net的代码(c#语言的),其中java的代码完成的功能和.net的代码完成的功能完全相同.用①和②就组成了eform.j2ee版本,用① 和③ 就组成了eform.net.这样就得到了两个版本.由此可知,eform.j2ee和eform.net的接口和操作是完全相同的.只是运行环境和使用的编程语句不同罢了.这样做的好处是当需要从j2ee平台转到.net平台或是从.net平台转到j2ee的平台时,使用eform编写的表单和程序可以完全保留下来直接使用.可以轻松地跨越当今两大主流的开发平台.
使用eform开发平台开发出来的表单可以直接在浏览器中运行,不但如此,而且其设计工具也是在浏览器中运行的.也就是说,开发人员也是在IE中(拖拉控件)开发的.开发人员再也不用为了搭建开发环境而装一大堆软件了,这一点对于远程协作开发非常有利.
eform内置了常见的大量的开发构件,如树控件,表格,图表控件,打印控件,上传控件,查询等,也内置了象单表输入,一对多表输入等常见的数据库程序的功能点.通过使用这些可以大大提高开发的速度,降低开发这些常见功能的门槛,只需知道很少的知识便可以开发.使用eform生成的表单结构和格式一致,非常便于以后的维护升级.
eform开发平台开发出来的表单可以脱离eform平台单独运行,也很容易和其它程序进行集成.一个项目的程序往往是大量常用功能用eform平台开发,而少量功能用其它方式开发.然后把它们集成在一起而成的.
eform开发平台是专门为软件开发商或需要开发数据库程序的人而设计的.它采用开放版权的销售方式.对于用户开放100%的源代码,也就是说将eform开发平台的源代码全部提供给用户,同时还包括相应的开发文档和典型示例都提供给用户,而且用户用eform开发平台开发出来的程序可以自由分发.用户购买了eform后,就相当于eform是自己开发出来的一样.而且北京方成公司还提供一年的免费服务和技术支持.
eform的销售没有任何加密和license之说.是一种特别的销售方式.销售的过程实际上是完成知识和价值的转移的过程.相当于方成公司帮用户开发了一个平台然后再帮助用户把它使用起来,用户使用eform开发的软件可以自由销售,和方成公司没有任何关系,更不需要再收费用.由此可见,购买eform和自已招聘员工开发一个平台相比,无论是时间还是费用以及风险都是购买eform比较合算.





#  winxp下运行CVS出现的问题 2005-02-04 4:54 PM wsmyf
系统:winxp;
中安装完成WINCVS后运行,总是提示需要安装PYTHON,但是安装之后依然不能够运行,不知道为什么?



#  回复:版本控制工具 2005-02-13 2:46 PM piggybank
这么多年来习惯了 VSS
除了在产品开发过程中用 ClearCase 多一些(缺陷、配置等),在公司用 VSS,自己笔记本和家里机器上也是 VSS。

VSS 也支持并发和分支,只是默认设置关闭了。
eric 说得对,个人感觉,小团队开发 VSS 足够了。

至于 Internet 方面的不足(VSS基于文件共享的方式很不安全),以前 MSDN 宇宙版中带的 VisualStudio98/VB6 第二张光盘中有一个VSSServer,可惜我没试过,不知道效果如何。但后来没有下文了,看样子也不行吧。

朋友推荐了 StarTeam,但使用起来太复杂了,呵呵。
最近在试用 Vault SourceGear——下载过 .Text 源代码的朋友应该接触过这东东,号称是前 VSS 产品经理离开微软后开发的一个产品。基于 WebService,支持 Internet,完全兼容 VSS——比如与 IDE 的集成。
下载使用了一段时间,感觉不错。准备在节后在我的产品组里小范围推广一下,如果可以的话打算建议公司购买 License 正式使用——这样,回家后就不用在断开方式下工作,也不必担心服务器共享权限的问题了

唯一的小问题是:在还没有全部转向VGS之前,当在 VSS 和 Vault SourceGear 之间切换(例如不同的 Solution 采用了不同的版本控制。VGS提供了转换工具将VSS中的东东导出)比较麻烦——所以考虑写一个小程序来转发命令行参数(这样就可以让使用者自行选择)来解决这一问题。毕竟,VS/VS.net/JBuilder等与之的调用接口都是基于命令行参数的。
呵呵,有经验的朋友不妨一起讨论讨论如何解决。说不定已经有人写过了,还省了我们的事情,呵呵

我装了一个VGS,目前版本的 WebClient 功能还比较弱:
http://vault.xiaozhu.com/VaultService/ 有兴趣的朋友可以试试看,我开了只读的 Guest 帐号(无密码)和 Visitor 帐号(密码:xiaozhu)。下载安装客户端后可以连上来试试看。
如果希望恢复自己机器上的 IDE 中的默认版本控制软件为 VSS,只需要运行 VSS/Win32/SSInst.exe 即可。

#  回复:版本控制工具 2005-02-14 12:47 AM perforcer
我使用perforce,在家里,公司都用。 我觉得在没有版本控制的环境中写代码非常的不舒服, 严重缺乏安全感。 毕竟每一行代码都是自己的心血积累。 而且当发现自己的开发误入歧途时,没有版本控制将是灾难性的!

#  回复:版本控制工具 2005-02-15 8:15 PM SteveGYCN
VSS有一个支持Internet的第三方工具,可以从MS的VSS网站获得地址,如果是小团队开发,VSS还是可以使用的,功能够用了,如果是小型团队,同时需要支持Internet版本控制,可以考虑使用VPN来做文件共享,VSS是基于文件共享协议的,而且目前的VSS支持Unicode文本文件还有一些问题,如果项目中有使用到Unicode编码的源码文件,最好手工设置那些文件为二进制格式,MS后一个版本控制软件,可能会随VS2005一同发布。
我们大量使用CVS,主要是需要在不同地点的两个团队进行协同开发,直接使用CVS的Server工作方式。感觉最讨厌的问题是文件格式,必须清楚地决定需要加入管理的是什么类型的文件,二进制和文本文件最好不要搞错,否则根本没有办法纠正过来。在这一点上,SVN还是非常不错的。现在,我们已经开始迁移到SVN上了,比CVS的改进还是很明显的。
台式机ubuntu系统屏幕无法调节的问题(已解决)(汇总) 背景:新配了一台主机,安装了双系统,windows下屏幕在带鱼屏上显示良好,但Ubuntu系统屏幕拉伸严重。 问题描述:系统没有适应屏幕被整个拉伸了,进入设置界面,显示Built-in Display,分辨率只有1024*768无法设置。 尝试一:网上最多的方法就是使用xrandr, 结果显示:xrandr:Failed to get size of gamma for output default 尝试二: 第一次进入命令行页面:login:填你的用户面 password:使用字母上方的数字键输入你的密码 阅读详情

相关推荐

DDR5内存调优实战:手把手教你搞定Write Leveling Training Mode(附时序图解析)

本文深入解析DDR5内存调优中的Write Leveling Training Mode技术,详细介绍了其核心原理、硬件准备、实战步骤及常见问题解决方案。通过JESD79-5标准定义的反馈机制,帮助硬件工程师精确对齐DQS与CK信号,提升系统稳定性和数据可靠性。附有时序图解析和代码示例,适合DDR5内存系统设计与调试参考。

weixin_29256771的博客 550

[转]版本控制工具

本文转自:http://blog.youkuaiyun.com/moxie/archive/2005/01/19/258944.aspx版本控制工具    版本控制是程序开发、管理必不可少的工具,特别是在多人协作的团队中,适宜的版本控制工具可以提高开发效率,消除很多有代码版本带来的问题。本文首先列举没有版本控制工具时可能遇到的问题,再对主流版本控制工具做概要介绍,之后对作为Java开发者首选的版本控制工具CV

我想寻找,却忘了我要找什么;我想创造,却发现这世界什么都不少 1129

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现

本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。

weixin_29238147的博客 318

Git版本控制工具(转)

Git版本控制工具(一)----git的安装及创建版本库 ​【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3981720.html 【系列文章】 Git版本控制工具(一)----git的安装及创建版本库 gi...

weixin_30849591的博客 133

【RDMA】13. RDMA之用户态与内核态交互

原文:https://zhuanlan.zhihu.com/p/346708569 在“RDMA之Verbs”一文中我们说道,Verbs API分为用户态和内核态,分别以ibv_和ib_作为前缀。RDMA技术的最大的优势就在于用户态可以绕过内核,直接控制硬件收发数据,减少了系统调用和内存拷贝次数,所以大部分的RDMA应用都是用户态应用,即使用以ibv_为前缀的用户态Verbs API。 但是并非所有的用户态Verbs API都可以完全绕开内核,本文中我来讲解一下哪些API依赖于内核RDMA子系统(包括驱

我的笔记本 4285

UniApp消息推送进阶:不用插件实现动态语音播报(含保活策略)

本文详细介绍了在UniApp中实现动态语音播报的进阶方案,无需依赖第三方插件。核心采用透传消息传递动态数据,结合本地TTS引擎合成语音,并针对不同安卓厂商提供了深度通道配置与差异化保活策略,有效解决了App退至后台或被清理后语音播报失效的难题。

weixin_29224309的博客 486

【转】分布式版本控制工具学习--Git

什么是分布式版本控制:        分布式版本控制 (DVCS) 是一种不需要中心服务器的管理文件版本的方法,但是它也可以使用中心服务器。更改可以被合并到 DVCS 的任何其他用户的系统中,因此可以实现非常灵活的工作流。   DVCS 和集中式版本控制系统的主要差异:在 DVCS 和集中式版本控制系统之间有三个关键差异。第一个差异是,DVCS 通过本地提交支持离线工作,这是

刘德 的专栏 3812

计算机组成原理课设

计算机组成原理课程设计

qq_63306482的博客 8054

【转】 版本控制工具:“和谐”项目开发的保证

<br /> 版本控制工具:“和谐”项目开发的保证<br />http://tech.it168.com/m/pp/2006-12-31/200612310931403.shtml<br /> <br /> <br />现在的软件项目开发中,必然涉及版本控制(Revision Control)工具。没有使用版本控制工具的开发工作,有人形容就如同生活在“黑暗时代”。版本控制工具是项目开发中必不可少的,以此进行的版本控制可以确保在软件项目开发中,不同的开发人员所涉及的同一文档都得到更新。 <br /><br /

strawbingo的专栏 774

【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集)

情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。

aaaa_hsjsueu的博客 2万+

游戏服务器框架之跨服(一)

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。 几种常见的跨服玩法拓扑结构 一,不同游戏服的玩家进入中立服务器进行战斗,例如跨服天梯类玩法。 游戏服有很多个节点,中心服务器也有很多节点。只要保证对战的双方同时进入同一个中心服游戏进程即可。 二,若干个游戏服组成一个社区,全部服务器包含多个社区,例如世界服玩法。 三,游戏服A玩

littleschemer的博客 5774

[转]开源分布式版本控制工具 —— Git 之旅

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-tourofgit/皮 光明, 软件工程师, IBM谢 炯, 资深顾问, 内蒙古电力信通中心Git 主张的分布式代码库与文件快照的设计思想,相对于传统 CVS、SVN 等集中式、文件差异式版本控制工具是一种挑战与颠覆。Git 带来了离线提交、轻量级分支等诸多便利。不过,也有人质疑 Gi

heiyeluren的blog(黑夜路人的开源世界) 2684

DevExpress中使用BandGridView实现复合(多行)表头、设置多行表头背景颜色、表格边框颜色

一、实现效果 二、 实现方法 2.1、创建复合表头 ①将创建的GridControl下的GirdView1转化为BandGridView类型; ②创建需要展示的列(指定列的名称【Name】、描述【caption】、数据字段名称【FieldName】) ③绑定列实现复合表头。 注意:如果复合表头有多行,则需要设置新增Band的Row Count,然后设置【Band properties下的AutoFillDown=false】 详细操作如下: 注意:如果要隐藏表格的设计字段内容,则需.

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2893

[转]前端版本控制工具  gulp或者Grunt插件 基于nodejs

[转]前端版本控制工具  gulp或者Grunt插件 基于nodejs 发起缘由: 静态资源缓存控制grunt插件 http://blog.youkuaiyun.com/xiebaochun/article/details/17579233 http://www.zhihu.com/question/27548038 配合nodejs环境下...

liNewman的博客 214

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

分布式版本控制工具 Mercurial 使用教程 [转]

本教程是介绍如何使用 Mercurial。我们不假定你有使用 源代码控制管理(SCM) 软件的背景。 本教程有法文 FrenchTutorial,西班牙文 SpanishTutorial,日文 JapaneseTutorial,和中文 ChineseTutorial 当研究完本教程后,你应该对以下几点有所领会: 你将要使用的 Mercurial 的概念和命令 如何用简单的方法在软件项目中使用 Me

Blue Light的专栏 C++,OOA/D/P 2385

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

(转)安装RapidSVN版本控制器及配置diff,editor,merge和exploer工具

https://www.cnblogs.com/wenzheshen/p/6611427.html 在Linux下我们可以使用RapidSVN。RapidSVN是一款轻量级的免费、开源 SVN 客户端,相比tortoise svn它更加小巧而且占系统资源少运行速度快。   一:安装RapidSVN版本控制器 在Ubuntu下可以使用安装很容易: 第一种方法: 打开终端输入命令即可,如下...

A9925的专栏 1191

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【转】分布式和集中式版本控制工具-svn,git,mercurial

http://blog.youkuaiyun.com/zl728/article/details/5952995 现象,近年来,我们对版本控制工具的关注点似乎正在改变.起初,我们主要也是唯一的目的就是对代码进行监控,使我们能够安全的返回到旧的版本,以便 我们能够诊断代码中的问题.后来,我们的关注点更侧重于如何使人与人之间的合作更为顺畅. 这个关注点并不是要取代对代码的监控,而是以...

weixin_30678821的博客 150

[转]分布式和集中式版本控制工具-svn,git,mercurial

http://blog.youkuaiyun.com/zl728/article/details/5952995 现象,近年来,我们对版本控制工具的关注点似乎正在改变.起初,我们主要也是唯一的目的就是对代码进行监控,使我们能够安全的返回到旧的版本,以便我们能够诊断代码中的问题.后来,我们的关注点更侧重于如何使人与人之间的合作更为顺畅. 这个关注点并不是要取代对代码的监控,而是以代码监控为基础,并建立于其上的...

weixin_34248487的博客 106

git版本控制工具基本用法讲解(转)

一、安装Git 在linux系统使用非常方便,只需要打开shell界面,并输入: ? 1 sudo apt-get install git-core 按下回车后输入密码,即可完成Git的安装。但我们可能更多情况下是在windows系统上操作。所以,需要先去官网把git安装包下载下来。下载后一直下一步完成安装即可。...

weixin_30896825的博客 143

转:分布式和集中式版本控制工具-svn,git,mercurial

分布式和集中式版本控制工具-svn,git,mercurial 作者:zl728 , 发布于2012-7-26 现象,近年来,我们对版本控制工具的关注点似乎正在改变.起初,我们主要也是唯一的目的就是对代码进行监控,使我们能够安全的返回到旧的版本,以便我们能够诊断代码中的问题.后来,我们的关注点更侧重于如何使人与人之间的合作更为顺畅. 这个关注点并不是要取代对代码...

weixin_30741653的博客 109

代码管理工具概况

Git、Mercurial(hg)、CVS、SVN等 Git、Mercurial(hg)、CVS、SVN都是版本控制工具,是软件。 以下为他们的区别: https://www.cnblogs.com/likebeta/archive/2012/12/18/2822805.html https://www.cnblogs.com/talexu/articles/2496208.html 其中最常用的...

photon222的博客 800

2025年终极文本转图表工具完整指南:D2 vs Mermaid vs PlantUML vs Graphviz

在当今数字化工作环境中,**文本转图表工具**正成为开发者和技术团队不可或缺的利器。通过简单的文本描述,您就能快速生成专业的图表,大大提升工作效率和沟通效果。Text to Diagram项目为您提供了全面的**图表工具比较**平台,帮助您选择最适合的工具。 ## 为什么选择文本转图表工具? 🤔 传统图表制作需要拖拽、调整格式,耗费大量时间。而**文本转图表工具**让您能够: - **快速

gitblog_00336的博客 711

版本控制、序列化

版本控制有利于我们根据客户端的版本不同做出不同的处理,比如微信的版本不同 url.py from django.conf.urls import url, include from web.views import TestView urlpatterns = [ url(r'^(?P<version>[v1|v2]+)/test/', TestView.as...

weixin_30851409的博客 135

终极文本转图表工具:3分钟快速制作专业流程图

mermaid 是一个用于生成图表和流程图的 Markdown 渲染器,支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程图的开发者。无需复杂操作,通过简单的文本描述,就能快速生成高质量的图表,让你的文档更加直观和专业。 ## 为什么选择 mermaid? mermaid 作为一款强大的文本转图表工具,具有诸多优势。它完全基于文本

gitblog_00135的博客 776
上一篇: 长期使用电脑一族的健康饮食![转]
下一篇: 中国程序员的困境与突破 [转]
fuweibo
博客等级 码龄23年 36粉丝 68原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值