Io uso il seguente comando per inviare al mio ramo remoto:
git push origin sandbox
Se dico
git push origin
questo spinge anche i cambiamenti nelle altre mie filiali o aggiorna solo il mio attuale ramo? Ho tre rami: master
, production
e sandbox
.
La documentazione di git push
non è molto chiara su questo, quindi mi piacerebbe chiarire questo per sempre.
Quali rami e telecomandi eseguono esattamente i seguenti comandi git push
?
git push git push origin
origin
sopra è un telecomando.
Capisco che git push [remote] [branch]
spingerà solo quel ramo verso il remoto.
Puoi controllare il comportamento predefinito impostando push.default nella tua git config. Dalla documentazione di git-config (1) :
push.default
Definisce l’azione che git push dovrebbe eseguire se non viene fornito alcun refspec sulla riga di comando, nessun refspec è configurato nel remoto e nessun refspec è implicito da nessuna delle opzioni fornite sulla riga di comando. I valori possibili sono:
nothing
: non spingere nulla
matching
: spingere tutti i rami corrispondenti
Tutti i rami che hanno lo stesso nome in entrambe le estremità sono considerati corrispondenti.
Questo è l’impostazione predefinita in Git 1.x.
upstream
: spinga il ramo corrente al suo ramo upstream (il tracking
è un sinonimo deprecato per upstream)
current
: spingere il ramo corrente in un ramo con lo stesso nome
simple
: (nuovo in Git 1.7.11) come upstream, ma si rifiuta di premere se il nome del ramo upstream è diverso da quello locale
Questa è l’opzione più sicura ed è adatta ai principianti.
Questo diventerà il valore predefinito in Git 2.0.
Le modalità semplice, corrente e upstream sono per coloro che vogliono spingere un singolo ramo dopo aver terminato il lavoro, anche quando gli altri rami non sono ancora pronti per essere espulsi
Esempi di riga di comando:
Per visualizzare la configurazione corrente:
git config --global push.default
Per impostare una nuova configurazione:
git config --global push.default current
git push origin
proverà tutte le modifiche sui rami locali che hanno i branch remoti corrispondenti origin
come per git push
Funziona come
git push
, doveè il telecomando del ramo corrente (o origine, se nessun telecomando è configurato per il ramo corrente).
Dalla sezione Esempi della pagina man di git-push
Puoi impostare il comportamento predefinito per il tuo git con push.default
git config push.default current
o se hai molti repository e vuoi lo stesso per tutti allora
git config --global push.default current
La corrente in questa configurazione significa che per impostazione predefinita si sposterà il ramo corrente solo quando si esegue git push
Altre opzioni sono:
AGGIORNAMENTO – NUOVO MODO DI FARE QUESTO
A partire da Git 1.7.11, effettuare le seguenti operazioni:
git config --global push.default simple
Questa è una nuova impostazione introdotta che funziona allo stesso modo della corrente, e sarà resa predefinita per git dalla v 2.0 in base alle voci
Ho appena eseguito il commit del mio codice su un ramo e l’ho spinto su github, in questo modo:
git branch SimonLowMemoryExperiments git checkout SimonLowMemoryExperiments git add . git commit -a -m "Lots of experimentation with identifying the memory problems" git push origin SimonLowMemoryExperiments
Ecco alcune informazioni molto utili e utili su Git Push : Git Push: Just the Tip
L’uso più comune di git push è quello di inviare le modifiche locali al repository pubblico upstream. Supponendo che l’upstream sia un remoto chiamato “origin” (il nome remoto predefinito se il tuo repository è un clone) e il ramo da aggiornare a / da è denominato “master” (il nome di ramo predefinito), questo è fatto con: git push origin master
git push origin
i cambiamenti da tutti i rami locali ai rami corrispondenti all’origine remota.
git push origin master
spingerà le modifiche dal ramo master locale al ramo master remoto.
git push origin master:staging
trasferirà le modifiche dal ramo master locale al ramo di gestione temporanea remoto, se esistente.
(Marzo 2012)
Attenzione: quella politica di ” matching
” predefinita potrebbe cambiare presto
(a volte dopo git1.7.10 +) :
Vedi ” Per favore discuti: cosa dovrebbe fare” git push “quando non dici cosa spingere? ”
Nell’impostazione corrente (cioè
push.default=matching
),git push
senza argomento spinge tutti i rami che esistono localmente e remotamente con lo stesso nome .
Questo di solito è appropriato quando uno sviluppatore spinge al proprio repository pubblico, ma può essere fonte di confusione se non pericoloso quando si utilizza un repository condiviso.La proposta è di cambiare l’impostazione predefinita in ”
upstream
“ , ovvero spingere solo il ramo corrente e spingerlo nel ramo da cui pull git pull.
Un altro candidato è ”current
“; questo spinge solo il ramo corrente al ramo remoto con lo stesso nome.Ciò che è stato discusso finora può essere visto in questo thread:
http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694
Le discussioni pertinenti precedenti includono:
Per partecipare alla discussione, invia i tuoi messaggi a: [email protected]
Ho appena inserito questo nella mia sezione alias .gitconfig e mi piace come funziona:
pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"
Spingerà il ramo attuale all’origine con git pub
o un altro repository con git pub repo-name
. Gustoso.
Un git push proverà a spingere tutti i rami locali sul server remoto, probabilmente è quello che non vuoi. Ho un paio di impostazioni di convenienza per affrontare questo:
Alias ”gpull” e “gpush” appropriatamente:
Nel mio ~ / .bash_profile
get_git_branch() { echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` } alias gpull='git pull origin `get_git_branch`' alias gpush='git push origin `get_git_branch`'
Quindi, l’esecuzione di “gpush” o “gpull” spingerà solo il mio ramo “attualmente attivo”.
È ansible premere il ramo corrente con il comando
git push origin HEAD
(preso da qui )
Puoi modificare il comportamento predefinito in .gitconfig
, ad esempio:
[push] default = current
Per verificare le impostazioni correnti, esegui:
git config --global --get push.default
Piuttosto che usare alias, preferisco creare script git-XXX, così posso controllarli più facilmente (i nostri sviluppatori hanno una certa dir controllata dalla sorgente sul loro percorso per questo tipo di cose).
Questo script (chiamato git-setpush
) imposterà il valore di configurazione per il valore remote.origin.push
a qualcosa che spingerà solo il ramo corrente:
#!/bin/bash -eu CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2) NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH echo "setting remote.origin.push to $NEW_PUSH_REF" git config remote.origin.push $NEW_PUSH_REF
nota che, mentre stiamo usando Gerrit
, imposta il target su refs/for/XXX
per inserire un ramo di recensione. Presume anche che l’origine sia il tuo nome remoto.
Richiamalo dopo aver verificato un ramo con
git checkout your-branch git setpush
Ovviamente potrebbe essere adattato per fare anche il checkout, ma mi piacciono gli script per fare una cosa e farla bene
Ho aggiunto le seguenti funzioni nel mio file .bashrc per automatizzare queste attività. Fa git push / git pull + nome del ramo corrente.
function gpush() { if [[ "x$1" == "xh" ]]; then cat <