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

Je consortingbue à un assez petit projet open source hébergé sur Github. Pour que d'autres personnes puissent profiter de mon travail, j'ai créé ma propre fourchette sur Github. Malgré le choix de la terminologie de Github, je ne souhaite pas totalement diverger du projet principal. Cependant, je ne m'attends pas à ce que tout mon travail soit accepté dans le référentiel principal. Certains d'entre eux ont déjà été fusionnés dans le référentiel principal et je m'attends à ce que cela continue. Le problème que je rencontre est la meilleure façon de garder nos deux trees dans un état où le code peut être facilement partagé entre eux.

Certaines situations que j'ai ou que je rencontrerai include:

  • Je valide le code qui est accepté plus tard dans le repository principal. Lorsque je tire à partir de ce référentiel à l'avenir, mon commit est dupliqué dans mon repository.
  • Je commets un code qui n'est jamais accepté dans le repository principal. Quand je tire à partir de ce référentiel à l'avenir, les deux trees ont divergé et la fixation est difficile.
  • Une autre personne vient et fonde son travail sur mon référentiel. Ainsi, je devrais si possible éviter de changer les commits que j'ai poussés, par exemple en utilisant git rebase.
  • Je souhaite soumettre le code au référentiel maître. Idéalement, mes changements devraient facilement pouvoir être transformés en patches (idéalement en utilisant git-patch-patch) qui peuvent directement et proprement s'appliquer au référentiel maître.

Autant que je sache, il y a deux ou peut-être trois façons de gérer cela, mais aucune ne fonctionne particulièrement bien:

  • Exécutez fréquemment git rebase pour conserver mes modifications en fonction de la tête du référentiel en amont. De cette façon, je peux éliminer les commits dupliqués, mais je dois souvent réécrire l'histoire, ce qui pose des problèmes aux personnes qui veulent tirer leur travail du mien.
  • Fusionner fréquemment les modifications du référentiel en amont dans le mien. Cela fonctionne bien pour ma part, mais ne semble pas faciliter la soumission de mon code au référentiel en amont.
  • Utilisez une combinaison de ceux-ci et éventuellement git cherry-pick pour garder les choses en ordre.

Qu'ont fait les autres dans cette situation? Je sais que ma situation est analogue à la relation entre les différents consortingbuteurs du kernel et le référentiel principal de Linus, donc j'espère qu'il y a de bonnes façons de gérer cela. Je suis assez nouveau à git cependant, donc n'ai pas maîsortingsé toutes ses nuances. Enfin, surtout en raison de Github, ma terminologie peut ne pas être entièrement cohérente ou correcte. N'hésitez pas à me corriger.

Solutions Collecting From Web of "Meilleures pratiques pour les référentiels git sur des projets open source"

Quelques conseils que j'ai appris d'une situation similaire:

  • Avoir une twig de suivi à distance pour le travail de l'auteur en amont.
  • Tirez des changements de cette twig de suivi dans votre twig principale de time en time.
  • Créez une nouvelle twig pour chacun des sujets sur lesquels vous travaillez. Ces twigs devraient généralement être locales seulement. Lorsque vous obtenez des modifications de l'amont vers le maître, modifiez vos twigs de sujet pour refléter ces changements.
  • Lorsque vous avez terminé avec un travail de sujet, fusionnez dans le maître. De cette façon, les personnes qui dériveront le travail du vôtre ne verront pas trop l'histoire réécrite, puisque le rebasage s'est produit dans vos twigs thématiques locales.
  • Soumettre des changements: Votre twig principale sera fondamentalement une série de commits, dont certains sont les mêmes qu'en amont, le rest est à vous. Ce dernier peut être envoyé en tant que correctifs si vous le souhaitez.

Bien sûr, votre choix de noms de twigs et de télécommands vous appartient. Je ne suis pas sûr que ceux-ci soient exhaustifs au scénario, mais ils couvrent la plupart de mes obstacles.