« 把 AOI 的部分独立出来 | 返回首页 | 人不可貌相 »

被 Darcs 折磨了一天

最近想在子项目中试一下 darcs ,替代原来的 svn 。只是尝试一下。

之前都是在本地玩 darcs 的,没遇到多少问题。今天找了台 freebsd 的机器,做了一个集中的仓库。没想到遇到许多麻烦。

我的想法很简单,在集中仓库的机器上建一个专有用户,把几个项目相关人员的 key 都放进去,大家都可以通过 ssh 访问这台机器。那么所有人都可以方便的通过 darcs get/put/pull/push 操作仓库了。

从 freebsd 或 linux 上远程操作这个仓库都没有多少问题,问题出在 windows 上。windows 版的 darcs 在提交文件时,一旦 patch 过大,就很容易失败。弄了一天才把问题弄明白。

一开始怀疑是 darcs 版本不匹配,patch bundle 文件不兼容。因为 freebsd 上装的是 2.0.2 版,而 windows 上是 2.0.0 版的。提交失败时,总会报一句,

darcs failed: Malformed patch bundle: '[init' is not 'Context:'

貌似我的 init 这个 patch bundle 格式错误。尝试了老版的仓库格式还是依然存在。

google 了一下,有许多人遇到跟我一样的问题,但是没有人解答。我试着找 2.0.2 版的 windows 下编译好的 darcs 未果。想自己在 windows 下 build 一个出来,怎么弄都没搞定,放弃。转而去 freebsd 下自己 build 了个 2.0.0 版的 darcs ,可问题依旧。

我用 darcs send -O 生成 patch 文件,再用 scp 放到远程机器上,然后 ssh 登陆 darcs apply 一下却没有问题。确定不是版本不兼容问题。

通过修改 DARCS_SSH 设置了一个 bat 文件间接引导 ssh ,以此观察 darcs 如何调用 ssh 工作。发现,在 darcs push 的时候,其实就是在远程机器上运行了 darcs apply ,然后等待标准输入。这边通过 ssh 把 patch bundle 发送过去。

由于小的 patch bundle 没有问题,问题都出在文件太大的时候。让人怀疑是 windows 控制台的问题。胡乱改了一些 windows 控制台的属性,并反复测试,发现同样大小的 patch bundle ,有时候可以正常工作,有时候却不行。很难确定具体原因。症状就是:从 ssh 建立的管道发送过去的输入数据不完整。

最后,放弃使用 mingw 版的 darcs 以及 putty 带的那个 plink (ssh)工具;装了一个 cygwin 以及 openssh 。一切就正常了。另外,如果用 cygwin + putty 的 ssh 也有问题。

我估计很大可能出在那个 darcs 的 windows 包中带的 ssh.exe (其实就是 putty 的 plink.exe )这个工具上。windows 糟糕的管道设施或许也有责任。

哎,在 windows 上跑 *nix 的命令行工具就是问题多多啊。


随手记录下这失败的一天,希望可以帮助到遇到同样问题 google 到这里的人们。


顺便宣传一下 darcs ,虽然 windows 版很是折磨了我一次,但东西还是很好用的。如果你有 svn / cvs 的经验,很容易切换过去。下面列几条基本指令,前几条大约可以跟 svn 对应起来,但不完全一致。

  darcs get == svn co
  darcs put == svn import
  darcs pull == svn up
  darcs push == svn ci
  darcs record == 本地提交
  darcs send == 发送/生成 patch bundle
  darcs apply == 打上 patch bundle

darcs 是没有版本号的,工作理念跟 svn 很不一样,但是很人性,容易让人接受。推荐有兴趣的朋友试一试。

Comments

可以试一试
云风 大哥有没有关于darcs或svn 的教材啊 看了你使用的 我在windows版本上根本都使用不起来 是什么原因啊`是windows的哪个版本才能用啊?xp/services for unix/vista /server 2007 都能?
windows上跑*nix命令,为啥不试试 Windows Services for UNIX http://www.microsoft.com/downloads/details.aspx?familyid=896c9688-601b-44f1-81a4-02878ff11778&displaylang=en
说点Windows的好话吧 :),Windows现在还比较稳定了,也许是16位程序已经没有了?友好的界面使大家都能快速成长起来,虽然对理解系统帮助不大,图形界面还是最快捷的交互方式。Windows平台还是最适合表现个人英雄主义的平台,如果你可以,钱和名气都能得到,而且比别的平台都快。不过Windows应用程序的增长已经停滞了,主流应用已经开发完毕。在国外还可以有很多环节可以生存,国内除了游戏,其他应用都几乎无法发展了。没有市场循环,培养那么多工程师做什么好呢?总在创业和泡沫中生活吗?
是不是有些代码就不能在Windows下编译呢?前两天cygwin编译jam,总报resource.h里面有宏未定义,我看cygwin sys/resource.h 和 linux下 sys/resource.h不一样,该定义在cygwin sys/resource.h 确实没有,用VC编译报无法解析外部符号 @_RTC_CHECKSTACKVARS@8 ,没找到解决的办法,哪位达人能指点一下?谢谢
呵呵,我开始用google reader了。云风的blog有好多人订阅啊!赞。
windows又被云风看似不经心地羞辱了一把:D
分布式版本控制系统还有很多 Mercurial, Bazzar, GIT都不错
试试git吧,windows下面还是很稳定的。
不知道云风有没有用过git。相比起其它代码管理工具,git快得多,而且管理手段也很丰富。

Post a comment

非这个主题相关的留言请到:留言本