66 votos

Puede Git gancho agregar automáticamente los archivos a la confirmación?

Me gustaría añadir un archivo generado de forma automática a la misma cometer el uso de un pre - o post-commit gancho en Git, depende de los archivos que fueron modificados en el que se comprometen. Cómo iba yo a ir sobre esto?

He intentado esto como un gancho pre-confirmación, pero no hubo suerte:

#!/bin/sh
files=`git diff --cached --name-status`
re="<files of importance>"
if [[ $files =~ $re ]]
then
  echo "Creating files"
  exec bundle exec create_my_files
  exec git add my_files
  exec git commit --amend -C HEAD
fi

Este correctamente añade el repositorio, pero no agregarlos a la confirmación. También he probado con los dos últimos exec líneas en un post-commit gancho junto con la pre-confirmación de inspección, pero no es bueno tampoco.

53voto

bitluck Puntos 61

Desde git add no estaba trabajando para mí en un pre cometer, he seguido la marca de la idea de usar una .cometer archivo y dividir el proceso en el pre - y post-commit.

Aquí está el código que debe ser fácil de entender

En el pre-commit:

  • Toque un archivo .cometer o algo. (asegúrese de agregar a este .gitignore)
#!/bin/sh 
echo 
touch .commit 
exit

En el post-commit:

si .cometer existe usted sabe un commit acaba de tener lugar, sino de una post-commit no se ha ejecutado todavía. Así, usted puede hacer su generación de código aquí. Además, la prueba para .cometer y si existe:

  • agregar los archivos
  • commit --amend -C HEAD --no-verificar (evitar el bucle)
  • eliminar .cometer archivo
#!/bin/sh
echo
if [ -a .commit ]
    then
    rm .commit
    git add yourfile
    git commit --amend -C HEAD --no-verify
fi
exit

Espero que esto hace que sea más fácil para las personas con pocos bash conocimiento para seguir la marca de la idea.

34voto

Jim Garvin Puntos 3318

Es posible hacer lo que quiera con pre-commit ganchos. Podemos hacer algo similar para un heroku de implementación (compilación de coffeescript a javascript). La razón de su script no funciona es porque utiliza el exec comando incorrectamente.

Desde el hombre de la página:

El exec builtin se utiliza para reemplazar la que se ejecuta actualmente conchas de proceso de imagen con un nuevo comando. En la finalización exitosa, exec nunca se devuelve. exec no puede ser utilizado dentro de una tubería.

Sólo su primer comando exec ejecuta. Después de que su guión está básicamente terminado.

Dar algo como esto una prueba (como un gancho pre-confirmación):

#!/bin/sh
files=`git diff --cached --name-status`
re="<files of importance>"
if [[ $files =~ $re ]]
then
  echo "Creating files"
  bundle exec create_my_files
  git add my_files
fi

10voto

Mark Puntos 13

Usted podría utilizar una combinación de pre y post cometer secuencia de comandos.

En el pre-commit:

  • Toque un archivo .cometer o algo. (asegúrese de agregar a este .gitignore)

En el post-commit:

si .cometer existe usted sabe un commit acaba de tener lugar, pero un post-commit no se ha ejecutado todavía. Así, usted puede hacer su generación de código aquí. Además, la prueba para .cometer y si existe:

  • agregar los archivos
  • commit --enmendar -C HEAD --no-verificar (evitar el bucle)
  • eliminar .cometer archivo

Este es a grandes rasgos el proceso que se usa para almacenar un .archivo de metadatos en el repositorio generados a partir de metastore.

Si alguien sabe una mejor manera soy todo oídos, pero parece que funciona por ahora.

10voto

jaydee3 Puntos 6967
#!/bin/sh
#
#  .git/hooks/pre-commit
#

git add file.xyz

Esto funcionó muy bien para mí. Será parte de la actual cometer.

git version 1.7.12.4 (Apple Git-37)

2voto

rfunduk Puntos 15267

Cómo redactar post-commit secuencia de comandos en lugar de la cual se genera tus archivos, y luego tienen que hacer (algo a lo largo de las líneas de) git add my_files; git commit --amend.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X