源代码管理工具

转自:百度文库

源码管理工具svncvshg, git VSS

什么是源码管理工具

简单地说,源码管理工具是一种 记录代码更改历史,可以无限回溯,用于代码管理,多个程序员开发协作的工具.

常见的功能有:

1.更新到任意一个版本(不用担心代码的修改错误,和丢失等)

2.日志记录(说明修改目的)

3.分支,标签(用于协作开发,和便于阶段性产品发布)

4.合并,比较(用于多人,多分支之间的代码合并,比对等)

为什么要使用源码管理工具

你可能会想, 需求出来了,老大把我要做的功能告诉我,我去写代码就行,完事了,我再打包发给他让他加入到整个代码中,然后测试.有问题再反馈回来,我再修改,再打包.这样不是也挺好吗?

当然我要说,这样当然是可以的,但是如果你们要修改同一个文件怎么办?你们还得事先商量确定某个时间某个人不能修改等等.或者新建不同的名字的文件,最后由一个人来合并.

如果你的团队不是3,5个人,而是30,50人呢?你这样的沟通和重复性工作的成本会有多高?

于是聪明的程序员便有了版本控制的设想,继而有了源码管理工具的不断推陈出新.

如果你稍微开发过一个正式的项目,想必你对 cvssvnhggit 这些也一定有所耳闻.

下面就简单根据我个人的一些项目经验来介绍下2类的源码管理工具.

源码管理工具介绍

简单地可以将源码管理工具分为两类svn 这样的集中式的, hg 这样的分布式的.

因为我个人对 svn  hg 比较熟悉,所以下面就以这二种具体的工具为代表来说明二者的优劣.

第一次接触源码管理工具就是 svn,想着那时对于什么 增量修改历史记录 等概念不清楚时,也曾在写了2小时的代码后,提交svn时失误而导致文件被删除的悲惨历史.惨痛的教训让我开始了系统地学习svn的过程,一天后,我明白了它的原理,这时会很晰明确地知道每个命令的结果,也会很清楚地知道自己怎样做才是最合适的.

简单总结一些best practice:

Check in early, Check inoften(这个是很重要的,尤其是多个开发的团队,这样可以大大减少冲突的可能)

发现冲突第一时间解决(不能将冲突留给你的同事,发现了第一时间解决,如果需要要向冲突的相关同事沟通交流)

只提交需要提交的文件(一些临时文件不要提交,不能污染整个代码库)

熟悉常用的命令,add/rm/up/ci/co/stat/merge/diff

大致一个月后,我逐渐明白一个源码管理工具对于一个项目的意义和作用.自此后,我去公司实习我会第一时间询问他们是否使用源码管理工具,使用哪种工具.而对于自己的一些业余项目,我也通常是使用 google code 来管理起来,甚至当前的这些博客的源码(不过最近已经迁移到了hg的一个hostingservice,原因请参考下文).

到了去年的晚些时候, 开始知道了分布式源码管理工具, 了解了它与集中式工具的区别和优势.也听到了一个小故事,

说是Linux的作者Linus大牛不满svn,于是自己花了一周(?抱歉具体时间记不得了)写了个分布式的代码管理工具,

于是就有了大名鼎鼎的git.

我们不去羡慕Linus大牛的英明神武(,真是牛啊!),我们来关心他的作品 分布式代码管理工具.它与集中式的究竟有什么区别呢?

我以 hg 为例来说明与 svn 的不同:

1.每个work copy(也就你自己检出的代码)都具有完整的代码库信息,这也就是说:

对于检出的代码,我们无论是查看log,提交代码,或者删除等都是本地的操作,而无需与服务器打交道

2.只有push/pull两个操作(其它的初始化等操作不计入内)与服务器打交道,其它的日常操作都是本地

3.集中式的版本文件信息(所有的版本文件信息都位于项目根目录下的.hg目录下,而不像svn每个目录下都有一个.svn目录)

4.简单的忽略文件设置:.ignore文件中可以简单地设置你不希望提交到版本库的文件(支持通配符)

5.简单地说,我更喜欢hg的原因是,我无需再为了查看log而等半天(与服务器通信),这样大大地方便了网络不好,分布式的开发环境.

一些建议

我不说使用了代码管理工具的公司就是好公司,但是我肯定没有使用代码管理工具的公司肯定不是好公司.

