2011-01-07 4 views
1

Windows/MAC/Linux GUI, GUI mobile (minimal), interface web etc.)Mercurial Branches vs Compilation Flags: One Codebase - Multiple Products

De plus, disons que le code partagé ne peut pas être facilement séparé et 'librarifié'. Je considère utiliser des branches nommées mercuriales pour les différents produits (par exemple branches: CLI, Windows, MAC, Linux, Mobile, Web) ou des drapeaux de compilation dans le code (par exemple #if (FRONT_END == CLI) #elif (FRONT_END == WEB) ...).

Je ne suis pas satisfait des deux approches. voici mes griefs:

branches nommées:

  • si je change un morceau de code partagé, je dois fusionner avec toutes les branches. Y at-il une commande hg pour le faire (semi-) automatiquement?
  • il est pas facile/rapide pour voir comment une caractéristique particulière mis en œuvre dans toutes les branches (visualiser les différences dans une zone du code)

drapeaux de compilation:

  • fouillis de code
  • pas d'historique de révision de branche implicite. doit le faire manuellement (validation avec un message indiquant quels sont les produits concernés)

peut vous suggérer:

  • moyens d'atténuer mes états d'âme?
  • un autre point de vue
  • façons élégantes de combiner les deux approches

Thanx

+1

Construisez-vous vos différents frontaux à partir des mêmes projets? Et pourquoi cela aurait-il un impact sur le code partagé? c'est à dire. pourquoi le code partagé doit-il savoir qu'il doit être utilisé dans une application Web par rapport à une application de bureau? –

+1

Quel est le problème avec la séparation du code partagé? –

Répondre

0

Je suppose, je meilleure stratégie pour vous.

Préface: Je farouchement, la haine furieusement branches spaghetti code


ifdef'ed nommés ne sont pas mauvais, mais elle avait des inconvénients de la direction, oui. Après quelques tentatives et échecs, je me suis arrêté sur l'idée "Single codebase + Multiply MQ patches". Avec Mercurial frais, vous pouvez avoir plus d'une queue, vous pouvez utiliser des patches gardés ... comme résultat vous avez un code vanilla - plusieurs (toutes) cibles

Lecture future: "Mercurial: The Definitive Guide", Chapter 12. Managing change with Mercurial Queues et Chapter 13. Advanced uses of Mercurial Queues

Questions connexes