被 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
Posted by: 福利工口姬 | (10) April 16, 2014 04:27 PM
Posted by: 浩 | (9) August 10, 2008 11:03 PM
Posted by: Zhe | (8) August 6, 2008 11:24 PM
Posted by: Anonymous | (7) August 6, 2008 06:22 PM
Posted by: alioxp | (6) August 6, 2008 05:45 PM
Posted by: Hermit | (5) August 6, 2008 09:40 AM
Posted by: nothanks | (4) August 6, 2008 09:02 AM
Posted by: ShiningRay | (3) August 6, 2008 08:55 AM
Posted by: is | (2) August 6, 2008 07:36 AM
Posted by: Felix Huang | (1) August 6, 2008 06:56 AM