2012-05-04 4 views
2

Voici mon problème. La société pour laquelle je travaille a commencé avec un seul site Web, basé sur osCommerce (bien avant que je ne sois venu). Le site a grandi, ils ont commencé une seconde en copiant le premier, et en le modifiant si nécessaire. Cela a continué au fil des ans, à l'endroit où nous avons maintenant cinq sites distincts, tous basés sur le même code. Lorsque nous apportons une modification à un site, je dois actuellement copier manuellement ces modifications dans le code de tous les autres sites et télécharger tous les codes modifiés sur chacun des sites.Combinaison de plusieurs sites dans un seul Git Repo

Ceci est très inefficace et me rend fou. Je sais que Git est conçu pour résoudre de tels problèmes. À l'heure actuelle, j'ai chaque site comme son propre dépôt Git, mais je suis toujours obligé de copier les modifications d'un à tous les autres. Je suis aussi assez nouveau pour Git. Je reçois des commits, des branches, tire, etc. mais sinon je suis plutôt vert.

Y at-il de toute façon que je puisse combiner tous ces sites en un seul repo, et comment le ferais-je? Je dois également souligner que les fichiers de chaque site ne sont pas nécessairement identiques. Un site est considéré comme une priorité, de sorte que certaines modifications ont été apportées en cas d'urgence qui n'ont pas été déployées sur les autres sites, et une autre est légèrement différente des 4 autres, de sorte que le code diffère légèrement à certains endroits. . Je me rends compte que cela provoquera des conflits, mais j'aimerais pouvoir trouver tous les conflits, les résoudre pour que le système fonctionne comme prévu, et que toutes les variantes soient basées sur des bases de données/options. Le patron veut déployer au moins deux autres sites dans quelques mois, alors à ce moment-là, je vais vraiment perdre la tête.

Est ce que je veux même possible? Est-ce que cela me demandera de passer en revue chaque fichier pour résoudre les conflits? Toute aide est très appréciée!

+0

Mettre des fichiers non liés dans le même référentiel, même avec du code partagé, n'est pas une bonne idée. Vous aurez leurs histoires combinées, restreindre les devs à certains dépôts serait presque impossible, etc. L'approche la plus intelligente serait de faire un repo pour le code partagé ** et ** chaque site, et utiliser 'git submodule' pour inclure le partage code à chaque site. Dans ce cas, votre code partagé doit être complètement découplé de tout site spécifique. – KurzedMetal

Répondre

1

Si vous voulez les fusionner ensemble, vous devrez abandonner l'historique des révisions pour certaines versions.

  1. Choisissez une version comme point de départ.
  2. Créez un clone du référentiel de cette version pour chaque version de votre site, y compris l'original.
  3. Supprimez le contenu de chaque clone, mais laissez le dossier .git intact.
  4. Copiez le contenu de chaque version (sauf .git) dans la copie correspondante.
  5. Commit

Cela vous laissera avec une branche pour chaque version du site, plus une branche principale des changements communs. Chaque branche aura maintenant un ancêtre commun. Lors de la fusion, vous devez veiller à ne pas écraser une version avec des modifications d'une autre version. Pour faciliter cela, toutes les modifications qui seront partagées entre les sites doivent être effectuées dans la branche principale, puis fusionnées dans les différentes versions. Vous devrez toujours faire attention lors de la fusion, et vous devrez probablement utiliser la fonction de sélection des cerises du git pour déplacer des changesets individuels. Vous aurez certainement besoin de choisir quand vous apporter des changements de l'une des branches non maîtres.

Vous pourriez rendre les choses plus faciles si, avant de commencer, vous remaniez votre branche de départ pour qu'elle ait moins de code spécifique au site.

+0

Merci Mike! C'est en fait beaucoup plus simple que ce à quoi je m'attendais, et cela donne un sens surprenant à ce Git n00b. Perdre l'historique des révisions n'est pas un gros problème, car ils ont à peu près tous des histoires identiques de toute façon. – nathangiesbrecht

+0

@nathangiesbrecht, n'oubliez pas, vous devrez ajouter manuellement tous les fichiers qui n'existent pas dans la branche d'origine. – mikerobi

Questions connexes