87 votes

Que fait la "synchro" de GitHub pour Windows ?

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

enter image description here

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

(Ce n'est pas un logiciel libre, sinon je l'aurais lu).

52voto

Matt Rix Points 501

Sync fait git pull --rebase et ensuite, s'il y a des changements locaux, il fait git push .

D'ici : http://haacked.com/archive/2012/05/21/introducing-github-for-Windows.aspx#87318

2 votes

Que se passe-t-il s'il y a un conflit pendant l'étape de rebasement ?

26 votes

@Svante il échoue simplement, et propose d'ouvrir un shell pour que vous puissiez régler le problème. C'est ainsi que je suis arrivé sur cette page :-)

8 votes

Est-ce toujours le cas ? Je viens de faire une synchronisation et je me suis retrouvé avec un commit de fusion, ce qui ne devrait jamais arriver si le flux est : git pull --rebase ; git push

42voto

Ethan Yang Points 784

La réponse ci-dessus datant d'il y a plus de deux ans, une réponse actualisée à cette question est la suivante : en raison de certains bogues avec le rebasement le bouton "sync" ne fait rien. git pull --rebase plus. Au lieu de cela, il fait git pull qui fera fusionner s'il y a des conflits, selon ce notes de mise à jour (voir la version 1.3.0).

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

2 votes

En fait, ce n'est pas tout à fait vrai. SEULEMENT si un rebasement ne fonctionne pas, il essaie de faire une fusion.

0 votes

Le lien vers les notes de publication est cassé.

2 votes

@JorisMeys Je ne suis pas sûr que votre affirmation soit vraie. D'après mon expérience, s'il y a cualquier des commits en avance sur le mien à distance, il créera un commit de fusion, même s'il pourrait faire un rebase.

17voto

redhotvengeance Points 5661

"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'avait 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 l'était a expliqué par Phil Haack). "Sync" est juste un raccourci pour que le local et le distant se reflètent l'un l'autre.

De la 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.

0 votes

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 mauvais, pull avant push.

2 votes

@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 branche distante était en avance sur votre branche 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.

0 votes

Est-ce que github sync récupère également les modifications en amont, en plus d'origin. Par exemple, j'ai créé un dépôt, et j'ai un clone local du dépôt, mais ce que je veux vraiment, ce sont les changements en amont, et pas seulement ceux de l'origine.

4voto

Ashwin Sinha Points 41

Pour compléter les propos de @ethanyang réponse ,

Selon l'alias configuré dans le gitconfig,

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

4 votes

Juste par curiosité, que signifie le ! dans la ligne ci-dessus ?

0 votes

@ScottRomack cela signifie qu'elle est traitée comme une commande shell : stackoverflow.com/questions/21083933/

0 votes

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 ma configuration globale. .gitconfig . Ou s'agit-il simplement d'une dérogation de votre part ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X