`

(转)用svn、git、hg有感

    博客分类:
  • git
阅读更多

在公司碰到一个怪问题,TortoiseSVN 1.4.6 update 和 checkout 都失败,直接用命令行 svn 也一样,错误信息完全没有提示性,折腾了近两个小时,才明白是服务器上在某个目录下有两个同名但大小写不同的文件,这在 Windows 下是不允许的。发封邮件到 Subversion 和 TortoiseSVN 的邮件列表,得到的回复时大意是说你看能否提供个补丁,以前看过一点点 Subversion 源码,非常反感其冗长繁琐的代码,这次硬着头皮再看了看,checkout subversion 和 tortoisesvn 的代码花了一天多,发现在 Windows 上编译非常麻烦,还需要 VS 2008,作罢,在 Debian 上用 apt-get source 下载了源码编译了个调试版,gdb 了三四个钟头想理清执行路线,还是没搞定,里头的代码架构太奇妙以致难以理解,可能什么地方有文档描述吧,没找到。 

昨天开始编写 cfgtool,用 git 或者 hg 管理 /etc 以及 HOME 目录下的配置文件,然后发现二者的很多细微差别,因为是 shell 脚本,对命令返回值非常依赖,但是 git status 在没有脏文件时返回 1,git commit -a 和 git commit 在没有脏文件时也返回 1,完全与 Perl 的“尽量执行下去”的风格相反,然后发现 git ls-files --modified 果然只显示修改了的文件,不包含新增加的文件,还没弄明白如何确保  git commit 不报错。hg add 一个已经 add 过的文件会报错,而且似乎绝大部分情况下 hg 的返回值都是零。 

越来越深刻的体会到 git 的风格独特,add 是 add 数据而非记录文件名,这样将 commit 的开销分散在长时间不断的 add 过程里,带来了 commit 效率的提升,但是 add 的繁琐,还有 git commit -a  后面不能接文件参数,而 git commit 提交的是 index 里记录的内容,因此不能简单的 *完全* 提交一些文件,果然是为了 integrator 着想的工具。 

郁闷,all VCSes sucks,these suck more! 

美的程序:
简明:代码少,逻辑质朴,算法精炼,一个程序只做一件事情,只有必要功能——好像是 impossible mission。
一致:提示信息的一致,UI 的一致。
容错:程序很稳健,适应各种恶劣情况,以 C 这种语言只有靠长时间补丁才能达到虚假的稳健。
高效:尽可能高效。 

简评一下几种版本管理工具:
CVS, VSS:没有变更集概念,仅此一点就可以安息了。
GIT: 复杂的 UI,超前的理念
SVN: 慢,代码库膨胀剧快,客户端常有小问题,错误信息稀里糊涂
Mercurial: 也趋向于复杂了
Bazaar:UI 古怪
Darcs: 慢

 

分享到:
评论

相关推荐

    ubuntu下RabbitVCS安装方法(SVN、GIT、Hg 工具)

    ubuntu下RabbitVCS安装方法。 适用于SVN、GIT、Hg 的客户端工具。 集成右键菜单

    Git2.11.1+SVNGit2.4.0.zip

    Git-2.11.1-64-bit 和 TortoiseGit-2.4.0.0-64bit,适用于使用Git有服务器仓库,把写好代码放入Git仓库,使用SVNGit上传更新等,使用Git仓库的好处就在于,你在家里也是可以上传更新的,只要账号密码正确就可以了,...

    git和svn学习入门教程

    现在使用git的比svn多了,但是git操作比svn复杂,上传git和svn的简单教程

    SVN,HG,GIT命令对照.pdf

    SVN,HG,GIT是三种常见的版本控制系统,本文简单列出一些相似的操作命令。当然,三种系统各有特点,严格的对应关系是没有的。

    SVN迁移到Git

    从SVN迁移到Git之后,项目开发代码继续在SVN提交,如何同步迁移之后继续在SVN提交的代码到Git

    Git与SVN比较

    Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较

    svn转化为git

    svn转化为git

    SVN迁移到git

    描述了如何从SVN迁移到git,比较简短,精炼,文档中提到的users.txt为svn与git的用户对照

    svn-git插件Jenkins.zip

    svn-git插件Jenkins.zipsvn-git插件Jenkins.zipsvn-git插件Jenkins.zip

    svn2git.zip

    svn2git ,svn2git是一个微型工具用来将 Subversion上的项目迁移到Git上,并保留 trunk,...

    git svn转换工具

    svn+git实现离线提交并且不需要到处所有svn版本,速度超快非一般的感觉,超越git本身的git2svn功能。 使用本工具需要安装基础工具: 首先安装git msysgit:https://code.google.com/p/msysgit/downloads/list msysgit...

    SVN git github-版本控制服务器部署与实践

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。也是就是CVS的接班人!

    版本管理_svn和git常用操作

    介绍版本管理实践。 主干发布,分支开发模式下,svn和git的常用操作。

    git和svn的比较

    两个版本控制git和svn的比较,以及它们各自的优缺点。

    Jenkins离线安装svn git maven插件包

    Jenkins离线安装svn git maven插件包 ,包含了依赖顺序,方便安装。 plugins: 1.structs.hpi 10.mailer.hpi 11.apache-httpcomponents-client-4-api.hpi 12.jsch.hpi 13.javadoc.hpi 14.workflow-api.hpi ...

    git-svn使用用法

    git-svn 的用法 介绍git-svn 的用法 和使用场景

    git 、svn汉化包

    git 、svn汉化包git 、svn汉化包git 、svn汉化包git 、svn汉化包git 、svn汉化包

    SVN 与 GIT比较

    需要全面了解svn和git的优劣对比的话,这个文档肯定让你满意,给点分吧。

    SVN和Git简单使用文档

    SVN和Git的简单使用,主要有PPT和work文档两个文件,主要介绍两者的简单使用……

    简易SVN/GIT下载器

    简易的SVN代码下载器,同时支持GIT,可以完整实现SVN/GIT的checkout,并演示如何解析svn协议的XML,以及下载项目,方便想要深入了解SVN这类代码管理系统的构造以及二次开发的朋友,非常小巧作为工具用也是不错的

Global site tag (gtag.js) - Google Analytics