同样, 使用了代码管理工具的程序员不一定就是好程序员,但是没有使用代码管理工具的程序员肯定不是好程序员(至少没有经历过一个真正的多人协作的项目).

以我个人的项目经历,我极力向我的读者建议:

如果你没有使用过代码管理工具,请赶紧去学习一种(个人推荐 hg).

如果你还使用的是 svn,推荐你去尝试下 hg.

如果你在做一些业余的项目,也建议你使用代码管理工具,即使是一个人.甚至你也可以将文档,知识管理,博客等也用代码管理工具版本化起来.

当然这里提到的几种代码管理工具都是有GUI版本的和命令行版本的,个人还是极力推荐使用命令行,为什么,可以参考这里 如何提高程序员的生产率.

结论

代码管理工具对程序员而讲是必不可少的开发工具,选择一个合适的工具并且熟知它的常用命令,会让你的开发(你的团队的开发)变得事半功倍.

后记

推荐几个常用的hosting服务,常用的如下:

google code (支持svn, hg)

bitbucket (hg,极为推荐,免费提供1private和任意多个public的代码库)

github (git)

当然上述的都是免费的服务,建议大家尝试下.

VSSSVNClearcase,在此做一个小小的总结

一、Visual Source Safe(简称 VSS )

VSS
是微软的产品,是配置管理的一种很好的入门级的工具。VSS最初的名字叫Source Safe,是一家小公司的产品,92年曾经获了最佳小型管理工具奖,然后立即被微软收购。但是微软收购的只是sourcesafeWindows版本,在美国还有另外两家公司分别获得了继续开发和销售sourcesafeMac版本和Unix版本的许可,在MS买进vss之后,基本上没有对vss进行任何的研发,MS内部自身也不用vss


SourceSafe
长得很象早先土气的文件管理器,的确难看。但是难看不碍事,SourceSafe的优点可以用8个字来概括简单易用,一学就会,这个优点是它老妈Microsoft遗传下来的,是天生的。虽然SourceSafe并不是免费的,但是在国内人们以接近于零的成本得到它,网上到处可以下载啊。当然Microsoft也不在乎这个小不点的软件,它属于买大件送小件的角色。如果你合法地得到Visual Studio,你就得到了免费的SourceSafe

评价如下:

易用性:★★★★★

易学易用是 VSS的强项, VSS采用标准的windows操作界面,只要对微软的产品熟悉,就能很快上手。 VSS的安装和配置非常简单,对于该产品,不需要外部的培训(可以为公司省去一笔不菲的费用)。只要参考微软完备的随机文档,就可以很快的用到实际的工程当中。

功能:★★★

VSS
的配置管理的功能比较基本,提供文件的版本跟踪功能,对于 build和基线的管理, VSS的打标签的功能可以提供支持。 VSS提供 share(共享) branch(分支)和合并( merge)的功能,对于团队的开发进行支持。 VSS不提供对流程的管理功能,如对变更的流程进行控制。VSS不能提供对异地团队开发的支持。此外 VSS只能在 windows平台上运行,不能运行在其他操作系统上。

安全性:★★★

VSS
的安全性不高,对于 VSS的用户,可以在文件夹上设置不可读,可读,可读 /,可完全控制四级权限。但由于 VSS的文件夹是要完全共享给用户后,用户才能进入,所以用户对VSS的文件夹都可以删除。这一点也是 VSS的一个比较大的缺点。

总体成本:★★★★

VSS
没有采用对许可证进行收费的方式,只要安装了 VSS,对用户的数目是没有限制的。因此使用 VSS的费用是较低的。

技术支持:★★★★★

由于 VSS是微软的产品,可以得到稳定的技术支持。

二、 SVN(Subversion) - CVS(Concurrent Version System)的替代和升级版本

先说说CVSCVS是开源代码的配置管理工具,其源代码和安装文件都可以免费下载。记得在学校读研的时候,学校实验室的代码全部都用CVS管理,为啥?很简单,两个字:免费!它与Eclipse配合,基本上Java的代码编写,代码管理和版本管理都可以免费搞定了。

