2011-01-07 13 views
2

Cygwinで(Windowsでは)Mercurialを使用しようとしていましたが、Cygwinがフォワードスラッシュを使用し、Mercurialがバックスラッシュを必要とするようにエラーが発生しました。回避策はありますか?問題のCygwinでMercurialを使用していますか?

例:

hg status 
M src\myfile.java 

hg ci src\myfile.java <-- Error: abort: srcmyfile.java: The system cannot find the file specified 

+0

エラーは何ですか? – geoffspear

+3

Windows Mercurialを使うのではなく、Cygwinの中にMercurialをインストールしようとしましたか?おそらくMercurialはcygwin用にコンパイルされたPythonの下で動作しているなら、よりunix-yの方法で動作します。 – joeforker

+1

@joeforker、これは悪い提案ではありません。ただし、特定のリポジトリに対してunixバージョンを使用する場合は、unixバージョンのみを使用するか、パスの違いにより奇妙なエラーが発生します。 IDE統合やtortoisehgなどのツールを使用してcygwin CLIを補うことはできません。 –

答えて

6

私は2つの水銀を使用しているため、私はこのような問題を持っていない:

  • 水銀窓cmdをシェルに使用するためにTortoiseHGにバンドル(通常、私はそれを直接使用していないが、それはTortoiseHgのGUIツールで使われています)。
  • 私はcygwinで使うことができるcygwinの水銀です。

両方のバージョンがバージョン履歴を同じ.hgフォルダに保存するため、両方のバージョンを安全に使用できます。 .hgフォルダ内のパスに関するMercurialストアの情報は、OSに依存しない方法です。

両方のMercurialsについて同じバージョンを安全に使用します。

+0

面白い私はしようとします。 @ Karl Bielefeldtのコメントでは、このアプローチに問題がある可能性があることを示しています。しかし、それはあなたのような問題が発生していないように聞こえます。 –

+0

CygwinのMercurialはうまく動作しますが、私はいくつかの厄介な小さな問題に遭遇しました..しかし、これは実行可能に近くに来ることがわかった唯一の解決策です.. –

1

cygpathコマンドを使用してスラッシュを変換するシェルスクリプトを使用して、bzrと同様の問題を解決しました。それはあなたのニーズに合わせていくつかの調整が必要な場合がありますが、ここで私のスクリプトです:すべてのコマンドライン引数を通じて

#!/usr/bin/bash 
COMMAND="/c/Python27/python.exe c:\\\\Python27\\\\Scripts\\\\bzr" 
for i in "[email protected]" 
do 
    COMMAND+=" " 
    if [[ "$i" =~ ^- || "$i" =~ // ]] 
    then 
     COMMAND+="$i" 
    else 
     COMMAND+=$(cygpath -m "$i" | sed -e 's/ /\\ /g') 
    fi 
done 
eval $COMMAND 

これサイクルが。マイナス記号(bzrオプション)で始まる場合は、引数をそのまま追加します。それ以外の場合は、cygpathを通して実行し、すべてのスペースをエスケープします。私は"$i" =~ //が何であるか覚えていません。それは私が思っていたものと一致しません。希望が役立ちます。

+0

'$ i" =〜// 'はURLを検出してWindowsのパスに変換されない単純な方法でした。それは私のために働いていますが、あなたがそんなに傾けているなら、それを行うためのもっと頑強な方法があります。 –

10

あなた.hgrcにこれを追加します。

[ui] 
slash = true 

今TortoiseHgのはあまりにも適切なスラッシュを使用します。

C:> hg status 
M src/myfile.java 
+0

これは 'hg status'の結果をコピー&ペーストするのがずっと簡単です!これは、(mingw/cygwinシェルを介して)コマンドを呼び出すときにすでに '/'が '\'に変換されているためですが、bashの '\'を使用すると 'vomit ' – user2864740

0

Ian Lewisが示唆:

アンインストールcygwinの水銀パッケージとTortoiseHgの者を置きます私のPATH環境変数のパス(すでにそれはすでに存在していました)とすべてのものがダンディです。 TortoiseHGは魔法のようにウィンドウ上で動作します(Windowsネットワーク上の水銀レポはsloooooowです)。 'hg push'とタイプするだけで、自分のLinuxマシンと同じように "hg merge"( "hg view"は "hgtk log"です)と同様に動作することができればうれしいです。

これは、「Tortoise HGを使用する場合はcygwinのhgを使用しないでください」と表示されます。これは私にとって最善の解決策のようです。

関連する問題