Вопрос по git – использование Notepad ++ для git внутри cygwin

7

Это продолжение этого вопроса

Как я могу использовать Notepad ++ (или другой) с msysgit?

Я сделал все комбинации, которые я могу придумать для моего сценария оболочки. когда у меня есть консоль Cygwin (я использую mintty, если это важно), я могу напечатать

<code>npp {file}
</code>

и файл открывается правильно. но когда я делаю

<code>git rebase -i HEAD~5
</code>

npp открывается с новым пустым документом, а не с интерактивным файлом для управления перебазированием. Есть идеи, почему это происходит?

git --version
git version 1.7.9

последняя версия cygwin на машине с windows 7 и АЭС 5.9.8

также вот мой скрипт

<code>#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar \
  -nosession -noPlugin "$*"
</code>
Cygwin, интересно. Мой сценарий должен был использоваться с msysgit, в сеансе DOS или mwin bash. Для Cygwin, не должны использовать пути Cygwin?/cygdrive/c/Program Files (x86)/... VonC
im работает над идеей прямо сейчас, я думаю, что, поскольку это git-версия cygwin, возможно, проблема в том, что git передает ему путь cygwin, и npp не знает, что с ним делать. я смотрю на сценарии оболочки, которые вызывают cygpath для исправления. scphantm
ты это проверял Superuser.com / д / 168971/11855 CharlesB
posix включен, поэтому Windows-пути внутри Cygwin работают нормально, кроме того, я пробовал оба пути, но ни один из них не работал. scphantm

Ваш Ответ

4   ответа
0
#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}

Если путь пуст, пропустите пустой путь

Если путь не пуст, преобразовать в формат Windows.

Затем я установил эти переменные:

export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'

EDITOR позволяет скрипту работать с Git

GIT_EDITOR позволяет скрипту работать с Команды хаба

Источни

5

Полное решение без скрипта-обёртки.

Эти строки предполагают, что вы используете 64-битную версию Windows.

Выполните следующую команду из командной строки (Cygwin):

git config --global core.editor \
  "'$(cygpath -u "C:\Program Files (x86)\Notepad++\notepad++.exe")' \
  -multiInst -notabbar -nosession -noPlugin"

Это пример того, как твой .Gitconfig должно выглядеть как после команды:

[core]
    excludesfile = /home/Aternus/.gitignore_global
    autocrlf = input
    safecrlf = true
    editor = '/cygdrive/c/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
Это может работать только с версией Git для Windows, а не с Cygwin, потому что Git Cygwin будет выполнять Notepad ++ с путем Cygwin к файлу:notepad++.exe /home/user/repository/file.extension. Я уверен, что Windows Notepad ++ не найдет такой файл. Даже если у вас есть репо вне каталогов Cygwin, это будет выглядеть так:notepad++.exe /cygdrive/d/repository/file.extension. Dawid Ferenczy
Это решение не касается путей Linux ... Steven Penny
Когда я использую это, у меня открывается пустое окно блокнота, например, при интерактивной перебазировке ... ddinchev
14

и на этот

#!/bin/sh
'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar \
  -nosession -noPlugin "$(cygpath -w "$*")"

и это сработало отлично.

Я использую cygwin, и у меня возникли некоторые проблемы с \, поэтому я изменил это на: #! / Bin / sh 'C: / Apps / Notepad ++ / notepad ++. Exe' -multiInst -notabbar -nosession -noPlugin "$ (cygpath - w "$ *") "И теперь это работает для меня. Спасибо большое за это. jontejj
Что ты имеешь в виду под "оболочкой"? У меня проблема с Sublime Text, и я не могу понять это. Когда я иду делать коммит Git, он открывает пустой файл, который не существует. Он ищет такой путь: "C: \ c \ Users \ Jordan \ Desktop \ test \ .git \ COMMIT_EDITMSG" Jordan Harris
Отлично (+1). Я отредактировал оригинальный ответ / Stackoverflow.com вопросы / 1634161 / ...) чтобы включить ваше заключение (и ссылку на ваш ответ). VonC
3

ментами пути в стиле UNIX:

Cygrun.sh

#!/bin/sh
if test -z "$1"; then
    echo "Usage: $(basename "$0" .sh) program [argument]..."
    exit 1
fi

program=$1
shift
if test $# -ge 0; then
    IFS=$'\n'
    exec "$program" $(cygpath -w "[email protected]")
else
    exec "$program"
fi

Вот как я могу использовать это в моем git config (при условииcygrun является символической ссылкой наcygrun.sh где-то в ПУТИ):

[core]
    editor = cygrun 'C:/Program Files/Notepad2/Notepad2.exe'
[difftool "diffmerge"]
    cmd = cygrun 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' \"$LOCAL\" \"$REMOTE\"

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

Улучшенная версия моего скрипта, которая также может использоваться для запуска инструментов Cygwin с использованием путей Windows: Gist.github.com / ген-Павловск / e81c8e18327540f70df4e5296ff3dd15 Используйте-wпция @ для запуска инструментов Windows с путями UNIX и без опций (или-u) для запуска инструментов Cygwin с путями Windows. Gene Pavlovsky

Похожие вопросы