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: Ça fonctionne et je pourrais scripter si je veux. Mais existe-t-il des "belles" façons de faire cela avec des crochets? P> p>
3 Réponses :
vous utiliseriez Utilisez Je ne stockerais pas les fichiers binaires dans tête code> et
tête ^ code> 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. P>
Git Afficher code >
pour extraire des fichiers dans un répertoire temporaire sans écraser la copie de travail. P>
git code> 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 code> et mettez que em> 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.) P>
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 code>).
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
ici est Comment utiliser la fonction Ce lien semble être plus disponible, alors j'utilise la version archivée. P> Le gist est, dans le fichier Attributs GIT ( puis dans votre fichier de configuration git ( Si vous souhaitez simplement suivre les modifications de schéma, utilisez textconv de GIT CODE> 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.
. gitattributes code> ou
.git / info / attributs code>), ajoutez une correspondance de modèle à Forcer SQLITE3 DIFFS (en supposant que vos fichiers de base de données ont l'extension
.sqlite3 code>): < / p>
~ / .gitconfig code> ou
.git / config code>): p>
.schema code> au lieu de
.Dump code>. p> p>.
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
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 Je vais décrire la deuxième approche ci-dessous en utilisant attributs: em> p> config: em> p> Le 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. P> p> git Statut code> ne sont pas vraiment utiles pour déterminer si on ne doit pas valider et
git diff code> ne montre que quelque chose comme < Code> Fichiers binaires A / FOO.SQL et B / FOO.SQL diffèrent code>.
Pour obtenir une sortie appropriée de
git diff code> Il existe fondamentalement deux approches pour comparer des fichiers respectifs:
textconv code> pour convertir des fichiers en texte brut, comme indiqué dans la réponse par Biran Minton . li>
sqlliff code> qui est livré avec SQLite.
Comme avec la
textconv code> approche, il faut modifier les attributs et les fichiers de configuration. P>
gitsqldiff code> String ci-dessus fait référence à un script wrapper requis pour organiser les paramètres donné par Git pour la consommation par
sqldiff code>.
Il doit être exécutable et accessible via la variable d'environnement code> code> (le mettant dans
~ / bin code> devrait être bien).
Parce que (à partir de maintenant) la valeur de sortie de
sqldiff code> 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 code> 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 code> via
tee code>. p>
gitsqldiff code>: p>