tag sirve que publicar para example create all agregar git push gerrit refspec

sirve - ¿Cómo configurar un refspec de envío ascendente específico para Git cuando se usa con Gerrit?



publicar tag git (4)

Aquí hay una mejora de la respuesta de Greg Hewgill .

Cree un script en algún lugar de la ruta, como en su carpeta de perfil bin (cree uno si es necesario, incluso en Windows):

$ mkdir ~/bin $ vi ~/bin/git-submit

Con el siguiente contenido:

#!/bin/sh -e if [ -z "$1" ]; then REMOTE=origin else REMOTE=$1 fi BRANCH=`git symbolic-ref HEAD` case $BRANCH in refs/heads/*) BRANCH=`basename $BRANCH` ;; *) echo "I can''t figure out which branch you are on." exit 1 ;; esac REMOTE_BRANCH=`git config --get "branch.$BRANCH.merge"` if [ -z $REMOTE_BRANCH ] then echo "There is no tracking information for the current branch." echo "If you wish to set tracking information for this branch you can do so with:" echo "" echo " git branch --set-upstream $BRANCH <remote>/<branch>" echo "" exit 1 fi git push $REMOTE HEAD:refs/for/$REMOTE_BRANCH

Suponiendo que creas una rama de seguimiento remoto como:

$ git checkout -b MyBranch origin/master

Usted puede simplemente llamar:

$ git submit

... para empujar a refs/for/master en este caso.

Estoy configurando Git con Gerrit Code Review y estoy buscando una manera de hacer que los comandos necesarios de Git sean relativamente sencillos para los usuarios que podrían ser nuevos en Git.

Los comandos que tengo actualmente para iniciar una nueva rama de características son esencialmente (asumiendo que Gerrit es el origin ):

git checkout baseline git pull git checkout -b work1234 git push -u origin work1234

Esto inicia un nuevo paquete de trabajo work1234 ramificado desde alguna baseline , y el impulso final crea la rama en Gerrit y establece el work1234 ascendente. Entonces .git/config ve algo así como:

[branch "work1234"] remote = origin merge = refs/heads/work1234

Ahora, Gerrit quiere que las nuevas confirmaciones para revisión sean enviadas a una refspec especial, refs refs/for/work1234 por ejemplo. Puedo hacer esto manualmente con:

git push origin work1234:refs/for/work1234

Lo que me gustaría hacer es encontrar alguna manera de configurar .git/config modo que un git push simple de git push empuje la rama actual a la ref. Espec. En el control remoto que requiere Gerrit. He visto las siguientes áreas de git config :

  • branch.<name>.* - no parece tener ninguna opción específica para configurar la ref. ref.
  • push.default - De alguna manera quiero upstream aquí
  • remote.<name>.push - Intenté remote.<name>.push refs/heads/*:refs/for/* aquí, pero git push siempre quiere impulsar todas las sucursales locales en este caso, mientras que solo quiero la sucursal actual

Si no puedo hacer que Git haga esto por sí mismo, escribiré un pequeño script de envoltorio que especifique completamente los refspecs. Sin embargo, sería mejor si Git pudiera empujar al lugar correcto de forma nativa.


Dos opciones que he encontrado:

1) Echa un vistazo a un proyecto que hice, ggh: https://github.com/hobbs/ggh

2) Puede configurar el push refspec predeterminado en su control remoto. Solo he descubierto cómo hacer esto con una rama remota codificada de forma rígida, aún intentando averiguar cómo hacer comodines en el refspec del control remoto para que siempre llegue al control remoto que está rastreando:

[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = ssh://gerrit/repo push = HEAD:refs/for/master


Terminé escribiendo un nuevo script de git-submit :

#!/bin/sh -e if [ -z "$1" ]; then REMOTE=origin else REMOTE=$1 fi BRANCH=`git symbolic-ref HEAD` case $BRANCH in refs/heads/*) BRANCH=`basename $BRANCH` ;; *) echo "I can''t figure out which branch you are on." exit 1 ;; esac git push $REMOTE HEAD:refs/for/$BRANCH

Puse este script en /usr/local/libexec/git-core/git-submit y ahora hay un comando para enviar un nuevo código a Gerrit para su revisión:

$ git submit

Si Gerrit no es el origin remoto, use git submit <remote> según corresponda.


git config push.default upstream git config branch.work1234.merge refs/for/work1234 git config branch.work1234.remote origin

o .git / config:

[push] default = upstream [branch "work1234"] merge = refs/for/work1234 remote = origin

No estoy seguro de si hay una manera de colocar un comodín en cualquier lugar para que funcione para todas las sucursales.