2012-04-18 22 views
7

Ésta es una extensión de esta preguntacon el Notepad ++ para git dentro cygwin

How do I use Notepad++ (or other) with msysgit?

he hecho todas las combinaciones que se me ocurre para mi script de shell. cuando tengo mi consola Cygwin (im utilizando mintty si importa) que puedo escribir

npp {file} 

y el archivo se abre correctamente. pero cuando hago una central nuclear

git rebase -i HEAD~5 

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

 
git --version 
git version 1.7.9 

versión más reciente de cygwin en una máquina Windows 7 y CN 5.9.8

También, aquí está mi guión envoltorio

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

Cygwin, interesante. Mi script se debía usar con msysgit, en una sesión de DOS o mwin bash. Para Cygwin, ¿no debería estar utilizando las rutas cygwin? '/ cygdrive/c/Program Files (x86)/...' – VonC

+0

posix está activado así que las rutas de Windows dentro de cygwin funcionan bien, además, lo intenté en ambos sentidos y tampoco funcionó. – scphantm

+0

has comprobado este http://superuser.com/q/168971/11855 – CharlesB

Respuesta

14

estaba en lo cierto acerca de mi problema de ruta cygwin. Cambié mi envoltorio de shell a este

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

y funcionó a la perfección.

+1

Excelente (+1). He editado por respuesta original (http://stackoverflow.com/questions/1634161/how-do-i-use-notepad-or-other-with-msysgit/1635493#comment13111374_1635493) para incluir su conclusión (y la referencia atrás responder). – VonC

+1

estoy usando cygwin y tenía algunos problemas con el \ así que cambió por: #/bin/sh 'C:/Aplicaciones/Notepad ++/Notepad ++ exe.' -multiInst -notabbar -nosession -noPlugin " $ (cygpath -w "$ *") " Y ahora me funciona. Muchas gracias por esto. – jontejj

+0

¿Qué quiere decir con "envoltorio de shell" aquí? Estoy teniendo este problema con Sublime Text y no puedo resolverlo. Cuando voy a hacer una confirmación de Git, abre un archivo vacío que no existe. Busca una ruta como esta: "C: \ c \ Users \ Jordan \ Desktop \ test \ .git \ COMMIT_EDITMSG" –

5

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

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

Ejecutar el siguiente comando desde la línea de comandos (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 su .gitconfig debe ser similar después del comando:

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

Esta solución no se ocupa de las rutas de linux ... –

+3

Esto podría funcionar solo con la versión de Windows Git, no Cygwin's, porque Cygwin's Git ejecutaría Notepad ++ con la ruta de acceso de Cygwin al archivo: 'notepad ++. Exe/home/user/repository/file.extension'. Estoy seguro de que Windows Notepad ++ no encontrará ese archivo. Incluso si tiene su repositorio fuera de los directorios de Cygwin, se vería así: 'notepad ++. Exe/cygdrive/d/repository/file.extension'. –

+1

Cuando uso esto, obtengo una ventana de bloc de notas vacía abierta cuando realizo rebase interactivo, por ejemplo ... – ddinchev

3

He creado una secuencia de comandos simple para ejecutar comandos de Windows arbitrarios con argumentos 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 "[email protected]") 
else 
    exec "$program" 
fi 

es cómo lo puedo usar en mi git config Aquí (suponiendo 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\" 

esta manera un script puede adaptarse a muchos casos de uso similares, no hay necesidad de crear un contenedor por separado cada vez. También puede ser conveniente usarlo desde la línea de comando.

+0

Una versión mejorada de mi script, que también se puede usar para ejecutar herramientas de Cygwin usando rutas de Windows: https: //gist.github .com/gene-pavlovsky/e81c8e18327540f70df4e5296ff3dd15 Utilice la opción '-w' para ejecutar las herramientas de Windows con rutas de acceso de UNIX, y sin opciones (o' -u') para ejecutar las herramientas de Cygwin con las rutas de Windows. –

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

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

  3. Si la ruta no está vacío, convertir a formato de Windows.

Entonces establecer estas variables:

export EDITOR=notepad2.sh 
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' 
  1. editor permite la escritura para trabajar con Git

  2. GIT_EDITOR permite secuencia de comandos para trabajar con Hub commands

Source