tipos tag practices etiquetas delete create best git deployment git-submodules git-bare

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:

  1. Impulsar cambios a un repositorio simple en el servidor
  2. Luego, basándose en nuevas etiquetas, se creará una nueva carpeta para el lanzamiento.
  3. Use git archive para mover los archivos al directorio de lanzamiento
  4. 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,

  1. hacer que el repositorio no sea sencillo, y actualizar la copia de trabajo, lo que me permitiría usar git-archive-todo. O
  2. 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.



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.