8
votes

Crochet git pour la table DIFF SQLite

J'ai une DB SQLite dans un référentiel git. Aujourd'hui, je voulais faire une différence d'une vue dans deux commits différents. Je l'ai fait de cette façon: xxx

Ça fonctionne et je pourrais scripter si je veux. Mais existe-t-il des "belles" façons de faire cela avec des crochets?


0 commentaires

3 Réponses :


4
votes

vous utiliseriez tête et tête ^ pour accéder aux révisions précédentes et actuelles; Voir Hook Git Post-STANTE - Script sur des fichiers engagés pour un exemple.

Utilisez Git Afficher pour extraire des fichiers dans un répertoire temporaire sans écraser la copie de travail.


Je ne stockerais pas les fichiers binaires dans git sauf absolument nécessaire. Vous pouvez éviter de nombreux tracas si vous créez un fichier texte de commandes SQL avec file.sqlite3 fichier.dump et mettez que dans git, avoir la base de données binaire uniquement en tant que fichier généré. . (Mais alors vous devez vous soucier de la régénération du fichier SQL si nécessaire.)


4 commentaires

Puis-je mettre mon fichier db dans le fichier .gitignore, puis utiliser un crochet de pré-validation pour vider le contenu et dans un fichier que j'ajoute à mon repo git? Et puis j'utilise une sorte de crochet pré-traction pour créer le fichier binaire SQLITE à partir de ce contenu déversé?


Oui (mais je suppose que vous voulez post-paiement ).


Ce que vous dites a vraiment du sens et je suppose que c'est vraiment la bonne façon de faire les choses. Je n'ai pas le temps de vraiment implémenter cela maintenant. Mais je vous marque de répondre comme accepté.


@Niclasnilson répondant à une très ancienne traiter, mais avez-vous été capable de le faire fonctionner? Si oui, ce serait bien si vous pouviez inclure les étapes



26
votes

ici est Comment utiliser la fonction textconv de GIT pour afficher des diffs entre les versions du fichier SQLITE. Cela fait simplement une décharge, il peut donc ne pas être très efficace pour les grandes bases de données. Aucun crochet nécessaire.

Ce lien semble être plus disponible, alors j'utilise la version archivée.

Le gist est, dans le fichier Attributs GIT (. gitattributes ou .git / info / attributs ), ajoutez une correspondance de modèle à Forcer SQLITE3 DIFFS (en supposant que vos fichiers de base de données ont l'extension .sqlite3 ): < / p> xxx

puis dans votre fichier de configuration git ( ~ / .gitconfig ou .git / config ): xxx

Si vous souhaitez simplement suivre les modifications de schéma, utilisez .schema au lieu de .Dump . .


1 commentaires

Je suppose que c'est juste une bonne pratique pour l'enregistrer dans le format texte de toute façon. Mais c'est une belle solution Nerver moins. +1



2
votes

Si on veut vraiment suivre les fichiers de base de données binaires en git, il y a quelques problèmes. Étant donné que les bases de données SQLITE peuvent différer sans les données stockées dans une sortie de la sortie de git Statut ne sont pas vraiment utiles pour déterminer si on ne doit pas valider et git diff ne montre que quelque chose comme < Code> Fichiers binaires A / FOO.SQL et B / FOO.SQL diffèrent . Pour obtenir une sortie appropriée de git diff Il existe fondamentalement deux approches pour comparer des fichiers respectifs:

  1. Utilisez textconv pour convertir des fichiers en texte brut, comme indiqué dans la réponse par Biran Minton .
  2. Configurez une application DIFF personnalisée capable de créer directement des diffs.

    Je vais décrire la deuxième approche ci-dessous en utilisant sqlliff qui est livré avec SQLite. Comme avec la textconv approche, il faut modifier les attributs et les fichiers de configuration.

    attributs: xxx

    config: xxx

    Le gitsqldiff String ci-dessus fait référence à un script wrapper requis pour organiser les paramètres donné par Git pour la consommation par sqldiff . Il doit être exécutable et accessible via la variable d'environnement (le mettant dans ~ / bin devrait être bien). Parce que (à partir de maintenant) la valeur de sortie de sqldiff est toujours 0 et donc plutôt inutile, nous devons vérifier ce qu'il imprime pour donner aux commentaires de l'utilisateur - en particulier dans le cas, rien dans la base de données n'a changé en fonction de sqlliff qui ne produit aucune sortie du tout. Pour ce faire et afficher la sortie complète à l'utilisateur, nous utilisons un astuce qui redirige la sortie sur un descripteur de fichier supplémentaire et stdout via tee .

    gitsqldiff : xxx

    Cela ne fait bien sûr pas que les fichiers SQL sont des citoyens de première classe dans un référentiel git, mais pourraient faciliter un flux de travail qui fonctionne néanmoins.


0 commentaires