Pregunta

Cada vez que me comprometo, me preocupa que pude haber perdido una dependencia y estoy buscando la forma más sencilla para poner a prueba mi árbol git en forma aislada para asegurar lo que está en el índice git ( "por etapas") será, de hecho, de compilación / correr por su cuenta.

Existen dependencias de mi código en el sistema de archivos desde donde hago 'agregar git' y compilación de manera sencilla y ejecución de pruebas no garantiza que todo lo que CheckIN gustaría compilar / ejecutar si el árbol (o área de ensayo) fue la comprobación hacia fuera en un sistema de archivos limpios.

Yo podría tener una acumulación continua que comprobar después de la presentación, pero yo prefiero no tener ningún commit malos en la historia que luego tengo que parche. Por lo tanto, quiero una manera de crear un entorno aislado que incluye una extracción del árbol, así como la / área de ensayo de índice.

Una cosa que he considerado es el uso de git alijo dos veces, es decir:.

  1. Invocar 'git escondite' para guardar los archivos en el índice
  2. De alguna manera obtener una lista de los archivos no utilice control, 'git add' todos estos archivos, guardar un nuevo alijo
  3. Eliminar todos los archivos previamente sin seguimiento
  4. Restaurar el alijo originales
  5. Ahora debe tener un ambiente limpio que tiene sólo el código ya registramos y el código en el área de ensayo que puedo compilar y prueba.
  6. Una vez terminado, me restaurar el alijo de los archivos sin seguimiento y luego untrack que me dejen en la misma posición que estaba en un principio.

(Estos archivos sin seguimiento pueden ser útiles, pero no necesariamente cosas que desee comprobar en el repositorio - proyectos por ejemplo, Eclipse).

Tengo la sensación de que estoy manipulación excesiva de un problema sencillo, sin embargo.

¿Fue útil?

Solución

Instalar este script (o algo por el estilo - la mía es robado también) como un gancho pre-commit. Se copia el índice a un directorio temporal de trabajo y ejecuta una acumulación allí. Se captura archivos que te has perdido.

Sé que hay al menos una o dos preguntas para que frente a este problema exacto - prueba / validación del índice en lugar del directorio de trabajo en un gancho pre-commit - Parece que no puedo sino para encontrarlos derecha ahora.

(Para completar, tengo este script en mi repo como .git ganchos / pre-commit / test-la-índice; hay un par de otras secuencias de comandos no Vea abajo para lo que estoy usando como. .git / ganchos / pre-commit.)

#!/bin/sh
#
# Via: http://github.com/jwiegley/git-scripts/blob/master/pre-commit.sh
#

if [ ! $(git rev-parse --symbolic-full-name HEAD) = refs/heads/master ]; then
    exit 0
fi

# These are the locations I keep my temporary source and build trees in
TMPDIR=$HOME/code/myproject-pre-commit
MIRROR=$HOME/code/myproject-pre-commit-mirror

# Exit with status 1 if any command below fails
set -e

# Checkout a copy of the current index into MIRROR
git checkout-index --prefix=$MIRROR/ -af

# Remove files from MIRROR which are no longer present in the index
git diff-index --cached --name-only --diff-filter=D -z HEAD | \
    (cd $MIRROR && xargs -0 rm -f --)

# Copy only _changed files_ from MIRROR to TMPDIR, without copying timestamps.
# This includes copying over new files, and deleting removed ones.  This way,
# "make check" will only rebuild what is necessary to validate the commit.
rsync -rlpgoDOc --delete --exclude-from=.git-hooks/excludes $MIRROR/ $TMPDIR/

# Everything else happens in the temporary build tree
cd $TMPDIR

nosetests

exit 0

Esta es mi .git real / ganchos / pre-commit:

#!/bin/bash

set -e
for hook in $(find .git-hooks/pre-commit -perm /u+x,g+x,o+x -type f -not -name '*~' 2>/dev/null)
do
  echo "@@ Running hook: $(basename $hook)"
  $hook "$@"
done

Otros consejos

git stash -u --keep-index antes de la prueba, seguido por git stash pop después de la prueba.

Configuración de ignorar para los archivos importantes y simplemente borrar los que no son git clean -df importante

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top