2012-03-29 17 views
11

No puedo averiguar cómo hacer que SourceTree presione Gerrit.Empujar a gerrit con SourceTree

vi este enlace, pero todavía no entiendo cómo se puede hacer: https://answers.atlassian.com/questions/29361/configuring-sourcetree-push-for-gerrit

Al parecer, de acuerdo con las notas de la versión 1.3.3 de que hay una manera de hacerlo, pero no puedo entender a cabo: http://www.sourcetreeapp.com/update/ReleaseNotes.html#version-1.3.3

¿Hay alguna guía paso a paso en algún lugar sobre cómo hacerlo?

Ahora mismo ejecuta este comando en el terminal para empujar

git push origin HEAD:refs/for/master 

Respuesta

27

Creo que la respuesta proporcionada por atlassian dice que cambiar el nombre de la rama remota cuando se ve el cuadro de diálogo Push.

  1. abrir el diálogo
  2. Haga clic en el nombre de la sucursal remota en la columna "Rama remoto" (el mío es actualmente 'maestro')
  3. Escriba el nuevo nombre de la sucursal remo empuje - que sería 'refs/for/master 'para mí
  4. Haga clic en Aceptar.

Esto parece haber empujado correctamente los commits en Gerrit para mí. El problema que tengo ahora es que el valor 'refs/for/master' no persiste. Ahora para descubrirlo. Actualizaré esta publicación una vez que me haya dado cuenta. Espero que esto ayude incluso aunque sea tarde para el juego.

Actualización: resulta que debe agregar una entrada de inserción en origen remoto en .git/config. Deberías hacer esto a través del comando git config (aunque edité el archivo manualmente, estoy seguro de que es una mala práctica). la línea de empuje que he escrito es:

push = refs/heads/*:refs/for/* 

para mayor claridad aquí es mi entrada origen remoto en .git/config:

[remote "origin"] 
    url = ssh://gerrit-test.example.com:29418/mystuff.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    push = refs/heads/*:refs/for/* 

En SourceTree ahora se puede empujar y empujará a Gerrit en lugar de la repositorio final (Ahora también puedes hacer git push sin especificar nada más y presionará a gerrit). Tenga en cuenta que después de un empuje, SourceTree seguirá mostrando un número en el botón que dice que todavía tiene cosas para empujar. Esto se debe a que todavía está obteniendo del repositorio maestro y los cambios que ha introducido en gerrit aún no se han fusionado en el repositorio principal. Una vez que sus cambios se hayan fusionado en el repositorio principal, el número en el botón desaparecerá.

+1

Pude cambiar el nombre de la sucursal remota, pero eso no ayudó, ya que estaba utilizando el maestro para la sucursal local y no HEAD. Pero sus comentarios actualizados ayudaron, agregando la línea 'push' en mi .git/config trabajado. – JoseM

+7

Nuevamente gracias a mucho. Aquí está la forma de hacerlo a través del comando git config: 'git config remote.origin.push refs/heads/*: refs/for/*' – JoseM

+0

nice. mucho mejor con la herramienta de línea de comando adecuada. – mozart27

1

Si tiene una configuración con Git Flow (http://nvie.com/posts/a-successful-git-branching-model/), o similar, a menudo desea enviar su sucursal local a una sucursal remota diferente. En tal caso, la regla de inserción genérica (mencionada por mozart27) no funcionará ya que siempre empuja a su rama local a la rama remota correspondiente.

Ejemplo: Tengo una sucursal local "feature123" que está lista para revisión (es decir, Gerrit). Nuestra rama de integración es "origen/desarrollo". Si utilizo la regla de inserción genérica, entonces "feature123" se presionará para su revisión en "origin/feature123", pero lo que realmente quiero es presionarlo para que lo revise en "origin/develop".

Solución: En SourceTree puede crear una acción personalizada:

Menu caption: Push for review 
Script to run: cmd 
Parameters: /c git push origin $SHA:refs/for/develop 

Recuerde añadir Git a la ruta para permitir cmd para usarlo.

Luego, en lugar de hacer clic en "Empujar", haga clic con el botón derecho en su confirmación y seleccione "Acciones personalizadas -> Insertar para revisión".

Por supuesto, estas 2 soluciones pueden coexistir, con la regla de inserción genérica que garantiza que siempre envíe una revisión cuando se envía a una sucursal remota y la acción personalizada para cuando desea enviar una bifurcación de funciones para su revisión en la bifurcación de integración.