SVN(Subversion)
是近年来崛起的版本管理工具,被誉为cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。虽然在 2006年时SVN的使用族群仍然远少于传统的CVS,但已经有许多开放源码团体决定将CVS转换为SVN。已经转换使用SVN的包括了FreeBSDApache Software FoundationKDEGNOMEGCCPythonSambaMono以及许多团体。许多开发团队换用SVN是因为 TracSourceForgeCollabNetCodeBeamer等专案协同作业软件以及EclipseNetBeansIDE提供SVN的支援整合。除此之外,一些自由软件开发的协作网如SourceForge.net除了提供CVS外,现在也提供专案开发者使用SVN作为原码管理系统,JavaForgeGoogleCode以及 BountySource 则以SVN作为官方的源码管理系统。2009年,绝大多数CVS服务已经改用SVNCVS已经停止维护。

易用性 :★★★★

Subversion
支持linuxwindows,更多是安装在linux下。svn服务器有2种运行方式:独立服务器和借助apache2种方式各有利弊。目前业界评价的SVN易用性正在提高。

功能:★★★★

SVN
的功能除具备 VSS的功能外,还具有:

它的客户机 /服务器存取方法使得开发者可以从任何因特网的接入点存取最新的代码;它的无限制的版本管理检出 (checkout:注 1)的模式避免了通常的因为排它检出模式而引起的人工冲突;它的客户端工具可以在绝大多数的平台上使用。同样, SVN也不提供对变更流程的自动管理功能。

安全性:★★★★

一般来说, SVN的权限设置单一,无法完成复杂的权限控制;但是 SVN通过SVN ROOT 目录下的脚本,提供了相应功能扩充的接口,不但可以完成精细的权限控制,还能完成更加个性化的功能。

总体成本:★★★★★

SVN
是开发源码软件,无需支付购买费用。

技术支持:★★★

同样因为 SVN是开发源码软件,没有生产厂家为其提供技术的支持。如发现问题,通常只能靠自己查找网上的资料进行解决。

三、 ClearCase

Rational
公司的ClearCase是软件行业公认的功能最强大、价格最昂贵的配置管理软件。


ClearCase
主要应用于复杂产品的并行开发、发布和维护,其功能划分为四个范畴:版本控制、工作空间管理(Workspace Management)、构造管理(Build Management)、过程控制(ProcessControl)。ClearCase通过TCP/IP来连接客户端和服务器。另外,ClearCase拥有的浮动License可以跨越UNIXWindows NT平台被共享。

ClearCase
的功能比CVSSourceSafe强大得多,但是其用户量却远不如CVSSourceSafe的多。主要原因是:ClearCase价格昂贵,如果没有批量折扣的话,每个License大约5000美元。对于中国用户而言,这无疑是天价。用户只有经过几天的培训后(费用同样很昂贵),才能正常使用ClearCase。如果不参加培训的话,用户基本上不可能无师自通。

易用性:★★★

ClearCase
的安装和维护远比 VSS复杂,要成为一个合格的 ClearCase的系统管理员,需要接收专门的培训。 ClearCase提供命令行和图形界面的操作方式,但从 ClearCase的图形界面不能实现命令行的所有功能。如果Unix/Linux服务器上安装了Samba服务,可以直接通过WindowsClearcase的客户端直接访问源代码,相对比较简单。

功能:★★★★★

ClearCase
提供 VSS, SVN所支持的功能,但不提供变更管理的功能。 Rational另提供了 ClearQuest工具提供对变更管理的功能,与 VSS不同, ClearCase后台的数据库是专有的结构。 ClearCase对于 windowsunix平台都提供支持。 ClearCase通过多点复制支持多个服务器和多个点的可扩展性,并擅长设置复杂的开发过程。

安全性:★★★★

ClearCase
的权限设置功能与 SVN相比,SVN有独立的安全管理机制, ClearCase没有专用的安全性管理机制,依赖于操作系统。

总体成本:★★

要选用 ClearCase,需要考虑的费用除购买 license的费用外,还有必不可少的技术服务费用,没有 Rational公司的专门的技术服务,很难发挥出 ClearCase的威力。如现在网上虽有 ClearCase的破解软件,但尝试应用的公司大多失败的缘故。另外,对于web访问的支持,对于变更管理的支持功能都要另行购买相应的软件。

技术支持:★★★★★

Rational
公司已被 IBM公司收购,所以有可靠的售后服务保证。


