• DVCS的折腾


      最近折腾了一下分布式的版本管理系统,几天下来,感叹人生在于折腾。

      现在风头最劲的DVCS非Mercurial和Git莫属了,因为我主要在Windows下使用,而Mercurial跨平台支持不错,所以先试下。

    下载了TortoiseHg 1.0+Mercurial 1.5,准备把原来的svn库转换过来。svn到Mercurial的转换有多种方法:

    • hg自带convert插件,安装Subversion Python Binding,再配置一下Mercurial.ini就可以使用了。转换速度挺快,但是转出来的库取中文文件名时出错。
    • 另外一个插件hgsubversion,情况跟convert插件类似。
    • hgsvn,直接调用svn.exe,速度慢,但转出来中文文件名可用。(有两个bug,一个是显示时乱码,另一个是转换某些中文文件出错,小改后可用)

      Git的转换也有类似的中文文件名无法处理的情况出现,怀疑是跨平台支持的问题。所以找回wubi装上了ubuntu,在Linux下试一把。然后又是一通安装,把python-dev、svn、mercurial、git、xxx binding……装备搞齐,一转换,还真行,中文完全没有问题,心中窃喜。回到Windows,再试,又不行了,囧。

      仔细搜搜文章,发现Mercurial和Git在文件名处理上都有相同的问题。跟Linux系统类似,处理文件名不考虑编码,OS给什么,就存什么。Linux都是UTF8,所以没有问题。Windows下把UTF8文件名取出来,Windows可不认识,所以还是出错了。

      于是再进一步捣鼓,发现Bazaar(简称bzr)在多语言文件名上处理的很好。bzr虽然不如Mercurial和Git使用广泛,但也不错,曾几何时还倒腾过几下的。bzr速度比Mercurial和Git慢一些,虽然2.0已经有了很大改观,我忍了。

      bzr玩得正欢,忽然发现了FixUtf8,Mercurial的一个插件,号称可以解决Windows下Unicode文件名处理的问题,狂喜。换回Mercurial,可以正常使用,Python扩展性就是好哇。除了在convert时要把此插件禁用,问题不大。

      本以为折腾到此为止,没想到一波未平,一波又起。又发现Mercurial在处理一个大文件时out of memory,真是shit。找到官方wiki有篇文章说明,不支持太大的文件。可是这个文件才300M呀,sign。相同的问题也出现在bzr上,真是欲哭无泪,杯具啊。

      Git,我的神,入了一个4G的文件都没问题,6G的文件就出错了。看来还是Linus靠谱!但是msysgit(Windows下的Git)对中文文件名支持始终有问题,无论如何设置也不能成功,TortoiseGit也一样。

      神哪,我只是想要一个在Windows平台下可以用的、有GUI的、支持Unicode文件名、可以入大点的文件的DVCS,咋就这么难捏?

      最后附上我对这几个DVCS的比较:

    Git。Linus自己开发的。
    优点:
     * 速度最快。
     * 使用最广泛,被多个大项目使用。
     * 支持更大的文件,测试4G的可以,6G的不行。
    缺点:
     * 跨平台支持不够好。Windows平台支持依赖第三方项目msysgit和TortoiseGit。
     * 不容易理解。
     * Windows下不支持多语言文件名。
     * 需要日常维护git gc。

    Bazaar。基于Python开发。
    优点:
     * 支持多语言文件名(包括TortoiseBzr)。
     * 跨平台支持很好。
     * 被ubuntu选中。
     * 支持类似svn的工作流程,以及更多的工作流程。
    缺点:
     * 比Mercurial和Git慢。虽然1.0之前采用knits格式(类似Mercurial的revlog),1.0之后采用pack格式(类似Git),2.0性能大幅提升,但性能从未超越……
     * repository比较大,我自己的代码库Bazaar 28.3M,Mercurial 11.8M,Git 10.1M。这个也是从未超越……
     * 使用群体不够广。
     * 需要日常维护bzr pack。
     * 不支持在一个库中使用branch。
     * 不能处理过大的文件,反正300M的不行。

    Mercurial。基于Python开发。
    优点:
     * 文档完善。
     * 被OpenSolaris、Mozilla选中。
     * 容易理解,方便使用(有TortoiseHg项目)。
     * 速度快,但还比不上Git。
     * 不需要git gc/bzr pack之类的日常维护。
    缺点:
     * Windows不支持多语言文件名,但可以通过fixutf8插件解决。
     * 底层储存使用了很多文件,Windows平台下对性能有负面影响。
     * 不支持local branch,但可以通过bookmarks插件支持。
     * 不能处理过大的文件,反正300M的不行,参见http://mercurial.selenic.com/wiki/HandlingLargeFiles。

  • 相关阅读:
    SQL Server ->> Database Snapshot(数据块快照)
    SQL Server ->> Sparse File(稀疏文件)
    Linux ->> Sudo命令
    Linux ->> mkdir命令
    Linux ->> VMWare Workstation虚拟机里的UBuntu系统安装VMWare-tools
    Microsoft Office ->> 完整卸载Office 2007
    SQL Server ->> XML方法
    SQL Server ->> 更改服务器时区对SQL Server Agent服务器的影响
    分析java内存情况
    oracle 10g 11g 12c区别
  • 原文地址:https://www.cnblogs.com/tinyfish/p/1682123.html
Copyright © 2020-2023  润新知