Cuando ingresa a un repositorio de git (compartido), no actualiza los archivos de trabajo de ese repositorio. Básicamente porque los archivos de trabajo podrían estar sucios y en ese caso tendrías que fusionarte, y para eso necesitas tener acceso total al shell allí, lo que puede no ser el caso en general.
Si desea que se revise el "maestro" más reciente del repositorio compartido, puede organizarlo escribiendo un enlace de actualización posterior. Daré un ejemplo de uno a continuación que utilizo para verificar el subdirectorio "ui" y ponerlo a disposición de Apache.
Sin embargo, diré que creo que su proceso podría mejorarse. Por lo general, los desarrolladores necesitan servidores personales en los que puedan probar antes de pasar a un punto compartido: de lo contrario, el repositorio compartido probablemente sea terriblemente poco confiable. Considere, si presiono un cambio y no funciona, ¿es ese mi cambio lo que lo rompió o un efecto secundario de alguien más?
OK, yo uso esto como un gancho posterior a la actualización
#!/bin/sh
# Should be run from a Git repository, with a set of refs to update from on the command line.
# This is the post-update hook convention.
info() {
echo "post-update: [email protected]"
}
die() {
echo "post-update: [email protected]" >&2
exit 1
}
output_dir=..
for refname in "[email protected]"; do
case $refname in
refs/heads/master)
new_tree_id=$(git rev-parse $refname:ui)
new_dir="$output_dir/tree-$new_tree_id"
if [ ! -d "$new_dir" ]; then
info "Checking out UI"
mkdir "$new_dir"
git archive --format=tar $new_tree_id | (cd $new_dir && tar xf -)
fi
prev_link_target=$(readlink $output_dir/current)
if [ -n "$prev_link_target" -a "$prev_link_target" = "tree-$new_tree_id" ]; then
info "UI unchanged"
else
rm -f $output_dir/current
ln -snf "tree-$new_tree_id" "$output_dir/current"
info "UI updated"
title=$(git show --quiet --pretty="format:%s" "$refname" | \
sed -e 's/[^A-Za-z][^A-Za-z]*/_/g')
date=$(git show --quiet --pretty="format:%ci" "$refname" | \
sed -e 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\) \([0-9]*\):\([0-9]*\):\([0-9]*\) +0000/\1\2\3T\4\5\6Z/')
ln -s "tree-$new_tree_id" "$output_dir/${date}__${title}"
fi
;;
esac
done
Como se ha mencionado, esto sólo comprueba hacia fuera el subdirectorio "ui". Ese es el bit ": ui" que establece new_tree_id. Solo saca el ": ui" (o cambia a "^ {tree}") para ver todo.
Las salidas van en el directorio que contiene el git repo, controlado por output_dir. El script espera ejecutarse dentro del git repo (que a su vez se espera que esté vacío): esto no es muy limpio.
Las salidas se colocan en directorios "tree-XXXX" y un enlace simbólico "actual" se las arregla para apuntar a la más reciente. Esto hace que el cambio de uno a otro sea atómico, aunque es poco probable que tome tanto tiempo que es importante.También significa revertir la reutilización de los archivos antiguos. Y también significa que consume espacio en disco a medida que avanzas en las revisiones ...
+1 El git-not-updating-remote-working-tree es un problema secundario. Los desarrolladores simplemente DEBEN tener una configuración de prueba de trabajo local (honestamente, con SQLite y el servidor de desarrollo django no es difícil). –
¿Podría vincularse a recursos sobre cómo configurar el flujo de trabajo de desarrollo que recomienda para principiantes de Django como yo? –