`

(转)用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 的客户端工具。 集成右键菜单

    SVN,HG,GIT命令对照.pdf

    SVN(Subversion)、HG(Mercurial)、GIT是三种广泛使用的版本控制系统,它们各自有不同的设计理念和命令集,尽管它们在执行相同或相似功能时具有一定的相似性,但直接命令对应关系并不严格存在。下面将详细介绍...

    Git2.11.1+SVNGit2.4.0.zip

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

    svn-git插件Jenkins.zip

    在Jenkins中,svn-git插件是一个非常实用的组件,它实现了Subversion(SVN)与Git版本控制系统之间的集成,使得项目可以同时使用两种不同的版本控制工具,从而满足不同团队的需求。本文将深入探讨svn-git插件在...

    git和svn学习入门教程

    Git和Subversion(SVN)都是版本控制系统,用于跟踪和管理软件开发中的代码变更。它们在代码管理和协作方面发挥着至关重要的作用。本教程将帮助初学者了解这两者的基础知识,以便选择适合自己的工具。 首先,让我们...

    svn转化为git

    使用`git-svn`工具将SVN的历史记录导入Git: ``` git svn clone --stdlayout -s svn://your_svn_url . ``` 这里的`--stdlayout`表示标准的SVN布局(trunk、branches、tags),`-s`表示设置svn.remote.url和svn....

    比较ClearCase, SVN, GIT

    ClearCase采用集中式版本控制模型,需要对服务器进行访问,而SVN和GIT使用分布式版本控制模型,每个客户端都可以独立工作。GIT的分布式版本控制模型使得开发者可以离线工作,并且可以在本地提交更改然后push到服务器...

    git和svn的比较

    Git和SVN的比较 Git和SVN是两个最常用的版本控制系统,它们都是为了帮助开发者更好地管理代码、追踪变化、协作开发而设计的。那么,它们之间有什么区别呢?下面,我们将对Git和SVN进行比较,详细介绍它们各自的优...

    svn2git.zip

    关于标签“Ruby”,这表示svn2git工具是用Ruby编程语言编写的。Ruby是一种面向对象、动态类型的脚本语言,以其简洁、优雅的语法和强大的库支持而闻名,尤其适合快速开发这样的工具。 在svn2git-master目录中,我们...

    版本管理_svn和git常用操作

    提交修改用`git add`和`git commit`,然后使用`git push`推送至远程仓库。 ``` git add . git commit -m "提交信息" git push origin master ``` #### 2.4 创建分支 创建和切换分支用`git branch`和`git checkout`...

    SVN迁移到Git

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

    Git与SVN比较

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

    git-svn使用用法

    基本的使用方法包括:本地修改代码后使用git commit命令提交更改,使用git svn rebase命令同步远程svn服务器的更改,以及使用git svn dcommit命令推送更改到远程svn服务器。 总之,git-svn是一个将Git的灵活性与SVN...

    SVN和Git简单使用文档

    **SVN(Subversion)与Git是两种广泛使用的版本控制系统,它们在软件开发过程中起着至关重要的作用。本文将深入探讨这两个工具的基本概念、安装、配置以及日常使用方法。** ### SVN(Subversion) **1. SVN简介** ...

    SVN迁移到git

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

    如何将SVN项目迁移至Git

    使用 `git svn clone` 命令,同时指定 SVN 仓库 URL、用户信息文件和其它选项: ```bash git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=userinfo.txt --no-minimize-url...

    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比较

    GIT使用了更高效的文件存储和访问机制,而SVN在处理大量文件或者大型文件时可能会变慢。 在功能上,GIT具有强大的合并和重置功能,可以帮助开发者解决复杂的合并冲突,并且能够轻松地回退到之前的版本。SVN虽然也...

    svn迁移到git保留commit信息,后续还能维护从svn同步代码到git(亲测有效,网上资源整理最终版)

    公司代码要从svn迁移到git,不想笨笨的重新上传一份新代码,于是研究了下svn代码到git的迁移同时还要保留commit信息,尝试了很久终于成功啦;在保留commit信息的同时,还能继续从svn同步代码到git,这样即使还有人...

Global site tag (gtag.js) - Google Analytics