J'ai un référentiel Git dans lequel tout mon code est dans la branche principale, et j'ignorais auparavant tous les fichiers Drupal, de sorte que je gardais une séparation stricte entre le code que j'ai écrit (ou modifié ou pourrait modifier) et le code qui pourrait être généré avec Drush ou autre.
Cela semblait être une bonne stratégie jusqu'à ce que je doive mettre à jour Drupal. J'ai réalisé que je voulais pouvoir revenir en arrière si les choses allaient mal, et quel meilleur outil à utiliser que Git pour le faire. Je me suis dit que ce serait la situation parfaite pour une branche de fonctionnalité, alors j'ai créé une drupal-7.14
branche, lui ai donné la sienne .gitignore
pour ignorer tous mes fichiers de code et de paramètres et faire attention aux seuls fichiers qui font partie de l'installation Drupal que je ne voudrais pas. t toucher. J'ai fait une mise à niveau à la main (télécharger, décompresser, décompresser, copier), triant les cas limites comme robots.txt et .htaccess, et écrasant le .gitignore de Drupal avec le mien. J'ai corrigé certains paramètres qui fonctionnaient avec 7.14 mais pas avec 7.15, pour récupérer d'une erreur 500, puis tout semblait parfait. J'ai renommé la succursale drupal-7.15
et j'allais continuer mon chemin avec bonheur.
Jusqu'à ce que je réalise ce que j'avais fait par inadvertance: les fichiers qui n'étaient pas suivis auparavant par ma branche principale mais laissés dans le répertoire de travail étaient maintenant supprimés du répertoire de travail lorsque j'ai extrait master, car ils n'étaient plus des fichiers non suivis! Oh!
Si je fusionne la drupal-7.15
branche avec master, je perdrai la séparation du code.
Il existe probablement un moyen de convertir une branche en sous-module. En supposant que c'est possible, cela pourrait être la meilleure stratégie. Je savais avant de faire cela que les sous-modules étaient la «bonne» solution, mais comme je ne me rendais pas compte de l'effet secondaire de l'utilisation de branches pour des fichiers non suivis auparavant, j'ai décidé de couper les coins ronds et de suivre cette voie. (De plus, toutes les approches que j'ai vues pour utiliser des sous-modules avec Drupal supposent que vous démarrez un nouveau projet et Drupal sera la branche principale. Il n'est pas souhaitable pour moi de faire du code de quelqu'un d'autre la branche principale, et j'avais déjà un repo avec une branche master. Il semblait que ce serait inutilement compliqué juste de faire une mise à jour.)
Il y a peut-être une autre solution à laquelle je n'ai pas pensé.
Comment puis-je m'en remettre au mieux avec le moins d'inconvénients possibles?
MISE À JOUR : Ceci est en cours de développement (dans une machine virtuelle Linux sur mon ordinateur portable) et n'est pas encore en production. Au moment où nous irons en production, je prévois de tout emballer dans des modules de fonctionnalités, mais ce n'est pas encore en place.
MISE À JOUR 2 : Les sous - modules peuvent ne pas fonctionner. Selon Pro Git , "les sous-modules vous permettent de conserver un référentiel Git en tant que sous-répertoire d'un autre référentiel Git". Drupal n'offre pas une séparation aussi agréable. Au lieu que tout le code Drupal soit dans un sous-répertoire, la relation est plus ou moins inversée, mais il n'y a toujours pas de séparation nette, car vous pouvez modifier votre .htaccess et robots.txt, donc votre code et le dépôt Drupal sont mélangés. Je recherche une solution à ce problème .
la source
Réponses:
Il semble d'après la discussion ci-dessus que votre question ne concerne pas la correction de votre dépôt git, mais la maintenance d'un site Drupal dans git, et comment cela fonctionne avec les mises à jour principales.
Je pense que la pratique standard consiste en fait à conserver tous les fichiers dans votre référentiel, y compris le noyau Drupal. La séparation du code Drupal du code personnalisé semble être une bonne idée, mais je ne pense pas que ce soit nécessaire, et je ne vois pas quels avantages cela vous offre. Il semble également supposer que vous ne voudrez jamais patcher le cœur (ou le faire dans le cadre de votre déploiement), ce qui, bien que ce ne soit pas la meilleure pratique, est certainement quelque chose que vous voulez pouvoir faire si quelque chose se casse en production. Garder vos engagements agréables et concentrés aide également à obtenir ce type de séparation.
La solution que j'ai utilisée est de garder tout le code dans le même référentiel, de le mettre autant que possible dans les fonctionnalités ou d'autres types d'export / code / configuration, et de maintenir une liste des correctifs qui doivent être appliqués à l'extérieur du -box core et contrib.
Lorsque vous mettez à jour le core, démarrez dans votre environnement de développement:
drush sql-dump
). Faites un commit avec le vidage ou enregistrez-le dans un endroit sûr.drush up drupal
)drush updb
en production.git reset --hard HEAD~2
devrait le faire), ou annulez les deux validations si vous souhaitez conserver l'historique. Remplacez votre base de données par le vidage.Le vidage de la base de données est nécessaire car vous ne pouvez pas annuler les modifications apportées à la base de données par des mises à jour. Vous pouvez également effectuer la mise à jour dans une branche, auquel cas le retour signifie simplement extraire le maître. Il est légèrement déconseillé si vous travaillez sur un site de développement, car vous ne pouvez pas vraiment revenir au maître et continuer à y travailler en parallèle à cause de la base de données.
L'utilisation de ce flux de travail git-side plus simple vous permettra d'utiliser toute la puissance de git lorsque vous en avez besoin sans la complication des sous-modules, etc. Si cela ne semble pas suffisant, pourriez-vous expliquer pourquoi vous avez besoin d'une séparation supplémentaire du code?
la source
D'après mes commentaires ci-dessus, cette question concerne la maintenance d'un fichier de site Drupal avec git et comment cela fonctionne avec les mises à jour principales. Vous n'avez rien mentionné sur la sauvegarde et la mise à niveau de la base de données. Je vais essayer de ne rien copier de la réponse de Goron.
J'ai créé un article de blog sur ce problème Mise à niveau du noyau Drupal sur votre site Web avec Git
Méthodes alternatives
Vous ne l'avez pas déclaré, mais si vous souhaitez suivre les changements entre les versions de Drupal, je le ferais en utilisant des balises au lieu de branches . Une fois que vous avez terminé votre mise à niveau engage à maître , étiquette votre code comme 7.x.
la source
J'exécute l'installation avec deux branches, tout comme l'OP: une branche avec mon code personnalisé uniquement, et une branche qui contient à la fois mes fichiers personnalisés et principaux. J'ai rencontré la même situation: les fichiers de base ignorés sont supprimés lors du basculement entre les branches.
J'ai fini par avoir deux répertoires git identiques: - un pour travailler sur mon code personnalisé, avec les fichiers core présents mais ignorés, et je ne basculerais jamais vers la branche "full" dans ce répertoire - un pour effectuer des fusions, de sorte que je effectuer le changement de branche et la fusion dans ce répertoire uniquement.
La raison pour laquelle j'ai choisi cette configuration à deux branches est parce que je veux suivre facilement toutes les validations locales dans les fichiers core, il est plus facile d'examiner et de réappliquer les mods core lors de la mise à niveau des fichiers core.
la source