【问题标题】:Using Mercurial with Cygwin?在 Cygwin 中使用 Mercurial?
【发布时间】:2011-01-07 19:49:23
【问题描述】:

我们一直在尝试将 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

??

【问题讨论】:

  • 您是否尝试过在 cygwin 中安装 Mercurial 而不是尝试使用 Windows Mercurial?如果 Mercurial 在为 cygwin 编译的 Python 下运行,大概会以更 unix-y 的方式运行。
  • @joeforker,这不是一个坏建议,除非您对给定的存储库完全使用 unix 版本,您必须使用 unix 版本,否则您会得到由于路径差异导致的奇怪错误。这排除了使用 IDE 集成或 tortoisehg 等工具来补充您的 cygwin CLI。

标签: mercurial cygwin


【解决方案1】:

将此添加到您的 .hgrc:

[ui]
slash = true

现在 TortoiseHg 也将使用正确的斜线:

C:> hg status
M src/myfile.java

【讨论】:

  • 这使得复制和粘贴hg status 结果变得更加容易!这是因为(通过 mingw/cygwin shell)在调用命令时已经将 / 转换为 \ ,但是在 bash 中使用裸 \ 会“呕吐”
【解决方案2】:

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

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

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

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

【讨论】:

  • 有趣,我会试试。在问题的 cmets 中,@Karl Bielefeldt 表示这种方法可能存在问题。但听起来你还没有遇到任何此类问题..
  • Cygwin 的 Mercurial 运行良好,但我遇到了一些烦人的小问题。但这是我发现的唯一接近可行的解决方案。
【解决方案3】:

我通过使用 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" =~ // 是干什么用的。这和我想象的不符。希望对您有所帮助。

【讨论】:

  • 我突然想到"$i" =~ // 是一种检测 URL 的简单方法,因此它不会被转换为 Windows 路径。它对我有用,但如果你愿意,还有更强大的方法可以做到这一点。
【解决方案4】:

Ian Lewis 建议:

卸载 cygwin mercurial 包并将 TortoiseHG 的路径放在我的 PATH 环境变量中(它已经在那里),一切都很好。 TortoiseHG 只是在 Windows 上神奇地工作(尽管 Windows 网络上的 mercurial repos 很慢)。很高兴能够只键入“hg push”并让它像我在家里在我的 linux 机器上所做的那样工作以及“hg merge”(虽然“hg view”是“hgtk log”)。

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

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2012-02-13
    • 2010-10-07
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多