Cosa fa la "sincronizzazione" di GitHub per Windows?


87

Con GitHub per Windows, puoi "pubblicare" un ramo, quindi "sincronizzare" quel ramo con GitHub.

inserisci qui la descrizione dell'immagine

La sincronizzazione è fondamentalmente una git pulle git push? O c'è di più? Se volessi eseguire esattamente gli stessi passaggi della "sincronizzazione" dalla riga di comando, cosa dovrei fare?

(Non è Open Source, o l'ho appena letto.)

Risposte:


52

La sincronizzazione fa git pull --rebasee poi se ci sono modifiche locali, lo fa git push.

Da qui: http://haacked.com/archive/2012/05/21/introducing-github-for-windows.aspx#87318


2
Cosa succede se c'è un conflitto durante la fase di rebase?
Svante

26
@Svante fallisce e si offre di aprire una shell per farti risolvere il pasticcio. Ed è così che sono arrivato a questa pagina :-)
Andiih

8
È ancora vero? Ho appena eseguito una sincronizzazione e ho ottenuto un merge commit, che non dovrebbe mai accadere se il flusso è: git pull --rebase; git push
Micah Zoltu

Qualche spiegazione per il commento di @Michas Caldwell, credo che abbia ragione?
benchuk

Posso confermare che premendo Sync ha appena fatto un git pullinvece di a git pull --rebase, creando così un ulteriore ramo Merge 'master' di ... commit.
Leone

42

Poiché la risposta sopra è stata più di due anni fa, una risposta aggiornata a questa domanda è: a causa di alcuni bug con rebase , il pulsante "sync" non funziona git pull --rebasepiù. Invece, fa ciò git pullche farà l' unione in caso di conflitti, secondo queste note di rilascio (vedere la versione 1.3.0).

Il collegamento sopra non è disponibile in questo momento. Ecco le nuove note di rilascio .


2
In realtà, non è completamente vero. SOLO se un rebase non funziona, prova a fare un'unione.
Joris Meys

Il collegamento alle note di rilascio è interrotto.
skolima

2
@JorisMeys Non sono sicuro che la tua affermazione sia vera. Nella mia esperienza, se ci sono dei commit prima del mio in remoto, creerà un commit di unione, anche quando potrebbe eseguire un rebase.
Jerad Rose

@JeradRose Quando ho scritto il mio commento eravamo a Github Desktop v. 2.x, e siamo a 3.3 ormai :-) Ma hai ragione, ho notato lo stesso.
Joris Meys

17

"Sincronizza" sarebbe qualsiasi azione necessaria affinché il tuo ramo locale corrisponda al tuo ramo remoto. Se il tuo ramo locale aveva commit che il tuo ramo remoto no, allora "sync" spingerebbe il tuo ramo. Se il ramo remoto era prima del ramo locale, "sync" verrebbe eseguito per primo (in particolare git pull --rebase, come spiegato da Phil Haack). "Sync" è solo una scorciatoia per fare in modo che locale e remoto si specchiano a vicenda.

Dal sito GitHub :

The sync button turns the complex workflow of pulling and pushing into a single operation. It notifies you when there are new changes to pull down and lets you quickly share local changes.


Non si limita a tirare - fa "git pull --rebase", che è una differenza cruciale. Inoltre, l'ordine che hai è sbagliato, tira prima di spingere.
Andiih

2
@ Andiih La mia lingua è stata generalizzata e non un elenco ordinato di operazioni. L'ordine era implicito: si noti che dico "se la filiale remota era in anticipo rispetto alla filiale locale"? La mia descrizione era anche una citazione diretta dal sito GitHub. Indipendentemente da ciò, la risposta di Matt Rix è più dettagliata e merita di essere contrassegnata come risposta. Ho apportato alcune piccole modifiche per chiarire qualsiasi confusione nella mia risposta.
redhotvengeance

La sincronizzazione di github recupera anche le modifiche a monte, oltre a origin. Cioè ho f9rked un repo e ho un clone locale del fork, quello che voglio veramente sono le modifiche a monte, non solo l'origine
AaronLS

1
@AaronLS GitHub per Windows è progettato per funzionare solo con un telecomando in questo momento, vale a dire origin. Per lavorare con più telecomandi, dovrai usare la riga di comando. Le informazioni pertinenti possono essere trovate qui , sotto "Più telecomandi Git e telecomandi non GitHub".
redhotvengeance

4

Da aggiungere alla risposta di @ ethanyang ,

Secondo l'alias configurato in gitconfig,

[alias]
...
sync = !git pull && git push

4
Solo per curiosità, cosa fa il! significa nella riga sopra?
Scott Romack

@ScottRomack significa che è trattato come un comando di shell: stackoverflow.com/questions/21083933/…
Nicolas Holthaus

GitHub Desktop ha questo alias già configurato? In tal caso, dove si trova questa configurazione? Non ho visto questo alias nel mio file globale .gitconfig. O è solo una tua sostituzione?
james
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.