和Cygwin一起使用Mercurial?
我们一直在尝试将Mercurial与Cygwin(在Windows上)一起使用,但遇到了一个错误,因为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
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中使用裸\
会“呕吐”