¿Cómo empujar twigs repo desnudas a otro control remoto?

Estoy usando el flujo de trabajo descentralizado (Central + Fork). En ocasiones, me gustaría avanzar rápidamente todas mis sucursales remotas en mi fork con los últimos cambios de sus twigs correspondientes en el repository central.

Creé un segundo clon de mi repository central que es solo una versión simple. Con un solo command de git push , ¿es posible empujar todas las twigs hacia la horquilla? Sé que se pueden usar comodines en push, pero no he podido hacer que funcione. Por ejemplo, probé esto (tengo dos controles remotos en mi repository simple, 'ascendente' y 'origen'; el origen apunta a mi tenedor, y ascendente es el repository central:

 git push origin refs/remotes/upstream/*:refs/heads/* 

Todavía encuentro el refspec de git confuso. Específicamente, no estoy seguro de qué espacios de nombres son para qué. Supongo que todas las twigs remotas se almacenan bajo refs/heads/* .

Simplemente usa

 git push <fork> --all 

para empujar todas las references de bifurcación bajo .git/refs/heads/ al otro control remoto.

Documentación

De la documentation de git-scm para git push (truncada a opciones relevantes):

 git push [--all | --mirror | --tags] [<repository> [<refspec>...]] --all 

En lugar de nombrar cada ref para empujar, especifica que todas las references bajo refs/heads/ sean empujadas.

Tu command original debería haber funcionado

FYI, tu command original

 git push origin refs/remotes/upstream/*:refs/heads/* 

debería haber funcionado bien, así que no estoy seguro de lo que salió mal en su caso.

Refspecs explicado

De acuerdo a ti,

Todavía encuentro el refspec de git confuso. Específicamente, no estoy seguro de qué espacios de nombres son para qué. Supongo que todas las twigs remotas se almacenan bajo refs/heads/* .

Así que aquí está el trato con refspecs de la forma

 <source>:<destination> 
  1. Todos los repositorys Git comparten la misma estructura de directory de reference en su directory .git/refs/ .

    • Cada repo almacena sucursales locales (con respecto a sí mismo ) bajo refs/heads/ .

    • Cada repos almacena sucursales de seguimiento remoto (relativas a sí mismo ) en refs/remotes/<remote>/ .

    • También se pueden almacenar otras references bajo refs/ , que incluyen, pero no se limitan a, refs/tags/ , pero no entraré en detalles sobre ellas. También puede crear sus propios directorys de reference bajo refs/ ; GitHub, por ejemplo, almacena requestes de extracción en controles remotos bajo refs/pulls/<request-number>/ .

  2. Las references en cada lado del colon : son relativas al repository representado por ese lado del refspec. Imagine que cada lado del colon se antepone con el repository de ese lado.

    Para fines de ilustración , agregaré [source]/ y [destination]/ a los ejemplos de refspec a continuación, aunque esa no es realmente la syntax correcta para ellos.

    Entonces, por ejemplo, si desea enviar sus sucursales locales a un control remoto, debe enviarlas a las sucursales locales del control remoto . Puede usar un refspec como este:

     git push <remote> [source]/refs/heads/*:[destination]/refs/heads/* 

    En el caso anterior, también puede omitir :refs/heads/* , ya que omitir :<destination> hace que Git reemplace ese lado con las mismas references utilizadas en el lado <source> :

     git push <remote> refs/heads/* 

    Ahora digamos que quería enviar sus sucursales locales de seguimiento remoto a una carpeta especial "espacio de nombres" en su control remoto llamada refs/special/ . Luego usas lo siguiente:

     git push <remote> \ [source]/refs/remotes/<pick-a-remote>/*:[destination]/refs/special/*