Estoy tratando de mantener una copia vacía de un repositorio de Git y tener algunos problemas para mantener las ramas de seguimiento remoto actualizadas. Creo las ramas de seguimiento remoto de esta manera:¿Cómo obtengo una rama de seguimiento remoto para estar al día con el origen remoto en un repositorio de Git desnudo?
git branch -t 0.1 origin/0.1
Esto parece hacer lo que tengo que hacer en ese momento. Sin embargo, si realizo cambios en origin
y luego llevo con el repositorio desnudo, las cosas comienzan a desmoronarse. Mi flujo de trabajo es el siguiente:
git fetch origin
Parece que todas las confirmaciones vienen en ese punto, pero no se actualiza mi copia local de 0,1. Puedo ver que los cambios han sido introducidos en el repositorio haciendo lo siguiente:
git diff 0.1 refs/remotes/origin/0.1
¿Qué tengo que hacer para conseguir mi sucursal de seguimiento actualizado con las actualizaciones del mando a distancia? Siento que me falta un paso o una bandera en algún lado.
Actualizado: Aclaración adicional
Normalmente uno empujar en un repositorio desnudo, en lugar de ejecutar git fetch desde el interior de la misma. Si puede hacer eso, la vida será mucho más fácil.
Aquí hay un poco de aclaración sobre el flujo de trabajo.
El repositorio de git público del proyecto está alojado en GitHub. Estoy administrando el proyecto (wiki, issues, forums) usando Redmine. Redmine requiere un repositorio local para operar. Cuando GitHub recibe cambios, hace ping a Redmine. Redmine luego intenta obtener cambios de su origen (GitHub).
Esto funciona muy bien si solo estoy trabajando con el maestro, pero no funcionaba con mis ramas de seguimiento. Los cambios se estaban importando pero no se estaban enumerando en la sucursal del navegador de repositorios de Redmine porque las sucursales locales no se estaban actualizando.
Estoy seguro de que podría haberlo solucionado de otra manera, pero encontrar una solución (genérica) para poner en marcha las ramas de seguimiento definitivamente fue mi preferencia ya que la mayoría de los complementos relacionados con git para Redmine suponen cosas como "git fetch" origen "es todo lo que se necesita hacer.
Ver respuesta aceptada para la solución completa. La solución --mirror
parece ser exactamente lo que se necesita en este caso.
'git merge' siempre requiere un árbol de trabajo, en su lugar debe usar' git update-ref' en un repositorio simple.Creo que tienes razón en que un espejo parece una mejor solución. Puede valer la pena agregar un no sobre 'git clone --mirror'. –
@Charles Bailey: la razón por la que pensé que podría ser un error es que en el origen de builtin-merge.c hay un comentario que comienza "En este punto, necesitamos una combinación real ..." después del punto donde un rápido hacia adelante se habría hecho - No creo que el índice o el árbol de trabajo se necesite hasta ese momento. Eliminaré esa observación, de todos modos. –
Puedes preguntar en la lista de correo de git, pero no estoy seguro de que se considere un error. Creo que, en general, es más consistente tener una distinción clara entre los comandos que no requieren un árbol de trabajo y los que sí lo hacen. Tener un comando que _might_ necesita un árbol de trabajo es una interfaz más compleja que podría causar algunos malentendidos. –