Quando chiamo magit-push-current
con P P
dal buffer di stato, Magit 2.1.0
mi chiede dove spingere il ramo la prima volta, quando non è impostato upstream.
Come può consentire di generare automaticamente il nome come prima?
Quando chiamo magit-push-current
con P P
dal buffer di stato, Magit 2.1.0
mi chiede dove spingere il ramo la prima volta, quando non è impostato upstream.
Come può consentire di generare automaticamente il nome come prima?
Risposte:
Aggiornamento: il "ramo push" menzionato di seguito è stato implementato ormai. Vedere la documentazione sulla ramificazione per ulteriori informazioni.
Devi impostare il ramo upstream una volta. Una volta fatto ciò, si P Pspinge a quello e si otterranno elenchi di modifiche non annullate e non eliminate nel buffer di stato (a condizione che ce ne siano).
Esistono vari modi per impostare il ramo a monte. È possibile utilizzare il --set-upstream
passaggio dalla comparsa push: P -u P. Oppure utilizzare il comando che imposta il monte e non fa altro: b u.
Inoltre, Magit ora imposta automaticamente il ramo a monte durante la creazione di un nuovo ramo, a condizione che il "punto di partenza" sia il nome di un ramo. Questo funziona per "upstream" locali e remoti. Ma nota che se scegli un ramo locale come punto di partenza, questo non ti aiuterà a spingere. Il passaggio dal repository corrente al repository corrente ovviamente non ha senso ed è vietato.
Pertanto, quando il ramo "upstream" è in realtà un altro ramo locale, si P Pcomporta come se non fosse configurato alcun ramo upstream e si comporta esattamente come P e. Lo stesso è il caso se nessun upstream è configurato affatto.
Ciò a causa di una limitazione in Git: si può associare solo un altro ramo con qualche ramo, e quel ramo viene quindi chiamato "ramo a monte". Sarebbe meglio se esistessero almeno una filiale "a monte" e una "pubblicazione". Alla fine ho intenzione di implementarlo in Magit. Vedi numero 1485 .
Quindi, se si desidera essere in grado di spingere proprio in P Pquel momento, il ramo "upstream" deve essere ad es. "Origin / master", non "master".
Sto pensando di aggiungere una variante push che funziona sempre git push
senza alcun argomento. Ciò che farebbe quindi dipenderebbe esclusivamente dalla configurazione di Git.
master
e non si è impostato a monte, dovrei forse diramare origin/master
per impostare automaticamente l'upstream?
origin/master
set origin/master
come a monte, ma mi sarei aspettato di avere origin/branch-name
a monte.
P -p P <... completion ...> RET
Si noti che origin/branch-name
viene offerto come candidato per il completamento, quindi non è necessario digitarlo.
Uso i seguenti consigli che si attivano automaticamente --set-upstream
quando il ramo corrente non ha ancora un upstream:
(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)
In combinazione con il completamento ido questo consente di spingere un nuovo ramo con P P RET:
;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
Creo semplicemente il nuovo ramo con b c
e poi modifico il .git/config
file in modo che punti origin/branch
piuttosto che fare il monkeying con tutta la roba di magit 2, che comunque non sembra funzionare.
Modificare:
[branch "fix_something"]
remote = .
merge = refs/heads/master
Per
[branch "fix_something"]
remote = origin
merge = refs/heads/fix_something
Funziona, mentre in magit2 non ho ancora trovato una combinazione chiave che compia la stessa cosa. Cercare di impostare il telecomando non funziona perché non esiste ancora sull'origine.
bu
. Ma questo usa git branch --set-upstream-to
e come sai Git non può impostare un ramo inesistente come upstream e quindi nemmeno Magit.
some-branch-name
alorigin
telecomando, probabilmente puoi semplicemente digitareo TAB s TAB
e otterrai il nome che desideri.