usando Notepad ++ para git dentro de cygwin

Esta es una extensión de esta pregunta

¿Cómo uso Notepad ++ (u otro) con msysgit?

He hecho todas las combinaciones que puedo pensar para mi script de shell. cuando tengo mi console cygwin (estoy usando mintty si es que importa) puedo escribir

npp {file} 

y el file se abre correctamente pero cuando hago un

 git rebase -i HEAD~5 

npp se abre con un nuevo documento en blanco, no el file interactivo para controlar la rebase. alguna idea de por qué esto estaría sucediendo?

 git --version
 git versión 1.7.9

última versión de cygwin en una máquina con Windows 7 y NPP 5.9.8

también, aquí está mi script envoltorio

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

Estaba en lo cierto sobre mi problema con cygwin path. Cambié mi envoltorio de conchas a este

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

y funcionó a la perfección.

Aquí está la solución completa sin un script de envoltura .

Estas líneas asumen que estás usando la versión de 64 bits de Windows.

Ejecute el siguiente command desde el símbolo del sistema (Cygwin):

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

Este es un ejemplo de cómo debe verse su .gitconfig después del command :

 [core] excludesfile = /home/Aternus/.gitignore_global autocrlf = input safecrlf = true editor = '/cygdrive/c/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin 

Creé un script simple para ejecutar commands arbitrarios de Windows con arguments de ruta de estilo 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 "$@") else exec "$program" fi 

Así es como puedo usarlo en mi configuration de git (suponiendo que cygrun es un enlace simbólico a cygrun.sh en algún lugar de PATH):

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

De esta forma, un script puede adaptarse a muchos casos de uso similares, no es necesario crear un contenedor por separado cada vez. También puede ser conveniente usarlo desde la línea de command.

 #!/bin/dash -e if [ "$1" ] then k=$(cygpath -w "$1") elif [ "$#" != 0 ] then k= fi Notepad2 ${k+"$k"} 
  1. Si no hay path, no pasa el path

  2. Si la ruta está vacía, pase el path vacío

  3. Si la ruta no está vacía, conviértalo a formatting de Windows.

Luego establecí estas variables:

 export EDITOR=notepad2.sh export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' 
  1. EDITOR permite que el script funcione con Git

  2. GIT_EDITOR permite que el script funcione con commands de Hub

Fuente