四、总结

工具对比一览表

特性          VSS          SVN            ClearCase

易用性        ★★★★     ★★★         ★★★


功能          ★★★       ★★★★       ★★★★★

安全性        ★★★       ★★★★       ★★★★

总体成本      ★★★★     ★★           ★★★★★

技术支持      ★★★★     ★★★         ★★★★★


以上几种工具的总结如下:

1. VSS
的使用简便易学,但 VSS的功能和安全性较弱,且只对 windows平台进行支持,建议作为项目配置管理的入门时采用的工具;


2. SVN
的安全性和版本管理功能较强,可以实现异地开发的支持,但 SVN安装和使用多采用命令行方式,学习曲线高,同时不提供对变更管理的功能,对于小型团队,可以采用 SVN进行管理。

3. ClearCase
功能完善,安全性好,可以支持复杂的管理,但学习曲线和学习成本高,需要集成ClearQuest才能完成完整的配置管理功能。大公司如果采用异地多研发中心同时开发的模式,一般推荐使用ClearCase

SVN - VssSvn的对比

  1. 支持重命名,这对 Java开发来说非常重要。

  为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,而重命名中 VSS中是不被支持的。

  2. 开发的时候不一定要锁定。

  一方面导致重构不方便,另一方面,不能离线开发,使用 SVN就不同,可以带回家继续开发,回来后,提交就行了。

  3. 多平台。

  可以支持多个平台下的操作

  4. 更好的客户端支持。

  Eclipse 中的 VSS Plugin 不如它的 SVN Plugin好用。一个在 Windows下用的 SVN客户端 TortoiseSVN也比VSS的客户端好用(VSS只有微软提供的一个 GUI客户端)。

  5. 更好地与外围工具集成。

  各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要,也可以自己写插件或管理脚本,开放的架构,允许我们这样做。

  6. 方便。

  一个例子:部署应用的时候,以前的做法是找出一个项目中修改过的文件,更新到服务器上去,现在可以在服务器上执行 svn export命令,把代码库中的最新版本导出,完成部署(也可以替换回老版本)。

  7. 速度与稳定性看起来都不错。

  学习它的管理、它的工作方式,是值得的。而 VSS是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。

