2010-03-23 19 views
71

Quiero saber si hay una manera de establecer un marcador de forma predeterminada para el comando git. Específicamente, deseo configurar el indicador --abbrev-commit para que cuando ejecute git log, deseo ejecutar git log --abbrev-commit.Configuración de indicadores predeterminados de git en los comandos

A diferencia de la pregunta "is there any way to set a flag by default for a git command?", aparentemente no hay un indicador de configuración para agregar --abbrev-commit al registro de git. Además, el manual indica git que no puedo crear un alias: "To avoid confusion and troubles with script usage, aliases that hide existing git commands are ignored"

Mi tercera opción es inventar un nuevo alias como glog=log --abbrev-commit en mi archivo .gitconfig. Pero prefiero no inventar mi propia DSL con nuevos comandos.

¿Hay alguna otra manera de lograrlo para que el indicador abbrev-commit esté configurado de manera predeterminada?

+1

A partir de git 1.7.6 hay un indicador para controlar este comportamiento. Vea la respuesta por @underrun a continuación. – slacy

Respuesta

45

Desde git versión 1.7.6, git config ha obtenido una opción log.abbrevCommit que se puede establecer en verdadero. Por lo tanto, la respuesta es la actualización a al menos 1.7.6 (actual a partir de este escrito es 1.7.11.4) y uso:

git config --global log.abbrevCommit true 
+2

¿No cree que hay una opción para la línea en línea? – Zaz

+16

@Josh, seguro es: 'git config --global format.pretty oneline' – underrun

+1

Estoy aceptando esta respuesta. Es bueno ver que Git agregó esta configuración ya que escribí la pregunta hace casi cuatro años. –

2

Cada utilidad que utilizamos (svn, maven, git, ...) siempre se encapsula en .bat (en Windows, o .sh en Unix), para ofrecer a nuestros desarrolladores un directorio para agregar a su camino .

Si git está encapsulado en un script de contenedor, entonces ... todo es posible.

Pero eso sigue siendo una solución vinculada a la configuración del usuario, no vinculada a Git ni a git repo.

+0

¿Quiere decir que debería poder lograrlo agregando alias a mi .bash_profile? –

+0

@Jesper: esa es la idea, ya que su contenedor git.bat podrá detectar qué comando de Git quiere ejecutar y podría agregar cualquier opción que desee. – VonC

30

No existe un mecanismo genérico en git para establecer los argumentos predeterminados para los comandos.

Puede utilizar git aliases para definir un nuevo comando con los argumentos necesarios:

git config alias.lg "log --oneline" 

continuación, puede ejecutar git lg.

Algunos comandos también tienen configuraciones para cambiar su comportamiento.

+9

Quiero evitar crear mi propia sintaxis, así que preferiría una solución donde no utilizo 'git lg' pero' git log' –

+0

¿por qué? ¿Qué diferencia haría? – hasen

+35

La diferencia más importante es que no quiero introducir la "sintaxis de Jesper git" en mi sistema. Quiero que yo (y otros que usen mi máquina) use los comandos genéricos. Además, esto hará que mi trabajo sea más rápido en otras máquinas: no me preocupa escribir accidentalmente "git lg" y obtener un error "no encontrado" –

41

Puede utilizar un formato personalizado para tener git log imitan --abbrev-commit por defecto:

git config format.pretty "format:%h %s" 
+3

¡Interesante! ¡Gracias por la respuesta que me parece muy útil! –

+0

Genial, esta es fácilmente la mejor respuesta. – duane

+0

También puede usar colores durante el formateo: "% C (amarillo)% h% Creset% s" se presentará como git log --oneline con colores. – Avner

9

VonC ya ha insinuado en una envoltura del shell en su respuesta; aquí está mi implementación Bash de tal envoltorio. Si pones esto, p. Ej. en su .bashrc, su shell interactivo admitirá la anulación de los comandos incorporados de Git, así como los alias en mayúsculas.

# Git supports aliases defined in .gitconfig, but you cannot override Git 
# builtins (e.g. "git log") by putting an executable "git-log" somewhere in the 
# PATH. Also, git aliases are case-insensitive, but case can be useful to create 
# a negated command (gf = grep --files-with-matches; gF = grep 
# --files-without-match). As a workaround, translate "X" to "-x". 
git() 
{ 
    typeset -r gitAlias="git-$1" 
    if 'which' "$gitAlias" >/dev/null 2>&1; then 
     shift 
     "$gitAlias" "[email protected]" 
    elif [[ "$1" =~ [A-Z] ]]; then 
     # Translate "X" to "-x" to enable aliases with uppercase letters. 
     translatedAlias=$(echo "$1" | sed -e 's/[A-Z]/-\l\0/g') 
     shift 
     "$(which git)" "$translatedAlias" "[email protected]" 
    else 
     "$(which git)" "[email protected]" 
    fi 
} 

continuación Puede anular git log poniendo un script llamado git-log lugar de su PATH:

#!/bin/sh 
git log --abbrev-commit "[email protected]" 
+0

Esto funciona como un regalo, muchas gracias – Clive

4

Tengo un problema similar (muchas de las opciones por defecto para los comandos de Git son mudas). Aquí está mi enfoque. Crear un script llamado 'grano' (o lo que sea) en su camino, de la siguiente manera:

#!/bin/bash 
cmd=$1 
shift 1 
if [ "$cmd" = "" ]; then 
    git 
elif [ $cmd = "log" ]; then 
    git log --abbrev-commit [email protected] 
elif [ $cmd = "branch" ]; then 
    git branch -v [email protected] 
elif [ $cmd = "remote" ]; then 
    git remote -v [email protected] 
else 
    git $cmd [email protected] 
fi 

muy sencillo de leer y mantener, en caso de tener que compartirlo con Bash no expertos.

+0

¿Realmente quieres que "git remote blah" llame "git branch blah"? Estoy usando una variante de esto donde puse git antes en la ruta y luego llamo explícitamente a/usr/bin/git en mi script. Sí, probablemente esto rompa algo. – LovesTha

Cuestiones relacionadas