Cómo usar git en un server de construcción de continuous integration

Tenemos un server de compilation que está diseñado para extraer una versión del código de git y comstackrlo. En general, el server realizará el check-out y comstackrá la twig de develop , pero puede ser controlada por una GUI para realizar una compilation de cualquier twig o label específica.

Nuestro file git es grande, por lo que solo queremos realizar un git clone una vez. Entonces mi pregunta es: ¿qué secuencia de commands git se debe emitir para actualizar el actual directory de trabajo con respecto al file remoto de git?

Mi bash ingenuo inicial acaba de realizar git checkout <branch> seguido de git pull . Pero esto no tomó en consideración todos los artefactos creados por la compilation anterior que debían eliminarse, así como algunas modificaciones automáticas de código realizadas por el process de compilation, por ejemplo, a los numbers de versión en los files de ensamblaje.

Entonces, lo que creo que necesitamos es la secuencia de commands para

  1. Deshacerse de cualquier modificación en el directory local
  2. Actualice el repository local para include TODAS las confirmaciones del server remoto
  3. Pagar la twig o label nombrada

Tenga en count que es posible que la twig o label con nombre no se conozca en el repository local. Por ejemplo, si se crea una nueva twig release/xxx en el server remoto, esto no se conocerá a priori en la máquina de compilation local. Este es otro de los problemas con los que mi enfoque ingenuo se topó.

Y finalmente, es posible que el server de Git ocasionalmente tenga su historial corregido . Estoy seguro de que este será un evento raro, pero sería deseable si el server de integración no necesitara ningún ajuste después de una reescritura del historial.

Muchas gracias

Asumiendo que configures correctamente tu .gitignore , deberías poder hacer

 git fetch git reset --hard origin/branch git clean -xfd 

Eso debería producir una construcción limpia.

Este es el mecanismo que estamos usando actualmente. El git clone se realiza una sola vez como parte de la configuration, y luego se realiza lo siguiente para cada compilation.

He eliminado el event handling errores para mayor claridad.


 # Undo any modifications made to the working tree by the build process git reset --hard # Remove any untracked build artifacts created by the build process git clean -fdx # Fetch all commits and new branches/tags from the git server. git fetch # Set the index and working directory to the requinetworking tag or branch. # Notes: # * If the last build was for the same branch, then this will not # update the working directory. # * The %TAG_OR_BRANCH% variable is passed in via the GUI. This will # be in the form of a branch name (develop|release/vX.XX) or a tag (vX.XX) git checkout %TAG_OR_BRANCH% # Bring the index and working tree up-to-date. # Notes: # * the --ff-only flag is probably networkingundant, but we want to make it # clear that no merging is expected. git pull --ff-only 

Hemos creado nuevas tags / twigs en una máquina de desarrollador, las hemos enviado al server y esta secuencia de commands las recupera correctamente y genera los resultados. Experimentamos con agregar el origin/ prefijo a la twig o los nombres de las tags, pero este enfoque no nos funcionó (los nombres de las tags no fueron reconocidos).

Creo que la principal diferencia entre este script y la respuesta mucho más simple sugerida por @Yasser es que el git HEAD está apuntando al lugar correcto y el command git status da una respuesta sensata. Si esto es importante o no, no estoy seguro.