操作平台:windows 9x/me/2000/xp/2003最低安装需求:16MB内存 功能限制:无文件详细说明:----------★ CodeHelp是专门为我们程序员设计的一款源代码管理软件。它能方便的管理您在编程和学习中有用的源代码,减少经常到处查找资料的劳动,节省您在开发中的时间和精力。★ 知识管理越来越被大家所重视,源代码也应该做为一种知识资源,纳入知识管理体系中去。利用CodeHelp,可以方便的管理你的各种技术资料和源代码。 ★ CodeHelp 支持多个数据库文件,能够新建数据库、打开数据库、压缩和备份数据库。★ CodeHelp 以目录树来管理代码文件,你可以自由定义目录,并能够自由拖拽、移动、修改,支持无限分支延伸。采用分段读入方式,能支持超大的目录树。★ CodeHelp 支持“语法突出”方式显示代码,目前支持 C/C++、Pascal、Java、VB.Net、XML、HTML等方式,您也可以按照规则自己添加“语法突出”格式。★ CodeHelp 采用 TabView 来显示多个源代码文件,查看起来非常方便。★ 源代码编辑器多数没有自动换行功能,CodeHelp 的源代码编辑器增加了手动格式化功能,能够把所选文字格式成多行或一行文本。★ CodeHelp 能够为每个文章添加多个附件,并能够在临时目录中打开附件、导出附件。★ CodeHelp 中能够在数据库中按标题查找文章,并支持书签功能。 CodeHelp 2.0 新增功能·支持多个数据库文件,能够新建数据库、打开数据库、压缩和备份数据库。·增加按标题查找文章功能·增加书签功能·用户自己添加“语法高亮”定义文件,从而在CodeHelp中增加自己的语法高亮格式。·源代码编辑器增加手动格式化成多行或一行的功能。·源代码编辑器增加查找功能·能够为每个文章添加多个附件,并能够在临时目录中打开附件、导出附件。
PerCDM2013的实现的全部 (2012年2月14日12:57:53 改名为PerCDM2013) 2013年1月27日20:07:48 PerCM2013是我对PerCM系列软件的重写,计划利用1月27日至2月4日这段时间进行设计实现。因为手头还有一个警报发放系统需要完工,所以选择了一直在使用的C#系列进行实现。为了强化前一段时间所做的努力,需要有“项目系统分析”,对技术的选择也要能够大胆有规划。这样,几个软件实现之后,才能够全面地提高能力。 需要研究的技术以下几类 1、现有的代码管理软件的组织构造,自己合理联想; 2、ICSharpCode.TextEditor的重新研究,加速合成; 3、sqlite数据库的使用; 4、自动更新技术的研究; 5、界面库的引入。 立刻行动起来吧! 对陈灯代码管理软件的分析: 这个软件的最大的体会就是“该实现的都已经实现了”。具体以下几点: 1、代码录入模块,可以快捷键进行,其实按照“代码语言”“代码分类”和“关键字”三类就可以区分代码; 2、代码查阅模块,可以查看“最近入库”的和“最近使用”数据,并且数据的查阅方法,非常好。 3、广告,可以一样的方式来打; 4、导入导出代码库其实是一个隐形的亮点,这个系统的数据融合是非常好的;可以加上数据库加密的方法; 5、许多东西都可以设置 包括数据库位置、密码、热键、开机是否启动等等。这里的安全操作密码是为了防止错误删除,可以采用。 2013年1月28日8:36:36 主要界面分为三个部分,一个是数据的获取,一个是数据的查阅(模仿陈灯),此外还包括一个配置界面。采用统一的标准的界面配置,加上一些个人控件的小玩意,保证高效和美观。 2013年1月29日8:12:54 这个程序,玩的就是数据库。在目前时间紧张的情况下,我把零散的时间集合起来,研究一下sqlite. 发现有一个现成的库可以来引用“SQLite ADO .NET”; 2013年1月30日7:35:54 SQLite ADO .NET的引入非常简单,直接把.dll引入,让命名空间来调用就可以了。但是,相比较用的很习惯的sqlserver,这个调试起来还是复杂了一点。 现在编写这种带数据层的代码,已经比较有经验了。 2012年2月2日11:18:37 即使是很简单的功能,也可能需要长时间的编写。积累就因此非常的重要。 而且有一点,我一定不要忘记,那就是我现在所编写的代码,都是高层的代码,也就是说,没有杀手锏。但是方法是相同的,总结是相通的,这一点一定要铭记在心。 2012年2月14日12:52:26 这里有一点启示:即使是那些司空见惯的功能,去实现也可能会耗费相当长的时间。这里,对于软件的积累就相当重要了。 我对未来这个PERCDM的规划,从自己的需求开始: 1、要能够完全实现通过分析程灯那个软件得出的东西; 2、稳定大方,特别是代码高亮的那个地方; 3、具备codelibary的那种管理附件的功能; 4、具备局域网管理功能,为未来应有于内网服务。 5、能够有专门的用来写文档的地方,不一定会很完善,但是有开始,软件的名称也改变为 perCDM 不去做的事情:、 1、类似word的这种复杂文档控制; 2、robbing,界面是要简单; 3、高强度的复制。 2012年2月15日8:34:12 对于几个问题的研究: 1、如何实现附件的功能? 现有的系统都是放到数据库中(而不是存放文件路径),这个样子可以保证系统的高度整合。其中使用sqlite的那个系统将文件(可能还有其他的什么东西)放到了一个单独的数据库文件中,是值得借鉴的。 2、CINtanotes的实现可以汲取的地方 这个样式是我一直想实现但是实现不了的。但是确实很重要,可能还是要多问人,合理利用资源; 注意它的那些搜索的小物件,在大体实现的基础上,这些细节就是专业的开始。 数据库设定 有岂止是复杂一点两点。很多东西现在是没有办法理解是为什么的,但是这证明即使是看起来很简单的东西,也可能有复杂的原理,不可小视。 这里还有一个类似的实现了的软件。 需要注意的是,这种全本浏览的方式,也可能是整理的方式,也是我所需要的,就是能够对自己所掌握的知识进行一个系统的整理,这个目前不去实现。 如果简化成为这样一个状态,perCDM不但可以搜索代码,而且可以同时搜索输入的文档(甚至文档就写作在其中),我想可以首先从简单的模式去实现,这是一个我需要的模式。 3、文档模式,对apose进行了初步的分析。这个收费软件想使用起来需要更多的研究; 4、备份,导入导出以及网络热备 热备是备份的升级。首先从本机备份开始来做。 这个需要数据库中有相关设定,时间等,我相信自己能够完成,还有对时钟的控制,这个热备也是需要的; 那么导入导出,就需要使用到GUID,可能还不止一个数据库。 网络热备,我更倾向于建立服务器,基于我比较扎实的网络通行模型,实现这样的一个系统。 2012年2月18日18:59:41 随着编写几个类似程序并且不断总结反思,的确在winform程序编写的能力上有了一定的提高,对于解决问题,开始有了独立的思考。但是必须认识到自己所处于的不利状态,所以集聚所有的资源,去开发一个有用好用的程序非常重要。 测试是非常重要的。测试不仅包括可以使用的测试,也应该包括是否好用的测试和能否达到目的的测试。 在使用和测试之间,如何去取得平衡?我这里需要不断地对代码进行重构,并且做出有足够挑战价值的工作。 经过一段时间的修改,现在代码很糟糕,是到了改对其进行修整的时候了。好看的代码,将是更为宝贵的财富。更何况这里编写的是用于资料统计的工具了? 进行重构的时候,发现自己还是有想法的。的确创新不是无本之源,艰苦的工作是一定创造所需要的。 2012年2月19日20:53:12 今天对于控件的研究上了一个新台阶,回首逐渐实现这个想要的效果的过程,感到很充实。首先是经过多方面的资料搜集,才发现flowpanel可以实现我所需要的效果。然后是基于以前的自定义控件编写基础,写出了能够解决一定问题的控件。然后是不断精益求精,现在在现实效果上面已经差强人意了,缺乏的是效率问题,这个需要继续研究。 现在看来,自定义控件的确是一个解决许多问题的方法,现在能够把click事件都统一的处理起来,程序已经逐渐像样子了。这个记忆比较深刻,应该是忘不掉了,这其实也就教育自己:去追求,才能够有收获。下一步是数据的融合问题。送自己一句话:“不要让这个世界的复杂性阻碍你前进,要成为一个行动主义者”。需要做的实在是太多了,立刻行动吧。 2012年2月26日21:55:32 上个周末回了次盱眙,这几天工作冲突太大,而且手头出现了一个复杂的webapp,现在不是很在状态。但是设计需要继续做下去,只有顶住了,坚持住了,才可能会获得进步。 现在需要解决的是热备问题。热备两个思路,一个是直接把.db拷贝过去,一个是在数据库中设定“dirty”位,定时对所有”dirty”进行处理。两者相比,前者低效但是易行后则较难实现一点。通过一定的实验,发现数据库使用过程中,.db是可以被拷贝的,而且速度不慢。所以首先采用第一种思路。 这里就需要写percmserver,白手起家,如何开始?还是需要循序渐进,首先从最简单的开始。后期,可以将这个服务器设计成多用户的(那就是另一个话题),首先需要把网络的机制引入进来,并发现和解决问题。由于是局域网内文件传输,所以先采用udp的方式(如果我采用第二种方法,可以配套采用tcp的方式)。那么问题分解如下: 1、局域网udp传输文件; 2、加入一些东西,判断当前数据库是否需要被热备(一般来说是时间) 3、如何从服务器将被热备的数据库拷贝回来(比如我换一个机器); 2012年2月29日8:02:30 现在基本把“热备”的机制加入了进去,但是由于对热备的机制认识不是很全面,所以可能没有完全实现这个功能。我认为现在是需要把这个程序拿出来,给更多的人使用,进行发现问题的时候了。 2013年3月24日 10:29:36 利用休假的最后时间把这个软件在网络上发布。想获得许多人的认同是困难的,但是至少这里有一个开始: 代码收录界面: 代码搜索界面,使用了较多的自定义控件: 丰富的配置界面: 具备热备功能: 好了,就是这些。我希望这个软件能够给大家的日常工作或者学习带来方便。需要代码或者有问题讨论,请邮jsxyhelu@gmail.com,一定给出满意答复! Jsxyhelu 二〇一三年三月二十四日 10:41:21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值