35 votes

Meilleures pratiques pour les référentiels git sur des projets open source

Je suis en contribuant à un assez petit projet open source hébergé sur Github. De sorte que d'autres personnes puissent profiter de mon travail, j'ai créé ma propre fork sur Github. Malgré Github est le choix de la terminologie, je ne souhaite pas totalement écarter de l'objectif principal du projet. Cependant, je ne m'attends pas, ou le désir, que l'ensemble de mon travail est accepté dans le dépôt principal. Certains de il cependant, a déjà été fusionnées dans le dépôt principal et je m'attends à continuer. Le problème, je suis en cours d'exécution en est la meilleure façon de garder nos deux arbres dans un état où le code peut être partagé entre eux facilement.

Certaines situations que j'ai ou seront rencontrés comprennent:

  • Je remets le code qui est ensuite accepté dans le référentiel principal. Quand je tire à partir de ce référentiel dans l'avenir, mon commit est dupliqué dans mon référentiel.
  • Je remets le code qui n'est jamais accepté dans le dépôt principal. Quand je tire de ce référentiel dans l'avenir, les deux arbres ont divergé et de fixation, il est difficile.
  • Une autre personne arrive et les bases de leur travail sur mon référentiel. Donc, je devrais évitez si possible de les changer s'engage à ce que j'ai poussé, par exemple par l'utilisation de git rebase.
  • Je désire transmettre des code le référentiel maître. Idéalement, mes changements devraient facilement être transformé en plaques (idéalement à l'aide de git format-patch) qui peuvent directement et proprement appliquer le référentiel maître.

Aussi loin que je peux voir, il y a deux, ou peut-être trois façons de gérer cette situation, mais aucun qui fonctionnent particulièrement bien:

  • Souvent lancez la commande git rebase pour garder mes modifications en fonction de la tête amont du dépôt. De cette façon, je peux éliminer le dédoublement s'engage mais souvent à réécrire l'histoire, à l'origine des problèmes pour les gens qui veulent tirer leur travail de la mine.
  • Souvent de fusion en amont des changements de référentiel dans la mienne. Ceci fonctionne bien sur ma fin, mais ne semble pas pour le rendre facile pour soumettre mon code à l'amont du référentiel.
  • Utiliser une combinaison de ces éléments et, éventuellement, git cherry-pick de garder les choses en ordre.

Ce qu'ont d'autres gens faire dans cette situation? Je sais que ma situation est analogue à la relation entre les différents contributeurs du noyau et Linus principal du référentiel, donc j'espère que il ya de bonnes façons de gérer cette situation. Je suis assez nouveau dans git, donc ne maîtrisez pas toutes ses nuances. Enfin, surtout en raison de Github, ma terminologie peut ne pas être totalement compatible ou de corriger. Hésitez pas à me corriger.

19voto

sykora Points 30290

Quelques astuces que j'ai appris à partir d'une situation semblable:

  • Avoir un suivi à distance de la branche de l'amont que de l'auteur.
  • Tirez sur les changements à partir de ce suivi branche dans votre branche master chaque tellement souvent.
  • Créer une nouvelle branche pour chacun des sujets que vous travaillez. Ces branches doivent généralement être en local uniquement. Lorsque vous obtenez des modifications de l'amont en maître, rebase votre sujet branches afin de refléter ces changements.
  • Lorsque vous avez terminé avec un thème de travail, de fusionner en maître. De cette façon, les gens qui sont découlant des travaux de la vôtre, ne va pas voir trop réécrit l'histoire, depuis l'année de référence s'est produite dans votre thème branches.
  • Soumission des changements: Votre branche master sera essentiellement une série de commits, dont certains sont les mêmes qu'en amont, le reste sont les vôtres. Ce dernier peut être envoyé que des correctifs si vous le souhaitez.

Bien sûr, votre choix de noms de branche et les télécommandes sont de votre propre. Je ne suis pas sûr que ceux-ci sont exhaustifs pour le scénario, mais ils couvrent la plupart de mes obstacles.

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