Gérer plusieurs personnes travaillant sur un projet avec GIT

32

Je suis très nouveau sur GIT / GitHub (aussi récent qu'hier). Je voudrais savoir quelle est la meilleure façon de gérer plusieurs personnes travaillant sur le même projet avec Github. Actuellement, je gère un projet avec quatre développeurs.

  1. Comment puis-je gérer le flux de travail et m'assurer que tout est synchronisé?

    (Remarque: tous les développeurs auront un compte universel.)

  2. Chaque développeur doit-il être sur une branche différente?

  3. Pourrai-je gérer 2 personnes travaillant sur le même fichier?

Veuillez poster une réponse détaillée, je ne suis pas un lecteur timide. Je dois bien comprendre cela.

badZoke
la source
7
Un seul compte pour tous les développeurs? Cela pourrait fonctionner, mais ce n'est probablement pas une bonne idée.
marstato
Cela pourrait valoir la peine d'examiner GitFlow et le développement basé sur les troncs . Personnellement, j'ai eu beaucoup de succès avec ce dernier
J Lewis

Réponses:

29

Si tous les développeurs ont un accès commit au référentiel, vous ne devriez pas avoir à faire quoi que ce soit de spécial. Ils retireront les modifications du référentiel, apporteront leurs propres modifications, s'engageront localement, puis repousseront dans le référentiel public lorsqu'ils auront quelque chose qui fonctionne.

Si d'un autre côté, vous avez un (ou quelques) développeur (s) responsable (s) de la validation du dépôt, et les autres fournissent des correctifs à ceux-ci. Demandez à chacun d'entre eux de cloner le référentiel dans leurs propres comptes et de leur envoyer des pull-request lorsqu'ils ont un changement qu'ils souhaitent dans le référentiel principal.

Il est également possible de créer des clones spécifiques pour travailler sur des fonctionnalités spécifiques si vous le souhaitez. Utiliser le même flux de travail avec des pull-request pour obtenir des modifications dans le référentiel principal lorsque la fonctionnalité est terminée.

Si par «Tous les développeurs auront un compte universel», vous voulez dire que tous les développeurs partageront un compte GitHub et apparaîtront comme le même committer dans le dépôt, c'est une mauvaise idée. Créez des comptes séparés et configurez-les en tant que collaborateurs si vous voulez qu'ils aient tous un accès de validation.

Quant à vos questions spécifiques:

  1. Non, utilisez des branches pour les fonctionnalités, les correctifs, etc. qui prendront plus d'un commit. Plusieurs développeurs peuvent travailler sur la même branche.

  2. Oui, git gère très bien les conflits, donc il n'y a aucun problème à ce que les gens travaillent sur le même fichier. Aucun problème sauf, la résolution des conflits peut ne pas toujours être triviale s'il y a des changements fondamentaux dans un fichier qui a été édité par plusieurs membres. Ce n'est cependant rien qui ne peut être surmonté en parlant ensemble. Le contrôle de version ne remplace pas la communication.

Bonne chance!

harald
la source
Quelques remarques que vous avez faites là-bas sont de véritables révélateurs, m'ont amené à penser dans une direction différente tous ensemble, merci!
badZoke
Hapy si cela peut vous aider. Git et DVCS nécessitent une certaine habitude, mais ils sont extrêmement flexibles une fois que vous vous y êtes habitué.
harald
Merci pour cela. J'avais une question précise. S'il y a plusieurs développeurs travaillant sur la même branche. Chaque fois qu'un des développeurs apporte des modifications et pousse à la branche de travail, les autres développeurs doivent-ils extraire les modifications (pour s'assurer qu'ils ont le dernier code local sur lequel travailler)?
Eswar Rajesh Pinapala
Non, pas à chaque fois, juste au moment où vous souhaitez vous synchroniser. Considérez votre copie locale de la branche comme votre branche privée et la branche en amont comme celle dans laquelle vous souhaitez fusionner. L'utilisation de quelque chose comme git fetch upstreamsuivi de git merge upstream/branchdevrait vous synchroniser sans réécrire votre historique de validation local. Si ce n'est pas un problème, git pull --rebasedéplacez simplement vos modifications locales non poussées vers le haut de la branche en amont.
harald
@badZoke .... ce que vous avez fait pour gérer votre 3ème question (gérer 2 personnes travaillant sur le même fichier) ...
Moumit
25

Nous travaillons avec 2 développeurs et nous utilisons ce workflow:

  • Sur Github, nous avons une branche master et une branche dev
  • La branche principale est identique à la production ou contient du code prêt pour le déploiement
  • La branche dev est en avance sur master et contient tout le nouveau code en cours d'élaboration
  • Localement, nous travaillons tous les deux sur la branche dev et poussons vers github quand quelque chose est prêt
  • L'autre dev récupère tous les nouveaux changements de la branche dev avant de pousser son nouveau code
  • Quand la branche dev est bonne, on fusionne avec la branche master
  • Localement, nous avons plusieurs branches de fonctionnalités, des branches, etc.
John
la source
1
Agréable et simple, merci beaucoup! Je vais commencer par ça, avant de passer aux choses complexes;)
badZoke
Et si, lorsque l'autre développeur récupère les nouvelles modifications, avant de pousser son code, les nouvelles modifications modifient le code qu'il a déjà modifié?
wayofthefuture
+1, c'est en effet le plus simple pour commencer, et fonctionne parfaitement bien. Ce que vous utilisez s'appelle gitflow simplifié: marcgg.com/assets/blog/git-flow-before.jpg
Jelle
5

Je ne vois que des réponses textuelles ici, alors j'ai pensé publier une photo d'un joli gitflow pour commencer. Une image décrit plus de mille mots:

Gitflow simplifié

  • Ce flux fonctionne également bien avec le déploiement continu.
  • Votre branche principale contient du code en cours d'exécution sur votre serveur de production.
  • Votre branche de développement contient du code qui s'exécute actuellement sur un serveur de test / test.
Jelle
la source
+1, git flow ou quelque chose de similaire est probablement la bonne réponse à cette question.
Maybe_Factor
0

Je travaille avec 3 autres développeurs, et nous avons beaucoup de mal avec cela. Les développeurs poussent parfois des validations en production qui ne sont pas encore prêtes pour les heures de grande écoute, car elles impliquent d'autres validations dans leurs modifications, puis poussent en production. Les branches de version semblent fonctionner correctement pour nous. Donc, si la version 1.0 est la version stable actuelle, nous créerons une branche pour le développement v1.1. Les développeurs feront des changements dans cette branche. Notre serveur de test vérifie cette branche et extrait les modifications selon les besoins. Lorsque toutes les fonctionnalités de la v1.1 seront prêtes et que les tests seront terminés, nous fusionnerons la v1.1 avec master et push. Avec les branches, l'équipe de développeurs A peut travailler sur la version 1.1 et l'équipe de développeurs B peut travailler sur la version 1.2. Les deux équipes peuvent travailler sans se toucher. Si l'équipe A développe quelque chose que B peut utiliser,

Nous utilisons également une branche de correctifs qui est utilisée pour des changements immédiats.

Voici un lien vers une image de ce à quoi cela ressemble. http://nvie.com/img/[email protected]

Greg
la source
Cela ne me semble pas comme si vous implémentiez vraiment Git Flow comme prévu - qui consiste à diviser chaque fonctionnalité indépendante ou à la fixer sur sa propre branche, plutôt qu'à chaque version
Brad Thomas