Esto funciona con nuestras bibliotecas que ejecutan GIT v1.7.1, donde tenemos un repositorio de paquetes DEV y un repositorio de paquetes LIVE. Los repositorios en sí mismos no son más que un shell para empaquetar los activos de un proyecto. Todos los submódulos.
LIVE nunca se actualiza intencionalmente, sin embargo, pueden ocurrir archivos de caché o accidentes, dejando el repositorio sucio. Los submódulos nuevos agregados al DEV también deben inicializarse dentro de LIVE.
Repositorio de paquetes en DEV
Aquí queremos obtener todos los cambios ascendentes que aún no conocemos, luego actualizaremos nuestro repositorio de paquetes.
# Recursively reset to the last HEAD
git submodule foreach --recursive git reset --hard
# Recursively cleanup all files and directories
git submodule foreach --recursive git clean -fd
# Recursively pull the upstream master
git submodule foreach --recursive git pull origin master
# Add / Commit / Push all updates to the package repo
git add .
git commit -m "Updates submodules"
git push
Repositorio de paquetes en LIVE
Aquí queremos extraer los cambios comprometidos con el repositorio DEV, pero no los cambios ascendentes desconocidos.
# Pull changes
git pull
# Pull status (this is required for the submodule update to work)
git status
# Initialize / Update
git submodule update --init --recursive
git reset --hard
no funciona, primero intente especificar la rama remota congit reset --hard origin/<branch_name>
.