2013-06-15 19 views
9

Dopo aver creato un github-repo e ha aggiunto il il github-repo come remotaChe cosa è un git monte

git remote add origin https://github.com/githubname/reponame.git 

allora avete bisogno di spingere il vostro primo impegno con

git push -u origin master 

ho letto (Why do I need to do `--set-upstream` all the time?) che questo breve modulo per fare

git branch --set-upstream-to my_branch origin/my_branch 
git push 

che è un monte esattamente e perché ho bisogno impostarlo? Ci sono poche informazioni su questo in rete. So che esiste un argomento simile What does 'git remote add upstream' help achieve?, ma a mio parere non spiega esattamente cos'è l'upstream e cosa fa git push -u origin master, in particolare a che cosa punta origin master, è il repository locale o il repository remoto?

+0

Vedi anche questa domanda: https://stackoverflow.com/questions/5697750/what-exactly-does-the-u-do-git-push-u-origin-master-vs-git-push-origin- ma – TuringTux

risposta

20

Nel comando

git push -u origin master 

Il -u bandiera significa che il vostro filiale locale diventerà un monitoraggio ramo. Ovvero, un ramo che tiene traccia di un ramo remoto, in modo che il futuro git pull sappia quale ramo da unire e git push verrà indirizzato al ramo corretto.

origin è il telecomando che si sta premendo.

master è il parametro refspec. Il parametro refspec specifica quale ramo locale viene inviato a quale ramo remoto. Può essere complicato, ma in questo caso la forma abbreviata master significa spingere il ramo locale master al ramo remoto con lo stesso nome, origin/master.

Tecnicamente, il tracking aggiunge le seguenti informazioni relative al ramo master al .git/config:

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

e crea un file qui .git/refs/remotes/origin/master, che rappresenta il ramo remoto.

+0

Puoi aggiungere una spiegazione su cosa punta il master di origine nel comando $ git push -u origine master e sceglierò la tua risposta come risolvente. – patriques

+0

@patriques Aggiunto. –

+3

Il branch-refspec non è così difficile: 'master' è a corto di' master: master' dove il primo "master" definisce il locale e il secondo "master" il ramo remoto :) – KingCrunch

1

"Upstream" è il repository che hai clonato (alcuni dei) rami da cui provi, e dove premi le modifiche a quei rami (e facoltativamente a interi rami nuovi) dopo che sono stati commessi. GitHub funge da upstream perché memorizza le revisioni per te, in una posizione centralizzata.

+2

Questo è leggermente sbagliato. Upstream è una relazione tra i rami, non i repository. – millimoose

+0

@millimoose: Meglio? –

+2

Non proprio. * Upstream *, nel senso "la cosa che' --set-upstream' ha a che fare ", non è affatto una relazione a livello di pronti contro termine. Diverse filiali locali possono avere il loro set upstream per le filiali in diversi telecomandi, o anche per le filiali locali. (Es. Ramificazioni di feature che tracciano il tuo 'master' locale.) Dire" GitHub agisce come il tuo upstream "è fuorviante dal momento che confonde il significato del termine nel contesto di un workflow di sviluppo, e il suo significato in Git parlance che l'OP è chiedere di. – millimoose

Problemi correlati