使用Mercurial和Cygwin?

时间:2011-01-07 19:49:24

标签: mercurial cygwin

我们一直在尝试使用Mercurial和Cygwin(在Windows上),但遇到错误,因为Cygwin使用正斜杠,Mercurial似乎需要反斜杠。有解决方法吗?

问题示例:

hg status 
M src\myfile.java

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

??

4 个答案:

答案 0 :(得分:10)

将此添加到.hgrc:

[ui]
slash = true

现在TortoiseHg也会使用正确的斜杠:

C:> hg status
M src/myfile.java

答案 1 :(得分:6)

我没有这样的问题,因为我使用了两个Mercurials:

  • TortoiseHG捆绑在一起的mercurial用于windows cmd shell(通常我不直接使用它,但它被TortoiseHG GUI工具使用)。
  • cygwin的mercurial,我可以在cygwin中使用。

您可以安全地使用它们,因为两个版本都在同一.hg文件夹中存储版本历史记录。 Mercurial存储有关.hg文件夹中路径的信息是与操作系统无关的一种方式。

为安全使用Mercurials的相同版本。

答案 2 :(得分:1)

我通过使用使用cygpath命令转换斜杠的shell脚本解决了bzr的类似问题。可能需要根据您的需要进行一些调整,但这是我的脚本:

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

循环遍历所有命令行参数。如果它以减号(bzr选项)开头,它只是按原样附加参数。否则,它通过cygpath运行它并逃脱所有空间。我不记得"$i" =~ //的用途。它与我的想法不符。希望有所帮助。

答案 3 :(得分:0)

Ian Lewis建议:

  

卸载cygwin mercurial包并将TortoiseHG的路径放在我的PATH环境变量中(好吧它已经存在)并且一切都很花哨。 TortoiseHG只是神奇地在windows上工作(虽然windows网络上的mercurial repos是sloooooow)。很高兴能够只输入'hg push'并使其与我在linux机器上执行的“hg merge”一样工作(“hg view”虽然是“hgtk log”)。

如果你还要使用Tortoise HG,那就等于“不要使用cygwin的hg”,这对我来说似乎是最好的解决方案。