Que fait la «synchronisation» de GitHub pour Windows?

87

Avec GitHub pour Windows, vous pouvez «publier» une branche, puis «synchroniser» cette branche avec GitHub.

entrez la description de l'image ici

La synchronisation est-elle essentiellement un git pull et git push? Ou y a-t-il plus? Si je voulais faire exactement les mêmes étapes que "sync" à partir de la ligne de commande, que dois-je faire?

(Ce n'est pas Open Source, ou je viens de le lire.)

Jay Bazuzi
la source

Réponses:

52

Sync le fait git pull --rebaseet s'il y a des changements locaux, c'est le cas git push.

De là: http://haacked.com/archive/2012/05/21/introducing-github-for-windows.aspx#87318

Matt Rix
la source
2
Que se passe-t-il en cas de conflit lors de l'étape de rebase?
Svante
26
@Svante, cela échoue et vous propose d'ouvrir un shell pour que vous puissiez trier le désordre. C'est ainsi que je suis arrivé à cette page :-)
Andiih
8
Est-ce toujours vrai? J'ai juste fait une synchronisation et j'ai fini avec un commit de fusion, ce qui ne devrait jamais arriver si le flux est: git pull --rebase; git push
Micah Zoltu
Une explication pour le commentaire de @Michas Caldwell, je crois qu'il a raison?
benchuk
Peut confirmer que Sync vient de faire un git pullplutôt qu'un a git pull --rebase, créant ainsi une branche de fusion supplémentaire «maître» de ... commit.
Leo
42

Puisque la réponse ci-dessus remonte à plus de deux ans, une réponse mise à jour à cette question est la suivante: en raison de quelques bogues avec rebase , le bouton "sync" ne fonctionne git pull --rebaseplus. Au lieu de cela, il fait git pullce qui fusionnera s'il y a des conflits, selon ces notes de publication (voir la version 1.3.0).

Le lien ci-dessus n'est pas disponible pour le moment. Voici les nouvelles notes de version .

Ethan Yang
la source
2
En fait, ce n'est pas tout à fait vrai. UNIQUEMENT si un rebase ne fonctionne pas, il essaie de faire une fusion.
Joris Meys
Le lien des notes de publication est rompu.
skolima
2
@JorisMeys Je ne suis pas sûr que votre déclaration soit vraie. D'après mon expérience, s'il y a des commits avant les miens sur la télécommande, cela créera un commit de fusion, même s'il pourrait faire un rebase.
Jerad Rose
@JeradRose Quand j'ai écrit mon commentaire, nous étions à Github Desktop v. 2.x, et nous sommes maintenant à 3.3 :-) Mais vous avez raison, j'ai remarqué la même chose.
Joris Meys
17

«Sync» serait toutes les actions nécessaires pour que votre branche locale corresponde à votre branche distante. Si votre branche locale avait des commits que votre branche distante n'a pas, alors "sync" pousserait votre branche. Si la branche distante était en avance sur votre branche locale, alors "sync" tirerait en premier (spécifiquement git pull --rebase, comme cela a été expliqué par Phil Haack). «Sync» est juste un raccourci pour faire en sorte que le local et le distant se mettent en miroir.

Depuis le site 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.

redhotvengeance
la source
Il ne fait pas que tirer - il fait "git pull --rebase", ce qui est une différence cruciale. De plus, l'ordre que vous avez est erroné, tirez avant de pousser.
Andiih
2
@Andiih Mon langage était généralisé et non une liste ordonnée d'opérations. L'ordre était implicite - remarquez que je dis "si la succursale distante était en avance sur votre succursale locale"? Ma description était également une citation directe du site GitHub. Quoi qu'il en soit, la réponse de Matt Rix est plus détaillée et mérite d'être marquée comme la réponse. J'ai fait quelques petites modifications pour clarifier toute confusion dans ma réponse.
redhotvengeance
Github sync récupère-t-il également les modifications en amont, en plus de l'origine. Ie I have f9rked a repo, and have a local clone of the fork, ce que je veux vraiment, ce sont les changements en amont, pas seulement l'origine
AaronLS
1
@AaronLS GitHub pour Windows est uniquement conçu pour fonctionner avec une seule télécommande pour le moment, à savoir origin. Pour travailler avec plusieurs télécommandes, vous devrez utiliser la ligne de commande. Les informations pertinentes peuvent être trouvées ici , sous "Plusieurs télécommandes Git et télécommandes non GitHub".
redhotvengeance
4

Pour ajouter à la réponse de @ ethanyang ,

Selon l'alias configuré dans gitconfig,

[alias]
...
sync = !git pull && git push
Ashwin Sinha
la source
4
Juste par curiosité, que fait le! signifie dans la ligne ci-dessus?
Scott Romack le
@ScottRomack cela signifie qu'il est traité comme une commande shell: stackoverflow.com/questions/21083933/…
Nicolas Holthaus
Cet alias est-il déjà configuré sur GitHub Desktop? Si oui, où se trouve cette configuration? Je n'ai pas vu cet alias dans mon global .gitconfig. Ou est-ce juste une dérogation de votre part?
james