Sincronizar dos repositorios de git

Sincronizar dos repositorios con todas sus ramas es fácil pero encontrarlo en Google es realmente difícil.

Nosotros lo usamos en jobs de Jenkins para sincronizar los repositorios de nuestro gitlab con los del servidor de turno de git del cliente.

Pasos:

  1. Crear un repositorio
  2. Agregar remote 1
  3. Agregar remote 2
  4. Bajar remote 1
  5. Bajar remote 2
  6. Subir remote 1
  7. Subir remote 2
  8. Subir remote 1

Y en código

git init repositorio
git remote add origin https://git.server1.com/usuario/repositorio.git
git remote add upstream https://git.server2.com/usuario/repositorio.git
git fetch -a origin
git fetch -a upstream
git push upstream "refs/remotes/origin/*:refs/heads/*"
git push origin "refs/remotes/origin/*:refs/heads/*"

solución de conflictos

Si da algún conflicto del tipo:

 ! [rejected]        origin/develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://git.server1.com/usuario/repositorio.git'
consejo: Updates were rejected because a pushed branch tip is behind its remote
consejo: counterpart. Check out this branch and integrate the remote changes
consejo: (e.g. 'git pull ...') before pushing again.
consejo: See the 'Note about fast-forwards' in 'git push --help' for details.

Vas al repositorio que tu sepas más desactualizado, eliminas la rama que tenga el contenido más viejo y le das a actualizar o haces un merge manual y o bien reduces el tiempo de sincronización entre repositorios o bien usas solo uno de los dos.

En mi caso el job de Jenkins se ejecuta cada minuto y no estamos teniendo conflictos.

AdjuntoTamaño
Image icon git_logo.png4.2 KB