2012-06-12 13 views
7

Estoy trabajando en un proyecto y tengo un gpo repo central. Este proyecto es un esqueleto para ser una referencia para una serie de horquillas.Git Tracking Upstream

¿Es posible configurar mi repositorio de trabajo local para un fork para rastrear la central del proyecto como origen y rastrear el maestro del esqueleto como una rama separada llamada upstream rastreando el maestro del esqueleto para seleccionar cambios al esqueleto?

supongo que quieren mi flujo de trabajo a ser algo así como:

Crear Esqueleto Esqueleto Tenedor >> >> Esqueleto tirones Cambios de Tenedor 2 >> 1 Tenedor tirones Cambios de Esqueleto

¿Hay un mejor proceso para hacer lo que he descrito?

Respuesta

7

Leer la página "Step 3: Configure remotes" de la GitHub "Tenedor un Repo" (Sé que no ha mencionado GitHub, pero todavía es relevante)

  • origin es la dirección a distancia de su tenedor, que el clon local puede tirar de/push a
  • upstream es la dirección remota de tu repositorio original, Skeleton (se puede añadir con un git remote add upstream https://..../Skeleton.git)

Así aguas arriba no es una rama.

Pero se puede definir una rama local que tendrá para la rama ascendente del maestro rama de seguimiento remoto de cesión temporal aguas arriba, con git branch:

git branch --set-upstream upstream_master upstream/master 

Sin embargo, usted no necesita una sucursal local, especialmente si nunca hará nuevos commits: puedes comparar tu master directamente con upstream/master, después de git fetch upstream, seleccionando lo que necesites desde upstream/master.

+0

Eso está en la línea de lo que estaba tratando de hacer que provocó esta pregunta. El comando 'git branch --set-upstream upstream_master upstream/master' no funcionará directamente después de un' git remote add upstream/srv/repos/git/skeleton.git'. ¿Porqué es eso? Accidentalmente corrigí el problema tratando de solucionarlo. No deseaba exactamente ejecutar 'git fetch upstream' en mi árbol de trabajo maestro, pero usar eso para solucionar problemas me permite agregar una rama de seguimiento remoto a upstream/master.Supongo que es porque la rama remota upstream/master no está en mi repositorio hasta entonces. –

+0

directamente después de 'remote add'? Necesitas primero un 'git fetch upstream', para que la rama de seguimiento remoto' upstream/master' sea captada y colocada en tu repositorio local. Un 'git fetch' no modifica ninguno de tus archivos locales. – VonC

1

Según su descripción, se debe reajustar las horquillas en el esqueleto cada vez que cambia, usando

$ git rebase upstream 

Esto transformará la situación de la siguiente manera

initially: 
1 - 2 - 3 <- upstream 
     \- 4 <- fork 

upstream changes: 
1 - 2 - 3 - 5 - 6 <- upstream 
     \- 4 <- fork 

after rebase: 
1 - 2 - 3 - 5 - 6 <- upstream 
       \- 4 <- fork 

En otras palabras, su tenedor se parece como si hubiera sido bifurcado de la versión más reciente del skeletton.

La desventaja de este enfoque es que cambia la historia de las bifurcaciones ... Si no quieres esto, puedes simplemente combinar la corriente arriba en la bifurcación (no hay necesidad de seleccionarlas, creo).

+0

Si los archivos se eliminaron antes del fork y antes de la rebase, ¿qué sucederá cuando git aplique cambios a esos archivos? –

+0

Si no modificó los archivos, se eliminarán durante la rebase. Si los modificó, tendrá un conflicto que deberá resolver manualmente. – Sjlver

Cuestiones relacionadas