jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          云風Blog--被 Darcs 折磨了一天

          Posted on 2011-04-13 11:08 幻海藍夢 閱讀(240) 評論(0)  編輯  收藏 所屬分類: 版本管理配置管理

          最近想在子項目中試一下 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 很不一樣,但是很人性,容易讓人接受。推薦有興趣的朋友試一試。

          原文:http://blog.codingnow.com/2008/08/darcs.html

          主站蜘蛛池模板: 广灵县| 苏州市| 体育| 台南县| 无棣县| 嘉祥县| 留坝县| 垣曲县| 庆安县| 雷州市| 理塘县| 阜宁县| 阿坝县| 来宾市| 二连浩特市| 芷江| 基隆市| 西乌珠穆沁旗| 郎溪县| 光山县| 田林县| 桂平市| 临湘市| 汉川市| 隆化县| 彰化县| 龙山县| 乐陵市| 乌兰察布市| 寻甸| 隆安县| 新巴尔虎右旗| 耿马| 金华市| 金秀| 射阳县| 上杭县| 汶川县| 油尖旺区| 太仆寺旗| 新建县|