2010-10-16 9 views
1

J'ai un projet dans Codeigniter, géré via Git et Github, qui consiste en mes personnalisations et librairies «standard» (comme une bibliothèque de rendu centralisée) que j'utilise pour tous mes projets CI - Appelons cela «Baseline».S'engager dans deux projets distants de Git

En même temps que je développe et affine le projet Baseline CI, je développe également le projet client actuel, que nous appellerons 'Client'.

Ma question est - quel est le moyen le plus efficace pour développer le projet de base et le projet client simultanément? Par exemple, je peux créer un nouveau contrôleur et un nouveau modèle dans le projet Client, puis ajouter de nouveaux assistants, des vues génériques et ajouter à quelques bibliothèques que je pense avoir besoin d'ajouter à Baseline. Dois-je effectuer deux validations, une pour la ligne de base (et l'envoyer au repo Baseline distant), puis une nouvelle validation pour le projet client? J'ai essayé de comprendre comment utiliser les sous-modules ou les branchements pour accomplir la même chose, mais les sous-modules semblent avoir besoin de leur propre structure de répertoires dans Git, et avec les branchements, je ne sais pas comment cela fonctionnerait.

Aide?

Répondre

2

Depuis que je devine la configuration séparée répertoire-structures qui ont besoin est sous-modules sans aller pour vous, voici ce que je suggère à la place:

  1. Demandez à un référentiel (A) qui est votre projet "de base". Faites tout votre travail sur la ligne de base dans ce référentiel, et validez-le là. Clonez ce référentiel vers un autre, (B), et effectuez tout votre travail pour le projet client à cet endroit (

  2. ). Conserver (A) en tant que distant (si vous git clone (A), il sera automatiquement défini comme origin, vous pouvez ajouter la télécommande github comme github au lieu de origin). Ensuite, lorsque vous effectuez des mises à jour dans le référentiel (A) de base, validez-les sur (A), puis utilisez git pull pour les extraire de (A) vers (B). (Ne poussez jamais de (B) à (A), puisque vous ne voulez pas de code client dans la prise en pension de base.)

Alors oui, vous devez valider vos mises à jour de base et votre client mises à jour séparément, mais vous n'aurez pas à valider le même code deux fois.

+0

J'avais envisagé cette option, et je pense que c'est peut-être la seule façon d'y aller, donc +1 - mais je veux garder la question ouverte pour savoir si je peux le faire avec un seul repo, depuis la commutation entre deux en montage est une douleur, mais pas insurmontable. –

+0

La seule autre option que je pourrais envisager serait d'avoir des dépôts git imbriqués qui * ne sont pas * des sous-modules - comme dans, '/ a/.git /' et '/ a/b/.git', avec'/a/.gitignore' ignorant tous les fichiers du client seulement. Ensuite, cependant, vous rencontrez le problème d'avoir à tout commettre deux fois - sans parler de la confusion qui pourrait survenir en raison de la résolution du référentiel dans lequel vous êtes "in". – Amber

1

Je recommanderais d'utiliser des branches ou des sous-modules. Avec les branches, vous avez une branche baseline et une branche client. Chaque fois que vous passez à client après la mise à jour baseline, fusionnez baseline en client.

Avec les sous-modules, l'un ou l'autre référentiel pourrait être le module de premier niveau, l'autre étant son enfant. Les deux dispositions ont un sens logique (avec baseline en haut, client en dépend et est donc un enfant, avec client en haut, il utilise baseline comme une bibliothèque, ce qui devrait être l'enfant, c'est à vous de décider).

Je recommanderais la ramification, cependant.

Questions connexes