Dois-je ajouter le Django de migration de fichiers dans le .gitignore fichier?
Dois-je ajouter le Django de migration de fichiers dans le .gitignore
fichier?
J'ai récemment reçu beaucoup de git problèmes en raison de conflits de migration et je me demandais si je devrais être de marquage des fichiers de migration comme ignorer.
Si oui, comment pourrais-je aller sur l'ajout de tous les migrations que j'ai dans mes applications, et de les ajouter à la .gitignore
fichier?
Vous devez vous connecter pour publier un commentaire.
Citant le Django migrations de la documentation:
Si vous suivez ce processus, vous ne devriez pas obtenir les conflits de fusion dans les fichiers de migration.
Pour atténuer les problèmes que vous avez actuellement, vous devez spécifier le référentiel ou de la branche a la version authentique de la migration des fichiers, et ensuite utiliser git est un attribut mécanisme pour spécifier la fusion de la stratégie de "l'ours" de ces fichiers. Cela permettra d'indiquer à git d'ignorer externe des modifications à ces fichiers et préférez la version locale.
makemigrations some_app
, non seulement les modèles, en vertu de ce membre de contrôle seront affectées, mais aussi d'autres modèles seront touchés eux aussi. Qui est, les migrations des fichiers (00*_*) dans d'autres applications pourront être modifiés. Et qui provoque de nombreux problèmes de conflit de cours en poussant ou en tirant à partir de GitHub. Puisque, actuellement, notre système n'est pas prêt pour la production, nous avons juste.gitignore
le fichier de migration. Nous ne savons toujours pas comment le résoudre lors de la mise en service du système de production. Quelqu'un a des solutions?Pas.
J'ai été à de nombreuses reprises et je ne peux pas, pour la vie de moi, de trouver un cas où nous avons besoin de migrations dans le repo.
Comme je le vois, l'définitif du schéma est
models.py
. Si je fusionne un changement et quelqu'un d'autre tire, tout sera correct lors de l'exécution desmakemigrations
etmigrate
. Il n'y a pas besoin de définir ce que la stratégie de "l'ours" est pour les migrations.Si nous devons revenir en arrière, alors on repassera
models
et de migrer. Tout bon, pas de problèmes, jamais.Pas de se plaindre qu'un champ existe déjà, etc.
Je me demande si quelqu'un peut me donner un cas particulier où c'est un avantage pour moi d'avoir à fusionner un autre développeur migrations fichiers avant que je puisse me mettre au travail. Je sais que les docs disent que je devrais le faire, donc je suppose que c'est ainsi. Mais je n'ai jamais rencontré un seul.
Quelqu'un?
makemigrations
etmigrate
. Les modifications apportées à la db sont faites, toutes les données sont toujours là.makemigrations
etmigrate
.migrate
ne fonctionne qu'avec un cerveau morts migration simple, où vous êtes en train de faire quelque chose comme la création d'un nouveau champ/de table, ou de la suppression d'un ancien. Pour quelque chose de plus compliqué, vous aurez généralement besoin d'un couple de schéma les migrations d'une migration de données dans le milieu.fixtures
fichiers. docs.djangoproject.com/en/1.10/howto/initial-data*/migrations/*
à mon.gitgnore
et poussé mon code. Le développeur qui a tiré le code à l'autre bout et a courumakemigratons
aiNo changes detected
etNo migrations to apply
. Je suis vraiment surpris de voir que personne n'a mentionné nulle part. Si vous ne validez pas votre migrations, django n'a pas de ramasser des changements de modèle, etc que ce soit. Pas même une douce clone peut vous aider avec ça. Dites-moi si je me manque quelque chose ici?Vous pouvez suivre les étapes ci-dessous.
Vous pouvez exécuter
makemigrations
localement et cela crée le fichier de migration. Commettre ce nouveau fichier de migration des pensions.À mon avis vous ne devez pas exécuter
makemigrations
de la production à tous. Vous pouvez exécutermigrate
dans la production et vous verrez les migrations sont appliqués à partir du fichier de migration que vous avez commis de locaux. De cette façon, vous pouvez éviter tous les conflits.EN LOCAL ENV, pour créer les fichiers de migration,
Maintenant commettre ces fichiers nouvellement créés, quelque chose comme ci-dessous.
DANS la PRODUCTION ENV, seulement exécuter la commande ci-dessous.
migrate
et JAMAISmakemigrations
d'engagement pour les migrations. Jamais pensé à ça.Devis à partir de 2018 docs, Django 2.0. (deux commandes séparées =
makemigrations
etmigrate
)https://docs.djangoproject.com/en/2.0/intro/tutorial02/
Je ne peux pas imaginer pourquoi - vous aussi sur les conflits, sauf si vous modifiez les migrations en quelque sorte? Que se termine généralement mal si quelqu'un manque intermédiaire s'engage alors ils ne seront pas mise à jour depuis la version correcte, et leur copie de la base de données est endommagé.
Le processus que j'ai suivi est assez simple: chaque fois que vous modifiez les modèles pour une application, vous pouvez également engager une migration, et puis que la migration ne change pas - si vous avez besoin de quelque chose de différent dans le modèle, alors vous changer de modèle et de s'engager une nouvelle migration à côté de vos modifications.
Dans la création de nouveaux projets, vous pouvez généralement supprimer les migrations et recommencer à partir de zéro avec un 0001_ migration lorsque vous relâchez le bouton, mais si vous avez un code de production, alors vous ne pouvez pas (mais vous pouvez squash migrations vers le bas dans une).
La solution généralement utilisée, c'est que, avant tout est fusionné dans le maître, le maître d'ouvrage doit tirer toutes les modifications distantes. Si il y a un conflit dans la migration de versions, il est conseillé de renommer son local de la migration (la télécommande a été exécuté par d'autres développeurs, et, potentiellement, de la production), pour N+1.
Au cours du développement, il pourrait être bon tout simplement pas s'engager migrations (n'ajoutez pas l'ignorer si, il suffit de ne pas
add
eux). Mais une fois que vous êtes allé en production, vous aurez besoin afin de garder le schéma en synchronisation avec les changements de modèle.Ensuite, vous devez modifier le fichier et modifier le
dependencies
à la dernière version à distance.Cela fonctionne pour Django migrations, ainsi que d'autres applications similaires (sqlalchemy+alambic, RoR, etc).
Se sent comme vous l'auriez besoin d'ajuster votre git flux de travail, plutôt que d'ignorer les conflits.
Idéalement, chaque nouvelle fonctionnalité est développée dans une autre branche, et fusionnée avec une pull request.
PR ne peuvent pas être fusionnées si il y a un conflit, donc qui doit fusionner ses besoins pour résoudre les conflits, les migrations inclus.
Réponse courte
Je propose à l'exclusion des migrations dans le repo. Après le code de fusion, il suffit d'exécuter
./manage.py makemigrations
et vous êtes tous ensemble.Réponse longue
Je ne pense pas que vous devriez mettre des migrations des fichiers dans des pensions. Il va gâcher la migration des états dans d'autres personne environnement de dev et autres prod et le stade de l'environnement. (reportez-vous à Sucre Tang commentaire pour des exemples).
À mon point de vue, le but de Django migrations est de trouver des écarts entre le modèle précédent, les états et le nouveau modèle d'états, et puis serialise l'écart. Si votre modèle de changements après le code de fusion, vous pouvez simplement faire
makemigrations
de trouver l'écart. Pourquoi voulez-vous manuellement et minutieusement fusionner d'autres migrations, quand vous pouvez obtenir le même automatiquement et sans bug? Documentation de Django dit,; veuillez garder de cette façon. Pour fusionner des migrations manuellement, vous devez comprendre ce que les autres ont changé et toute dépendance de l'changements. C'est beaucoup de frais généraux et sujettes à erreur. Donc des modèles de suivi des fichier est suffisant.
C'est un bon sujet sur le flux de travail. Je suis ouvert à d'autres options.
manage.py makemigrations --merge
fonctionne de manière entièrement automatique pour moi.Avoir un tas de fichiers de migration dans git est en désordre. Il n'y a qu'un seul fichier dans la migration de dossiers que vous ne devriez pas ignorer. Ce fichier est init.py fichier, Si vous l'ignorez, python n'attendons plus submodules à l'intérieur du répertoire, de sorte que toute tentative d'importer les modules vont échouer. Donc, la question doit être comment ignorer tous les fichiers de migration mais init.py?
La solution est:
Ajouter '0*.py' pour .gitignore fichiers et il fait le travail parfaitement.
Espère que cela aide quelqu'un.
Gitignore les migrations, si Vous avez séparée de la DBs pour le Développement, la mise en scène et l'environnement de Production. Pour les dev. Vous pouvez utiliser sqlite DB et jouer avec les migrations à l'échelle locale.
Je Vous recommande de créer quatre autres branches:
Maître - Propre frais code sans migrations. Personne n'est connecté à cette branche. Utilisé pour des revues de code seulement
De développement - le développement quotidien. Push/pull accepté. Chaque développeur travaille sur sqlite DB
Cloud_DEV_env - nuage à distance/serveur en environnement de DEV. Tirez seulement. Garder les migrations en local sur la machine, qui est utilisé pour le déploiement du code à distance et de migrations de Dev de la base de données
Cloud_STAG_env - nuage à distance/serveur CERF environnement. Tirez seulement. Garder les migrations en local sur la machine, qui est utilisé pour le déploiement du code à distance et de migrations de Cerf de la base de données
Cloud_PROD_env - nuage à distance/serveur en environnement de DEV. Tirez seulement. Garder les migrations en local sur la machine, qui est utilisé pour le déploiement du code à distance et de migrations de Prod de la base de données
Notes:
2, 3, 4 - migrations peuvent être gardés en repos, mais il devrait y avoir des règles strictes de tirer les demandes de fusion, nous avons donc décidé de trouver une personne, responsable de déploiements, de sorte que le seul mec qui a tous les fichiers de migration - notre déployer-er. Il tient la distance DB migrations à chaque fois que nous avons tous les changements dans les Modèles.