Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
和Cygwin一起使用Mercurial?_Mercurial_Cygwin - Fatal编程技术网

和Cygwin一起使用Mercurial?

和Cygwin一起使用Mercurial?,mercurial,cygwin,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 hg状态 M src\myfile.java

我们一直在尝试将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
hg状态
M src\myfile.java

hg ci src\myfile.java我通过使用shell脚本解决了bzr的类似问题,该脚本使用cygpath命令转换斜杠。它可能需要根据您的需要进行一些调整,但以下是我的脚本:

#!/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”=~/
是用来做什么的。和我想的不一样。希望有帮助。

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

  • mercurial与捆绑在一起,用于windows cmd shell(通常我不直接使用它,但它由OrtoisehG GUI工具使用)
  • cygwin的mercurial,我可以在cygwin中使用
您可以安全地使用这两个版本,因为这两个版本都将版本历史存储在同一个
.hg
文件夹中。Mercurial在
.hg
文件夹中存储有关路径的信息,这是一种与操作系统无关的方式


为了安全起见,两种Mercurial使用相同的版本。

将此添加到您的.hgrc中:

[ui]
slash = true
现在,乌龟也将使用适当的斜杠:

C:> hg status
M src/myfile.java
建议:

卸载cygwin mercurial包,并将Ortoisehg的路径放在我的path环境变量中(它已经存在了),一切都很好。Ortoisehg只是在windows上神奇地工作(尽管windows网络上的mercurial回购协议非常缓慢)。很高兴能够像我在家里的linux机器上一样,键入“hg push”并使其与“hg merge”一起工作(“hg view”是“hgtk log”)


这相当于“如果您也要使用Tortoise hg,请不要使用cygwin的hg”,这似乎是我的最佳解决方案。

您是否尝试在cygwin内部安装Mercurial,而不是尝试使用Windows Mercurial?如果Mercurial在为cygwin编译的Python下运行,它的行为可能会更加unix-y。@joeforker,这不是一个坏建议,除非您对给定的存储库使用unix版本,您只需使用unix版本,否则您会因为路径差异而出现奇怪的错误。这就排除了使用IDE集成或OrtoiseHG等工具来补充cygwin CLI的可能性。我刚刚想到,
“$i”=~/
是一种检测URL的简单方法,因此它不会转换为windows路径。这对我来说很有效,但如果你愿意的话,还有更有效的方法。有趣的是,我会试试。在对问题的评论中,@Karl Bielefeldt指出,这种方法可能存在问题。但听起来你还没有遇到过这样的问题……Cygwin的Mercurial很好用,但我遇到了一些恼人的小问题。。但这是我发现的唯一接近可行的解决方案。这使得复制和粘贴
hg status
结果变得非常容易!这是因为(通过mingw/cygwin shell)在调用命令时已经将
/
转换为
\
,但是在bash中使用裸
\
会“呕吐”