¿Cómo evitar que Magit pregunte dónde empujar una rama?

10

Cuando se llama a magit-push-currentla P Pde la memoria intermedia de estado, Magit 2.1.0me pregunta dónde empujar la rama en el primer tiempo, cuando aguas arriba no está establecida.

¿Cómo puede permitir generar automáticamente el nombre como solía hacerlo antes?

z1naOK9nu8iY5A
fuente
2
En caso de que no lo sepa, el nombre generado automáticamente es una de las opciones de finalización. Entonces, la primera vez que presionas some-branch-nameel origincontrol remoto, probablemente solo puedas escribir o TAB s TABy obtendrás el nombre que deseas.
Malabarba
Oh ok, no lo sabía, gracias. El problema es que tengo muchas ramas que comienzan con los mismos prefijos, lo cual no es muy útil, también siempre pongo ramas remotas con el mismo nombre que las ramas locales.
z1naOK9nu8iY5A

Respuestas:

8

Actualización: la "rama de inserción" mencionada a continuación ya se ha implementado. Consulte la documentación sobre ramificación para obtener más información.

Debe configurar la rama ascendente una vez. Una vez que lo haya hecho, eso lo P Pempujará y obtendrá listas de cambios no recogidos y sin empujar en el búfer de estado (siempre que haya alguno).

Hay varias formas de configurar la rama ascendente. Se podría utilizar el --set-upstreaminterruptor del empuje emergente: P -u P. O utilice el comando que establece la corriente arriba y no hace nada más: b u.

Además, Magit ahora establece automáticamente la rama ascendente al crear una nueva rama, siempre que el "punto de partida" sea el nombre de una rama. Esto funciona para "upstreams" locales y remotos. Pero tenga en cuenta que si elige una rama local como punto de partida, eso no lo ayudará a empujar. Obviamente, empujar desde el repositorio actual al repositorio actual no tiene sentido y no está permitido.

Entonces, cuando la rama "ascendente" es de hecho otra rama local, entonces se P Pcomporta como si no se hubiera configurado ninguna rama ascendente, y se comporta exactamente igual P e. Lo mismo es el caso si no se configura ningún flujo ascendente.

Esto debido a una limitación en Git: uno puede asociarse únicamente una otra rama con alguna rama, y que la rama se llama entonces la "rama aguas arriba". Sería mejor si hubiera al menos una rama "ascendente" y una "publicación". Tengo la intención de implementar eso en Magit eventualmente. Ver el número 1485 .

Por lo tanto, si desea poder empujar en P Pese momento, la rama "ascendente" debe ser, por ejemplo, "origen / maestro", no "maestro".


Estoy considerando agregar una variante push que siempre se ejecuta git pushsin ningún argumento. Lo que eso haga dependerá exclusivamente de la configuración de Git.

tarsius
fuente
Me ramifiqué desde mastery no se configuró en sentido ascendente, ¿tal vez debería bifurcar origin/masterpara configurar automáticamente el nivel ascendente?
z1naOK9nu8iY5A
Ver respuesta actualizada.
tarsius
1
Se ramifica desde el origin/masterconjunto origin/mastercomo ascendente, pero hubiera esperado tenerlo origin/branch-namecomo ascendente.
z1naOK9nu8iY5A
Si eso es lo que quieres, entonces es mejor hacerlo durante el empuje. P -p P <... completion ...> RETTenga en cuenta que origin/branch-namese ofrece como candidato de finalización, por lo que no tiene que escribirlo.
tarsius
2
Esto es doloroso cuando usa gitflow y solicita solicitudes de revisión de código, con una rama por función, porque generalmente solo presiona una vez, y siempre es crear una rama remota con el mismo nombre que la rama local. Empujar a una rama con nombre diferente sería una revisión final del código.
Barry Kelly
3

Utilizo el siguiente consejo que se activa automáticamente --set-upstreamcuando la rama actual aún no tiene un flujo ascendente:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

Combinado con la finalización de ido, esto permite impulsar una nueva rama con P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
fuente
¡Esto es genial! ¡Muchas gracias!
z1naOK9nu8iY5A
0

Simplemente creo la nueva rama b cy luego edito el .git/configarchivo para señalarlo en origin/branchlugar de andar con todas las cosas de magit 2, lo que no parece funcionar de todos modos.

Cambio:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

A

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

Esto funciona, mientras que todavía no he encontrado una combinación de teclas en magit2 que logre lo mismo. Intentar configurar el control remoto no funciona porque todavía no existe en origen.

David N. Welton
fuente
1
El upstream se puede configurar usando bu. Pero eso usa git branch --set-upstream-toy, como saben, Git no puede establecer una rama inexistente como la corriente arriba, por lo que Magit tampoco puede.
tarsius
@tarsius magit 1 parecía hacer lo que necesitaba. Solo estoy tratando de recuperar algo de ese flujo de trabajo.
David N. Welton