Estoy en el process de configurar un script de implementación. El process básico es:
El problema es que mi repository contiene un submodule que no se coloca en el file y, por lo tanto, no se coloca en el directory de publicación.
He visto git-archive-all , pero eso no funciona en un repository simple.
Si no es posible, estoy considerando,
Si su submodule está en un repository accesible desde el server, preferiría tener un gancho de post-recepción que
git submodule update --init
) git archive
de ese segundo repository (estarías seguro de get la versión correcta, ya que el repository non-bare haría reference a la versión correcta del submodule) git archive-all
podría detectar los subdirectorys .git
y archivaría todo . Si el submodule no es accesible desde el server, eso significa:
Esto debería hacer el truco: https://github.com/meitar/git-archive-all.sh/wiki
Aquí es como un trazador de 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" --
Yo uso este package de Python https://github.com/Kentzo/git-archive-all . Puedes instalarlo usando
pip install git-archive-all
En OSX, puede instalarlo también usando brew install git-archive-all
Ejecute lo siguiente después del command regular de file:
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 coloca su versión archivada. (Supongo que tiene una carpeta TARGET_ROOT donde está la versión expandida de la primera llamada de git archive
. Si desea un git archive
zip / tar final, puede tar / zip la carpeta final)
git submodule foreach
proporciona la variable $path
. Consulte la sección de git help submodule
para get más detalles.