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.
Cuando hice un 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?
pho79
2
@Thomas - Sí, por "no vi" quiero decir 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.
pho79
71
Si su repositorio más remoto es algo así como github, donde no tiene acceso, no puede ejecutar push, etc., puede hacerlo 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.
Altreus
44
@Altreus De hecho 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!
estani
3
@Altreus Si quieres todas las ramas, entonces puedes hacerlogit fetch origin *:*
JBert
71
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:
Para cambiar un repositorio desnudo existente a espejo, todo lo que necesita hacer es agregar 2 líneas al archivo de configuración de git en <REPO> .git / config. En la [remote "origin"]sección, agregue fetch = +refs/*:refs/*ymirror = true
Isaac Betesh
@IsaacBetesh Me salvaste el día :)
smc
54
La única solución además de recrear con git clone --mirrores de Gregor :
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.
¡Esto realmente me ayudó! Capistrano project / repo también usa esta configuración para permitir que One-liner git remote updatehaga el trabajo.
Minqi Pan
1
Si el control remoto tiene ramas actualizadas o eliminadas a la fuerza (y desea reflejar esos cambios), es posible que deba agregar --forcey, --prunerespectivamente, a la git fetchlínea.
Aunque no sé cuándo ocurre eso, si 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/*
antak
Esto es exactamente lo que estaba buscando. Esto funcionó perfectamente.
Maxime Rouiller
13
Después de mucho perder el tiempo, he descubierto que esto funciona para mí.
La tercera línea ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*') es la clave. Buena respuesta, gracias!
peterh - Restablecer Monica
2
Como dijo @peterh, la línea 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.
bromista
3
Agregue el repositorio simple como un repositorio remoto, luego use git push.
-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 )
Respuestas:
Si desea duplicar todos los objetos del repositorio principal, haga esto dentro del repositorio principal:
Alternativamente, haga una búsqueda dentro del repositorio desnudo:
No puede hacer un pull, porque un pull quiere fusionarse con
HEAD
un repositorio desnudo que no tiene.Puede agregarlos como controles remotos para ahorrar algo de escritura en el futuro:
Entonces puedes simplemente hacer
o
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!
fuente
git-fetch --all
dentro del repositorio desnudo, no vi las actualizaciones que había realizado en el repositorio principal, pero cuando las empujé desde el repositorio principalgit push --all <url-of-bare-repo>
sí las vigit log
. Presumiblemente hay una explicación simple para esto: ¿alguien puede explicarlo?git log
que no muestra estas actualizaciones en el repositorio. (Tampoco lo hacegit log --all
, y tampoco lo hace un repositorio de trabajo creado al clonar el repositorio desnudo, ya sea a travésgit log --all
o 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:master
dentro de su repositorio desnudo local. Esto buscará las cosas nuevas de la rama maestra de github y actualizará su rama maestra local.master:master
es 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:master
y 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:
Entonces podría ejecutar el siguiente comando en el repositorio reflejado para obtener las actualizaciones del repositorio principal:
Encontré esta solución al leer Mirror a Git Repository Pulling
fuente
[remote "origin"]
sección, agreguefetch = +refs/*:refs/*
ymirror = true
La única solución además de recrear con
git clone --mirror
es de Gregor :entonces puedes
git fetch
y verás las actualizaciones. Lo extraño es que antes de esto, a pesar de que hay unaremote
configuración, no tiene ramas en la listagit branch -a
.fuente
git remote update
haga el trabajo.--force
y,--prune
respectivamente, a lagit fetch
línea.Asumiendo:
Buscar con:
Nota:
--git-dir=foo.git
no es necesario sicd
primero va al directorio.fuente
origin
no está definido, siempre puede reemplazar laorigin
parte 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:
Cada vez que quiero sincronizar:
fuente
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 simplementegit fetch
y el repositorio se sincroniza con el remoto.Agregue el repositorio simple como un repositorio remoto, luego use
git push
.fuente
Para mí esta combinación funcionó:
-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 )
fuente