2011-01-07 3 views
2

Мы пытались использовать Mercurial с Cygwin (в Windows), но сталкивались с ошибкой, поскольку Cygwin использует косые черты, и Mercurial, похоже, требует обратных косых черт. Есть ли обходной путь?Использование Mercurial с Cygwin?

Пример вопроса:

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

Вы пытались установить Mercurial внутри cygwin, а не пытаться использовать Windows Mercurial? Предположительно Mercurial будет вести себя более unix-y, если он работает под Python, скомпилированным для cygwin. – joeforker

+1

@joeforker, это не плохое предложение, за исключением случаев, когда вы используете версию unix вообще для данного репозитория, вы должны * использовать * только версию unix или вы получите странные ошибки из-за различий в пути. Это исключает использование таких инструментов, как интеграция IDE или черепаховый, чтобы дополнить ваш CLI cygwin. –

ответ

6

У меня нет такой проблемы, потому что я использую два ртутные:

  • ртутных в комплекте с TortoiseHG для использования в окнах CMD оболочках (обычно я не использую его напрямую, но он используется утилиты TortoiseHG GUI).
  • cygwin's mercurial, который я могу использовать в cygwin.

Вы можете безопасно использовать их оба, потому что обе версии сохраняют историю версий в той же папке .hg. Mercurial хранит информацию о путях в папке .hg - это какой-то OS-независимый способ.

Для обеспечения безопасности используйте ту же версию для обоих Mercurials.

+0

Интересно, я попробую. В комментариях к вопросу @ Карл Билефельдт указывает, что может возникнуть проблема с этим подходом. Но похоже, что вы не сталкивались с такими проблемами. –

+0

Mercurial Cygwin работает хорошо, но я столкнулся с несколькими неприятными проблемами ... но это единственное решение, которое я нашел, который близок к работоспособности. –

1

Я решил аналогичную проблему для bzr, используя сценарий оболочки, который преобразует косые черты с помощью команды cygpath. Это может потребовать некоторой настройки для ваших нужд, но вот мой сценарий:

#!/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-адреса, поэтому он не будет преобразован в путь к окну. Он работал для меня, но есть более надежные способы сделать это, если вы так склонны. –

10

Добавьте это в .hgrc:

[ui] 
slash = true 

Теперь TortoiseHg будет использовать собственные слэш тоже:

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

Это упрощает копирование и вставку результатов 'hg status'! Это связано с тем, что (через оболочку mingw/cygwin) при вызове команды уже выполняется преобразование '/' в '\', однако использование bare '\' в bash будет идти 'vomit' – user2864740

0

Ian Lewis предлагает:

деинсталлировать Cygwin ртутный пакет и положить TortoiseHG-х путь в моей переменной среды PATH (ну это было уже там) и все денди. TortoiseHG просто волшебным образом работает на окнах (хотя ртутные репозитории в сети Windows являются sloooooow). Приятно иметь возможность просто набирать «hg push» и работать так же, как и «hg merge» так же, как дома, на моей машине Linux («hg view» - это «hgtk log»).

Какая сумма означает «не использовать hg cygwin, если вы собираетесь использовать Tortoise HG», что кажется лучшим решением для меня.

Смежные вопросы