Synchronisation de toutes les branches avec git
Je pousse code à partir de deux sites principaux: mon PC à la maison et sur mon portable au travail. J'utilise Github pour stocker mon repos.
C'est le scénario: j'ai fait quelques travaux dans mon PC sur un référentiel qui j'ai travaillé pendant un certain temps (à la fois dans mon PC et mon portable), et s'est terminée avec les branches suivantes:
$ git branch
* master
* v123
* test-b
qui j'ai poussé à Github. So far So good.
Maintenant, je suis sur mon portable et c'est ce que je vois avant de tenter de retirer quoi que ce soit:
$ git branch
* master
* v_123
C'est une vieille version de mon repo dans mon portable (car je travaille dans mon PC) où les différences sont les suivantes: une branche est manquant (test-b
), une autre a été re-nommé, ou, de manière équivalente supprimé et recréé avec un nouveau nom (c'est à dire: v_123
est maintenant v123
), et beaucoup de choses ont changé, peut-être dans toutes les branches.
Je souhaite synchroniser toutes mes branches dans mon ordinateur portable, et de les avoir suivies correctement. J'ai regardé deux des plus voté questions concernant la branche de clonage/récupération (Comment cloner toutes les branches de Git?; Comment récupérer toutes les branches git) et maintenant je suis un peu perdu.
Est-il facile à utiliser git sync-branch --all
de commande qui peut être utilisé pour synchroniser mon portable avec le dernier état de la mise en pension dans Github?
mais qu'est ce que j'ai ne pas vous voulez faire, c'est à dire: mettre à jour manuellement chaque branche locale un à la fois. Je veux que mon repo être complètement synchronisés avec une seule commande. Est-ce pas?
Lorsque vous synchronisez votre repo est complètement synchronisés. Si vous utilisez
git branch -r
vous pouvez voir toutes les références exactement comme ils sont sur la télécommande. git branch
est de vous montrer les trucs de ce qui est local pour que les pensions de titres.Quand j'ai sync? Quand suis-je la synchronisation? C'est précisément la question.
git fetch
. Cela permettra de mettre à jour vos références à distance, et en outre apporter tous les objets requis (s'engage, les arbres, les gouttes, etc). Toujours git fetch
d'apporter un référentiel à jour. Ce que vous faites avec votre local de travail à ce point est préférable de traiter sur une branche par branche.OriginalL'auteur Gabriel | 2014-11-26
Vous devez vous connecter pour publier un commentaire.
Pas sûr, c'est ce que vous attendez.
Les commandes ci-dessus permettra de synchroniser la télécommande repo local sur le repo. Après l'exécution de la commande ci-dessus, votre local repo sera comme une image miroir de votre télécommande repo.
Si vous souhaitez conserver les modifications que unstaged fichiers, utilisez
--soft
au lieu de--hard
.Lemme savez, si toutes les questions.
git fetch origin
et simplementgit fetch
? Vagit reset --hard origin/master
ne synchroniser que lesmaster
de la succursale ou de tous les autres aussi?OriginalL'auteur Breen ho
Vous ne pouvez pas voir toutes les modifications apportées sur la télécommande avant de tenter de retirer quoi que ce soit. Vous devez extraire de distance de la première.
Il y a une raison pour cela. Git est décentralisée. Chaque dépôt contient-il de la copie complète. Cela signifie que vous pouvez créer un clone du dépôt sur votre disque. Et cela signifie également que vous pouvez travailler en mode hors connexion, à moins que vous commande pour la synchronisation. En fait, la manière dont git est faite vous oblige à travailler presque entièrement hors ligne, sans compter les moments que vous poussez ou chercher. D'autre part, vous avez le plein contrôle et rien ne se passe sans vous le dire explicitement.
Comment le faire? C'est pourquoi
git pull
existe. Il effectue deux opérations. Tout d'abord, il récupère toutes les branches de la télécommande (équivalent àgit fetch
). Ils sont enregistrés comme<remote>/<branch>
et ne figurant pas sur la liste des branches par défaut (écraser avec-a
). Puis, elle se confond actuellement avec la branche active avec un suivi de la branche.Maintenant, si vous voulez avoir une branche distante suivi, puis il suffit de caisse après ouverture. Il va créer à partir de la dernière version synchronisée et doit mettre tout en place. Si vous souhaitez définir nonpublished branche locale d'effectuer un suivi à distance, l'utilisation
git push
avec-u
drapeau. Il sera fixé en amont de la direction générale, à pousser la cible.EDIT:
Si votre objectif est de mettre à jour tous les suivis des branches à la fois, avec une seule commande? Pas ceux
<remote>/<branch>
, mais vos branches locales, sans appel tirez sur chaque un seul d'entre eux, maintenant je comprends bien?Malheureusement, il est impossible de le faire avec git seul. Mais il y a une extension qui fait exactement cela. À partir de la description du projet
Vous pouvez le trouver ici http://aanandprasad.com/git-up/
Quand vous l'utilisez, avec la commande
git up
, il permettra de ranger vos modifications en cours, de récupérer toutes les télécommandes, puis rebase de toutes les branches de l'état de suivi à distance et unstash changements. Je crois que c'est le mode de synchronisation que vous voulez.J'ai édité réponse, est-ce ce que vous recherchez?
OriginalL'auteur Wikiii122
J'ai eu un problème similaire:
Après la recherche d'un lot pour une solution simple, j'ai fini avec mon propre (pas si simple) solution, basée sur une série de git alias (code à ajouter à la
.gitconfig
fichier): https://gist.github.com/arnauldvm/dcec7ee043c25dce30dbae1b576f2102⚠ C'est frais code, n'ont pas encore été largement testé.
Utilisation:
git sync
Quelques explications:
→ Cela permettra de récupérer tous les locaux de suivi des branches et la distance correspondante de la branche, les deux points séparés.
→ Ces vérifiera qu'il n'y a pas des changements en cours dans le workdir.
→ Cela prend 2 arguments (une branche locale et une branche distante), il sera de la caisse de la succursale locale et de fusionner avec la branche distante. Il utilise
--ff-only
pour éviter la création de commettre fusionne ⇒ En cas de divergence de la succursale locale, il sera question d'un "fatal: impossible d'avancer rapidement, l'abandon." message sur STDERR.→ Récupérer le nom de la branche en cours d'extraction. Sera utilisé pour mettre le workdir de retour à son état initial, à la fin.
→ C'est la partie principale. Nous allons diviser cela en deux parties: l'
→→ Abandonne la commande si il est en attente de travail dans le workdir.
→→ Stocke le nom de la direction générale de contrôle.
→→ Synchronisation à distance des branches de toutes les télécommandes (
--all
).→→ Itère sur chaque local de suivi de la branche.
→→ Souligne les erreurs (contenant 'fatale' mot-clé). Le "3>,&1 1>&2 2>&3" formule magique échanges STDOUT et STDERR, il est nécessaire d'être en mesure de pipe STDERR de la commande egrep.
→→ Restaurer le workdir à son état initial.
OriginalL'auteur Arnauld VM