2012-03-23 6 views
9

Cuando agrego una nueva herramienta a git-gui, el cuadro de diálogo indica que podría usar algunas variables para pasarlas a la herramienta ($REVISION, $ARGS, $FILENAME).

¿Hay algún otro parámetro que esté no documentado (por ejemplo, el directorio de repos actual, etc.)? ¿Por qué no contenidos en el documentation del git-gui?

Mi caso de uso corriente es que tengo dos guiones que permiten a/desactivar un gancho pre-commit. Actualmente, tengo que abrir mi Explorador de Windows y hacer doble clic en los archivos por lotes, lo cual es un poco torpe. manera más fácil sería hacer eso directamente de git-gui ...

Como alternativa (de lado la pregunta), también estaría interesado en pasar por el gancho pre-confirmación (es decir, pasar al cometer --no-verify) de git-gui.

Respuesta

4

Al mirar el git-gui sources, encuentro (no presente en git-gui man page):

  • git-gui.sh:
    • $GITGUI_VERBOSE, para habilitar la carga detallado
    • SSH_ASKPASS, para sugerir nuestra aplicación de askpass, si ninguno se establece
    • GIT_DIR y GIT_WORK_TREE, para la configuración del repositorio
+0

veo 'set s "uso: $ :: argv0 $ :: $ subcomando :: subcommand_args"': tal vez haya una manera de pasar y ejecutar un comando sub git ... – VonC

+0

@eckes right, esa es la variable que git-gui toma en cuenta en el momento del lanzamiento. Sin embargo, 'GIT_DIR' y' GIT_WORK_TREE' todavía se deben establecer ('Herramientas -> Agregar') y se tienen en cuenta por el subcomando. No tengo nada en el '--no-verify' embargo. – VonC

3

Me personales extendida git-gui para que tengan herramientas de trabajo en varios archivos

En el archivo tools.tcl, añadir las siguientes 2 líneas

set env(GIT_GUITOOL) $fullname 
set env(FILENAME) $current_diff_path 
>> set env(FILENAMES) [array names selected_paths] 

y:

unset env(GIT_GUITOOL) 
unset env(FILENAME) 
>> unset env(FILENAMES) 

Uso $FILENAMES en lugar de $FILENAME en su herramienta, y la lista de archivos se transmitirá separados por espacios (muy útil para la creación de una herramienta como: rm $FILENAMES)

Nota sobre $FILENAME (y $FILENAMES) Git mecanismo de herramienta de interfaz gráfica de usuario no funciona con archivos que contienen espacios Traté citando a cada archivo, escribiendo

set env(FILENAMES) [string map { \{ \" \} \" } [array names selected_paths]] 

Pero Console::exec parece separar argumentos sobre el espacio y escapar de cada argumento.

+0

+1. suena interesante, además de las variables que identifiqué en mi respuesta. – VonC

1

dos notas a la solución anterior:

  1. selected_paths globales

para publicar no vacía $ NOMBRE DE ARCHIVO para el comando es necesario recurrir a declarar selected_paths tan global

  1. archivos que contienen espacios

para publicar archivos que contengan espacios, use "$ {FILENAMES [@]}" en lugar de $ FILENAMES simples.

Se puede ver cómo los pathes se envían a un comando mediante el comando printf '\ "% s \"' por ejemplo,

printf '\ "% s \"' NOMBRE DE ARCHIVO = "$ {NOMBRE DE ARCHIVO [@]}"

Cuestiones relacionadas