etiquetas - git tags best practices
¿Cómo puedo usar git-archive para incluir submódulos desde un repositorio simple? (5)
Estoy en el proceso de configurar un script de implementación. El proceso básico es:
- Impulsar cambios a un repositorio simple en el servidor
- Luego, basándose en nuevas etiquetas, se creará una nueva carpeta para el lanzamiento.
- Use git archive para mover los archivos al directorio de lanzamiento
- Ejecuta algunos scripts de migración y lo pone en vivo (si todo tiene éxito).
El problema es que mi repositorio contiene un submódulo, que no se pone en el archivo, y por lo tanto no se pone en el directorio de la versión.
He visto git-archive-all , pero eso no funciona en un repositorio simple.
Si no es posible, estoy considerando,
- hacer que el repositorio no sea sencillo, y actualizar la copia de trabajo, lo que me permitiría usar git-archive-todo. O
- tener un segundo repositorio simple del submódulo en el servidor, del cual podría obtener un archivo (tendría que verlo para asegurarse de que estoy obteniendo la revisión correcta).
Aquí está como unas pocas líneas:
prefix=$(basename "$(pwd -P)")
{
git ls-files
git submodule foreach --recursive --quiet /
''git ls-files --with-tree="$sha1" | sed "s#^#$path/#"''
} | sed "s#^#$prefix/#" | xargs tar -c -C.. -f "$prefix.tar.xz" --
Ejecute lo siguiente después del comando de archivo regular:
git submodule foreach ''cd REPO_ROOT/$path && git archive HEAD | tar -x -C TARGET_ROOT/$path''
Aquí el REPO_ROOT es donde se encuentra su repo y el TARGET_ROOT es donde pone su versión archivada. (Supongo que tiene una carpeta TARGET_ROOT en la que la versión expandida de la primera llamada de git archive
. Si desea un último zip / tar, puede tar / zip la carpeta final)
git submodule foreach
proporciona la variable $path
. Consulte la sección de git help submodule
módulo para obtener más información.
Esto debería hacer el truco: https://github.com/meitar/git-archive-all.sh/wiki
Si su submódulo está en un repositorio accesible desde el servidor, preferiría tener un enlace posterior a la recepción que
- actualice un repositorio completo (por lo tanto, un segundo repositorio junto al original), incluido el submódulo (
git submodule update --init
) -
git archive
de ese segundo repositorio (usted estaría seguro de obtener la versión correcta ya que el repositorio no incluido haría referencia a la versión correcta del submódulo)
Dado que el repositorio no desnudo contendría el repositorio principal y sus submódulos,git archive-all
podría detectar los subdirectorios.git
y archivar todo .
Si no se puede acceder al submódulo desde el servidor, eso significa:
- Necesita ser empujado en su propio repositorio en el servidor.
- El submódulo en el repositorio principal debe ser una referencia con una ruta relativa, para que el repositorio primario aún pueda recuperar dicho submódulo una vez que se presione en el servidor.
Yo uso este paquete de Python https://github.com/Kentzo/git-archive-all . Puedes instalarlo usando
pip install git-archive-all
En OSX, puedes instalarlo también usando brew install git-archive-all