Git Branching and Rebasing, Is My Script Safe?

Trabajo en un equipo donde realizamos todo nuestro desarrollo en las twigs de características, y cuando las funciones se completan las fusionamos de nuevo en nuestra twig principal (llamada desarrollo). Periódicamente realizaremos testings formales de usabilidad o demostraciones de nuestro software, por lo que creamos sucursales específicamente para esas testings en las que alteramos algunas partes de nuestra configuration para el entorno de testing antes de fusionarnos en nuestra twig de testings.

Como una persona súper perezosa, decidí guiar el process de creación de la twig de etapas, pero soy lo suficientemente nuevo como para darme count de que quiero estar seguro de que no he escrito una function que vuelva y me muerda más tarde. Así que aquí está mi function (todo esto está en mi .bashrc):

alias updateDev='git stash && git rebase -m -X theirs development && git stash pop' function newTest() { updateDev git checkout -b staging-test-$1 git push origin staging-test-$1 } 

Este es el uso previsto:

 newTest 1.3.7 

Y esto es lo que creo que está sucediendo:

  • Todos los cambios están escondidos
  • El "desarrollo" de la twig se verifica y se actualiza
  • Los cambios se vuelven a aplicar (Nota: ningún desarrollo ocurre directamente en el desarrollo, por lo que nunca debe haber cambios)
  • La twig de etapas se crea utilizando el número de versión pasado, que coincide con el contenido de la twig de desarrollo
  • La twig de etapas se envía a una nueva twig remota en el origen

¿Hay algo en este código que funcione de manera diferente a lo que esperaba, o se puede mejorar algo de este código para que funcione de manera más confiable?

¡Gracias por la ayuda!

Bueno, mucho depende de lo paranoico que quieras ser.

Una cosa obvia que podría hacer es verificar que haya al less, o exactamente, un argumento para la function, de modo que $1 expande a algo:

 case $# in 1) ;; *) echo "usage: newTest <name>" 1>&2; return 1;; esac 

Otra es asegurarse de que el nombre de la sucursal sea válido. Por git-check-ref-format :

 local ref ref=$(git check-ref-format --normalize "refs/heads/staging-test-$1") || { echo "'staging-test-$1' is not a valid branch name" 1>&2; return 1; } 

aunque entonces probablemente quieras quitar los refs / heads / off nuevamente:

 ref=${ref#refs/heads/} 

después de lo cual puede usar $ref para evitar repetir la parte de staging-test- .

Entonces: ¿y si ese nombre de twig ya existe? ¿Es eso un error, o debería ser reemplazado? (Para que sea un error, compruebe que git checkout -b falla, por ejemplo).

Entonces: ¿y si falla el escondite o la rebase? Usted dice "nunca debería haber cambios", pero presumiblemente el punto de save y aplicar el alijo es que hay algunos cambios. No es muy claro para mí lo que updateDev pretende hacer. No comtesting cuál es la twig actual, simplemente rebases la twig actual (lo que sea) en el development utilizando -X theirs (lo que significa que mantenemos "nuestra" versión de todo).

Además, supongamos que no hay cambios en el alijo, pero ya hay un alijo existente. En este caso, git stash saldrá con éxito después de imprimir No local changes to save . La updateDev commands updateDev ejecutará la rebase y, suponiendo que tenga éxito, se abrirá (aplicará y descartará) el alijo existente más alto. Esto es casi seguro que no es algo bueno.

Último: ¿y si git checkout -b y / o git push ? (Por ejemplo, debido a que se está quedando sin espacio en el disco o algo igualmente terrible, o simplemente porque el nombre proporcionado ya existía).