2012-06-28 23 views
39

Mi sono appena imbattuto in qualcosa di strano oggi. Ho chiesto a un collaboratore del mio lavoro estivo di aiutarmi a creare un nuovo repo git remoto per il mio codice e c'era molta confusione su ciò che ha fatto e su ciò che volevo fare. Gli ho chiesto di inviare la sua configurazione per poter vedere il percorso verso il suo telecomando e ho scoperto che non aveva un telecomando. Quando gli ho chiesto di questo, ha spiegato il suo flusso di lavoro in questo modo:Qual è la differenza tra git push e git pull?

  1. cambiare qualcosa a livello locale
  2. Commit
  3. Spostarsi dir remoto
  4. git pull c: \ localdir

Così, invece di spingere a un telecomando ha costantemente tirato dal suo repo locale a quello sul nostro server. Una sorta di lavoro all'indietro. Quando l'ho affrontato riguardo a questo mi ha chiesto quale fosse la differenza e non potevo davvero rispondergli, ma penso che ci sia qualcosa giusto?

Quindi la mia domanda a tutti voi è: qual è la differenza nel spingere verso un telecomando e tirare da un telecomando?

+4

@Downvoters: Ricordati di far sapere perché, in modo che le domande possano essere migliorate. – Zeemee

+2

tendeva a diminuire anche perché la domanda ** suona ** ridicola ma in realtà non lo è! Ora invece si sta facendo l'upvoting. – eckes

+2

@Mulmoth esattamente. Mi piacerebbe sapere cosa ho fatto di male se qualcuno mi prende a calci in faccia per questo. =) – Qw4z1

risposta

10

Spingere a un telecomando: inviare alcuni commit a un altro repository git. Il repository git è considerato "remoto", ma può essere un repository in un'altra cartella del tuo disco rigido. estraendo da un telecomando: acquisisci alcuni commit da un repository remoto e li unisci nel tuo attuale HEAD (l'attuale cassa del tuo repository)

Il tuo collaboratore potrebbe aver utilizzato pull anziché push perché il tuo repository potrebbe non essere disponibile (nessun demone git in esecuzione, o gitweb, o server ssh su), ma il suo è stato disponibile dal tuo computer. Poiché si tratta di un server, potrebbe non voler esporre un demone/servizio git che potrebbe essere un vettore di attacco.

Ma se il vostro repository è stato condiviso/a disposizione, avrebbe solo potuto fare:

  1. cambiamento qualcosa localmente
  2. commettere
  3. spingere al repository
+1

Penso che sia stato così perché ho anche qualche problema a spingere sul server. – Qw4z1

+2

Allora è così. E come detto da [eckes] (http://stackoverflow.com/a/11240793) il server potrebbe avere già una directory ritirata che riflette il master come versione di produzione. In questo modo non sarà possibile passare dal ramo locale al ramo master remoto poiché è già stato estratto per le esigenze di produzione. – Dolanor

0

Nessuno, i repository sono copie l'uno dell'altro e pull e push sono solo flussi di direzione. La differenza con il metodo del tuo collega è che ha aggiunto un quarto comando non necessario.

1

Sì, sta funzionando all'indietro.

workflow principio è:

  1. cambiamento qualcosa localmente
  2. commettere
  3. spinta a dir remoto

Un caso d'uso (un altro è explained by Dolanor) per non spingere a distanza è che una la copia di lavoro viene verificata sul telecomando (cioè non è un semplice repo). Quando vuole spingere un ramo che viene estratto nella casella remota (ad esempio master:master), ciò non avrà esito positivo poiché gli spunti alle filiali di check-out sono vietati.

A mio parere, questo è l'unico caso di utilizzo per passare alla macchina remota e tirare invece di spingere dalla macchina locale.

+1

Ho spiegato l'altro caso in cui il repository non è disponibile (nessun demone git, ecc.). Ho dimenticato il repository già ritirato. Quindi sembra esserci 2 casi per fare quel tipo di flusso di lavoro – Dolanor

+0

@Dolanor: hai ragione! Risposta modificata – eckes

+0

Quindi, in pratica, spingere e tirare è solo un lancio di commit in direzioni opposte? – Qw4z1

13

Nella mia è possibile consentire agli utenti di inviare le proprie commit a qualche repository considerato "master", oppure lasciare che inviino richieste pull a un singolo utente che ha il permesso di modificare il "master".

Github, ad esempio, non consentirà ai non-contributori di inviare al repository, ma consentirà loro di inviare richieste di pull, in modo che i contributori possano integrare le loro modifiche.

+2

L'esempio di richiesta pull GitHub mi rende molto più chiaro. Grazie! – Qw4z1

+0

Questa risposta la spiega in termini semplici, piuttosto che introdurre nuovi termini per i principianti da "capire". – NavkarJ

Problemi correlati