Come posso impostare il ramo a monte per spingere un ramo locale su in magit?


11

Da quello che ricordo, se sto lavorando su un ramo, ad esempio, my-feature-branchero in grado di farlo dal magit-statusmenu con P P, e quindi selezionando il ramo remoto da un elenco che aveva origin/my-feature-branchin alto. Questo ha funzionato magnificamente.

Di recente, a partire da questa discussione , ho potuto fare qualcosa di simile con P -u e(aprire il magit-push-popup, impostare la --set-upstreambandiera e usare eper altrove), che mi farebbe allo stesso modo scegliere da un elenco di rami che iniziano con origin/my-feature-branch. Questo ha funzionato bene anche per me. Ancora più recentemente, tuttavia, questo non funziona più e non sono stato in grado di capire il modo migliore per impostare un ramo a monte.

Quando uso P ela prima opzione su cui spingere un ramo è origin/my-feature-branch, che è quasi sempre quello che voglio. Tuttavia, non è impostato origin/my-feature-branchcome upstream per il mio ramo locale. L' P uutilizzo mi consente di selezionare il ramo upstream, ma origin/my-feature-branchnon è nell'elenco e devo digitare origin/my-feature-branchsenza il completamento della scheda (so che non è difficile, ma è soggetto a errori dell'utente ed è più lento della riga di comando).

È l'unico modo per impostare un ramo a monte adesso o mi sto perdendo qualcosa? Ho esaminato altre discussioni e documentazione relative al problema, ma tutte le fonti che ho trovato sembrano non essere aggiornate.


1
Penso che la <remote>/<branch>parte sia stata accidentalmente esclusa dal prompt (vedi questo commento ). Nel frattempo, puoi impostare magit-push-current-set-remote-if-missingsu zero.
Kyle Meyer,

L'ho appena risolto. La mia risposta di seguito presuppone quella correzione.
Tarsius,

Trovato e risolto alcuni altri problemi correlati. Probabilmente dovrai aspettare alcune ore prima che Melpa riesca a recuperare prima che tutto quanto sotto sia corretto al 100%.
tarsius,

Risposte:


11

Esistono diversi modi per impostare l'upstream, spingendo o senza spingere contemporaneamente.

Se magit-push-current-set-remote-if-missingnon è nil(impostazione predefinita), vedrai qualcosa del tipo:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Per spingerlo origin/featuree impostarlo come upstream, premere ue quindi RETaccettare il candidato di completamento predefinito.

Se magit-push-current-set-remote-if-missingè nil, allora vedresti questo invece:

Push feature to
 e elsewhere

Se hai premuto pora, ti verrebbe detto che l'upstream non è configurato (il che implica che non puoi spingere verso l'alto se non è presente l'upstream).

Ma se lo magit-push-current-set-remote-if-missingè nil, allora l'elenco di opzioni sarebbe caratterizzato --set-upstream, quindi potresti usare P - u pcome sei abituato (tranne che la seconda p è in minuscolo). C'è una complicazione però: dopo aver modificato il valore magit-push-current-set-remote-if-missingdevi riavviare Emacs per --set-upstreamapparire o scomparire.

Infine è possibile impostare il monte utilizzando il "set di monte (e fare il resto niente)" comando: b uorigin/masterRET. Si noti che quando si utilizza questo approccio, è possibile selezionare solo un ramo già esistente.


Ma sarebbe meglio configurare il push-remote e spingere a quello. Per ulteriori informazioni sul push-remote e su come differisce dall'upstream, consultare il nodo Branching nel manuale informativo (la versione Web non è stata ancora aggiornata).

Fondamentalmente il ramo a monte è il ramo in cui alla fine il ramo della funzione verrà unito (fondendosi o riformulando, non spingendo), molto probabilmente origin/master. E il push-remote è il punto in cui spingi i tuoi rami di funzionalità mentre lavori ancora su di essi o in modo che qualcun altro possa unirli. Se il ramo locale viene chiamato featuree il push-remote lo è my-fork, quindi spingere quel ramo usando P plo spingerebbe my-fork/feature. (Il "push-to-branch" non può essere configurato, il nome del ramo sul push-remote è sempre lo stesso del nome locale.)

Quindi, mentre la tua domanda era qualcosa del tipo "come faccio a spingere verso l'alto, mentre allo stesso tempo configuro l'upstream", la mia raccomandazione è di non spingere affatto verso l'alto, ma piuttosto di spingere verso il push-remote.

Se non hai modificato il valore magit-push-current-set-remote-if-missing, puoi configurare il push-remote usando P psome-remoteRET. Ma, poiché è probabile che si spinga tutti i rami delle funzioni sullo stesso telecomando, è meglio impostare il telecomando push una volta per tutti i rami e farlo con esso: be poi M-pfino a quando non viene selezionato il telecomando giusto.


Si noti inoltre che di solito non dovrebbe essere necessario impostare esplicitamente il ramo a monte. Quando si crea un nuovo ramo e si seleziona un ramo remoto come punto di partenza, viene utilizzato come upstream.

Sfortunatamente il punto di partenza di solito è un ramo locale e in quel caso Git di default non lo usa come upstream. Ma questo può essere facilmente risolto eseguendolo una volta:

git config --global branch.autoSetupMerge always

Il valore predefinito è true, che significa "imposta il punto di partenza come upstream, purché sia ​​un ramo remoto ".


A proposito, lo stesso vale per il push-remote. Anche questo dovrebbe essere impostato in modo semi-automatico in "nuovi" repository. Se clonate un repository, vi verrà chiesto se si desidera utilizzare origincome telecomando push. Dovresti rispondere "sì", a meno che tu non abbia intenzione di aggiungere un altro telecomando, per esempio my-fork, che dovrebbe essere usato come telecomando remoto. Quando aggiungi un nuovo telecomando utilizzando M ae remote.pushDefaultnon è ancora impostato, ti verrà chiesto se desideri utilizzare il telecomando appena aggiunto come telecomando push.

Questo può essere configurato usando magit-clone-set-remote.pushDefaulte magit-remote-add-set-remote.pushDefault.

Un'altra opzione avanzata è magit-branch-prefer-remote-upstream, che per impostazione predefinita è nil. Se lo si imposta su te quindi si seleziona un ramo locale come punto iniziale per un nuovo ramo, l'upstream del punto iniziale potrebbe (secondo alcune regole, vedere doc-string) essere utilizzato come upstream, anziché il punto di partenza stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.