Creé un repositorio simple para publicar mi repositorio, pero no puedo entender cómo actualizar el repositorio simple con el estado actual del repositorio principal.
Creé un repositorio simple para publicar mi repositorio, pero no puedo entender cómo actualizar el repositorio simple con el estado actual del repositorio principal.
Respuestas:
Si desea duplicar todos los objetos del repositorio principal, haga esto dentro del repositorio principal:
git push --all <url-of-bare-repo>
Alternativamente, haga una búsqueda dentro del repositorio desnudo:
git fetch <url-of-main-repo>
No puede hacer un pull, porque un pull quiere fusionarse con HEADun repositorio desnudo que no tiene.
Puede agregarlos como controles remotos para ahorrar algo de escritura en el futuro:
git remote add <whatever-name> <url-of-other-repo>
Entonces puedes simplemente hacer
git push --all <whatever-name>
o
git fetch <whatever-name>
dependiendo del repositorio en el que se encuentre. Si <whatever-name>es así origin, incluso puede dejarlo por completo.
Descargo de responsabilidad: no soy un git guru. Si digo algo mal, ¡me gustaría ser iluminado!
Actualización: ¡Lee los comentarios!
git-fetch --alldentro del repositorio desnudo, no vi las actualizaciones que había realizado en el repositorio principal, pero cuando las empujé desde el repositorio principal git push --all <url-of-bare-repo>sí las vi git log. Presumiblemente hay una explicación simple para esto: ¿alguien puede explicarlo?
git logque no muestra estas actualizaciones en el repositorio. (Tampoco lo hace git log --all, y tampoco lo hace un repositorio de trabajo creado al clonar el repositorio desnudo, ya sea a través git log --allo simplemente mirando los nuevos archivos que deberían aparecer allí). Es una prueba bastante rápida de ver por ti mismo. Principalmente tengo curiosidad por saber qué me estoy perdiendo.
git fetch -q origin master:masterdentro de su repositorio desnudo local. Esto buscará las cosas nuevas de la rama maestra de github y actualizará su rama maestra local.
master:masteres lo que se requiere para mover HEAD hacia adelante al del repositorio remoto. En mi caso, debido a un problema, no pude conectarme a nuestro repositorio desnudo porque faltaba git. Hasta que se resuelva, hago un túnel inverso y busco en el repositorio central usando: git fetch ssh://localhost:8765/... master:mastery funciona de maravilla. ¡Gracias!
git fetch origin *:*
Creé un repositorio usando el siguiente comando
git clone --bare <remote_repo>
Luego intenté actualizar el clon desnudo usando la respuesta de Thomas, pero no funcionó para mí. Para que el repositorio simple se actualice (que es lo que creo que Let_Me_Be preguntaba), tuve que crear un repositorio espejo:
git clone --mirror <remote_repo>
Entonces podría ejecutar el siguiente comando en el repositorio reflejado para obtener las actualizaciones del repositorio principal:
git fetch --all
Encontré esta solución al leer Mirror a Git Repository Pulling
[remote "origin"]sección, agregue fetch = +refs/*:refs/*ymirror = true
La única solución además de recrear con git clone --mirrores de Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
entonces puedes git fetchy verás las actualizaciones. Lo extraño es que antes de esto, a pesar de que hay una remoteconfiguración, no tiene ramas en la lista git branch -a.
git remote updatehaga el trabajo.
--forcey, --prunerespectivamente, a la git fetchlínea.
Asumiendo:
$ git clone --bare https://github.com/.../foo.git
Buscar con:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Nota: --git-dir=foo.gitno es necesario si cdprimero va al directorio.
originno está definido, siempre puede reemplazar la originparte con la ruta / url a su repositorio original. Por ejemplo$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Después de mucho perder el tiempo, he descubierto que esto funciona para mí.
Una vez:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Cada vez que quiero sincronizar:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') es la clave. Buena respuesta, gracias!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'es la respuesta. Después de presionar este comando, puedo simplemente git fetchy el repositorio se sincroniza con el remoto.
Agregue el repositorio simple como un repositorio remoto, luego use git push.
Para mí esta combinación funcionó:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u parámetro para buscar era necesario, de lo contrario me sale el mensaje de error: "Negarse a buscar en la rama actual refs / heads / master del repositorio no desnudo" (ver también https://stackoverflow.com/a/19205680/4807875 )