web-dev-qa-db-fra.com

Travailler avec git sur plusieurs machines

Cela peut sembler un peu étrange, mais je m'interroge sur un bon moyen de travailler en git de plusieurs machines en réseau, ensemble d'une manière ou d'une autre. Cela me semble que j'ai deux options et je peux voir des avantages des deux côtés:

  • Utilisez GIT elle-même pour le partage, chaque machine a son propre repo et vous devez les chercher entre eux.
    • Vous pouvez travailler sur une machine même si l'autre est hors ligne. Ceci en soi est assez gros je pense.
  • Utilisez un repo partagé sur le réseau entre les machines. [.____]
    • Pas besoin de faire des tirages git chaque fois que vous changez de machines, car votre code est toujours à jour.
    • Ne vous inquiétez jamais que vous avez oublié de pousser le code de votre autre machine sans hébergement, qui est désormais hors de portée, puisque vous travaillez sur une base de fichier sur cette machine.

Mon intuition dit que tout le monde va généralement avec la première option. Mais l'inconvénient que je vois, c'est que vous ne pourriez peut-être pas toujours accéder au code de vos autres machines, et je ne veux certainement pas pousser toutes mes branches de WIP à Github à la fin de chaque jour. Je ne veux pas non plus avoir à quitter mes ordinateurs tout le temps afin que je puisse les récupérer directement. Enfin, un point mineur est que toutes les commandes GIT pour conserver plusieurs branches à jour peuvent être fastidieuses.

Y a-t-il une troisième manche sur cette situation? Peut-être que certains outils tiers sont disponibles pour faciliter ce processus? Si vous traitez de cette situation régulièrement, que suggérez-vous?

16
Tesserex

Je traite quotidiennement avec vos deux solutions proposées. Il y a deux concepts clés pour bien les traiter.

  1. Utilisez des succursales. Je pense que l'historique de production devrait être vierge. En conséquence, je passe beaucoup de temps à faire mon production Historique de la succursale logique, reproductible et déburgible. Lorsque vous utilisez plusieurs machines, vous devez occasionnellement vous engager de travailler en cours. Utilisez une succursale. Vous pouvez pull et Push cette branche des deux machines avec peu d'effort, et quand il est prêt à fusionner dans master ou productionRebase It créer une histoire plus maintenable.
  2. L'utilisation d'un seul repo partagé sur un réseau est correcte, sauf si vous ne le partageez pas avec d'autres utilisateurs. Nous utilisons un référentiel partagé pour les scripts, nommé de manière créative le scripts référentiel. Au début, cela semblait une bonne idée car le repo ne change pas souvent, mais au fil du temps, il est devenu un cauchemar. Il est facile de remplacer le travail des uns des autres et vous finissez par dépenser autant de temps à contrôler le trafic aérien qui déploie le référentiel comme vous y travaillez.

La meilleure solution consiste à maintenir un référentiel local sur chaque machine et à partager des succursales entre eux via une télécommande. Commettre le travail dans ces succursales aussi souvent que vous le souhaitez. Tant que vous êtes prêt à rebase les dans une histoire plus intelligible, c'est assez efficace dans la pratique.

Si vous vous trouvez travailler sur plus d'une succursale tout au long de la journée mais que vous ne voulez pas pousser chacun individuellement à la télécommande, git Push <remote> volonté par défaut, poussez toutes les branches correspondantes à <remote>. Ceci Par défaut changera dans une version ultérieure de GIT , mais peut être remplacé par réglage Push.default Dans un fichier de configuration ou en spécifiant la correspondance refspec:

git Push <remote> :
15
Christopher

Si toutes les machines ne sont pas debout tout le temps, il n'y a pas de balle d'argent: avant de fermer la machine, vous devez pousser les changements ailleurs. J'appuie sur un serveur privé, mais il pourrait aussi bien être Dropbox ou une clé USB que vous transportez partout.

Oui, poussant plusieurs branches à un endroit central peut devenir fastidieux, mais cela ne devrait pas être trop difficile pour le script. J'utilise un Push.sh Script pour cela, que je cours à chaque fois que j'ai fini de travailler sur une machine.

3
janos

Je suis venu à cela d'une direction légèrement différente (et j'utilise mercurial, mais philosophiquement c'est la même). Ce n'est pas mon idée, je viens de l'utiliser et ça marche pour mes trucs personnels.

J'ai créé un clone de mes référentiels dans un dossier SkyDrive (cela pourrait également être DropBox ou un autre outil de synchronisation magique de votre choix), j'ai ensuite configuré les instances sur mes deux machines pour appuyer automatiquement au référentiel SkyDrive sur Engage.

Lorsque je change de boîtes, il suffit d'effectuer une traction et une mise à jour - en théorie, vous travaillerez toujours de manière linéaire, même si c'est dans plusieurs référentiels.

La clé ici est que le SkyDrive Repo existe principalement pour fournir un moyen de veiller à ce que j'ai accès à plus ou moins la dernière version du code sur mes deux machines - bien que cela fonctionnerait également pour plus de détails. Sauvegarde supplémentaire. Tout ce qui est "fait" est poussé au four (si j'utilisais Git et je comprends correctement la façon dont le jeu est joué alors ce serait point auquel je fais une boîte de rebas).

Ce que je ne voudrais vraiment pas faire est d'exécuter un dossier partagé ... Si vous utilisez un DVCS, vous pouvez également profiter de l'avantage.

2
Murph