2011-02-07 16 views

Respuesta

38

Configuro una prueba para fallar. Esto es lo que tengo:

$ git merge newbranch 
Auto-merging test.txt 
CONFLICT (content): Merge conflict in test.txt 
Automatic merge failed; fix conflicts and then commit the result. 

$ echo $? 
1 

Git vuelve 0 cuando se fusione correctamente, como se esperaba.

+1

Problema es que los documentos para 'git merge' (en 1.7.4 - http://www.kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html) solamente mencionar el estado de devolución en un solo lugar (si usa "--ff-only" y no puede hacer una confirmación de reenvío rápido, devuelve un valor distinto de cero - no dice explícitamente lo que se devuelve si todo funciona o si hubo un conflicto de fusión –

+5

@Matt: los comandos de Git son muy buenos para devolver cero para el éxito y no cero (generalmente 1). De lo contrario, puede encadenar comandos juntos de forma segura con '&&'; así es como se implementan sus pruebas. – Cascabel

+12

Git no es bueno para devolver códigos de salida consistentes y sensibles. Por ejemplo, hacer commit de git sin cambios saldrá con el código 1, pero diablos, es * no * error. – pfalcon

41

En resumen, no. Verá el código de salida 1 para los errores y 0 para el éxito.

De un rápido grepping de la fuente, hay algunos de los esperados 127 y 128 para sus propósitos específicos (comando no encontrado, errores ya informados), y algunos códigos inusuales en algunos lugares, pero para la ejecución de la errores de fábrica, todo es exit(1).

+2

Sí, también he visto 127 y 128. De todos modos, gracias. – poymode

+1

Esto es muy molesto para la depuración de los enganches de confirmación. ¿Cuál es el punto de tener un código de salida en sus git hooks si una confirmación fallida siempre devolverá 1 en lugar de su código de salida de gancho? –

3

El error 128, sin mensaje de error de git, podría ser un problema general para "un problema inesperado".

Estaba obteniendo esto en operaciones que necesitaban modificar archivos bajo .git (por ejemplo, "git checkout -- myfile" para revertir un archivo modificado) por un usuario diferente. (En mi caso "chmod -R og+w .git" fijo que, naturalmente, no lo haga a menos que entienda las implicaciones de seguridad para su caso!)

9

Operando git status en un no-git repo devuelve 128, no 1, que es útil para determinando rápidamente si existe o no un repositorio de git.

Cuestiones relacionadas