2010-05-18 7 views
7

J'ai finalement fait un grand pas en abandonnant SVN pour Git et en l'aimant. Il doit être quelque part, mais je ne peux pas vraiment trouver sur la façon de le faire, la gitose amicale.Git et Rails: ignore database.yml

J'ai mon 'site' repo stocké sur une machine distante. Je pousse ma copie de travail et tire ces données sur une machine de production. Une différence de maire est cependant un fichier 'one': database.yml, qui ne changera jamais sur la machine de production.

Est-il possible (et si oui, comment), lorsque les données sont extraites du repo, d'ignorer uniquement ce fichier? Je le fais manuellement à ce stade, mais une certaine élégance serait très appréciée.

Merci.

Répondre

5

Mon conseil: ne le mettez même pas dans git. Faire un database.yml.skel ou quelque chose comme ça, de sorte qu'un utilisateur peut modéliser leur propre database.yml, avec cela à l'esprit comme un échantillon. Cependant, à mon avis, les fichiers conf n'appartiennent pas au contrôle de version - exactement pour la raison que vous mentionnez.

Ignorer est très facile: en fait, il y a plusieurs façons de le faire. Le correct pour celui-ci est .gitignore fichier; un autre est .git/info/excludes. Voir this answer pour plus de détails.

Alors, du haut de ma tête:

echo database.yml >> config/.gitignore 
git add config/.gitignore 
git commit 
+2

ou de mettre config/database.yml dans .gitignore – shingara

+0

Si quelqu'un utilise le code ci-dessus et qu'ils ont déjà un .gitignore, il sera parti. Je recommande d'utiliser '>>' et d'utiliser uniquement '>' si le premier échoue. (Selon la configuration de votre shell, '>>' peut fonctionner dans les deux cas où vous avez le fichier et vous ne le faites pas.) Donc, la première ligne serait 'echo database.yml >> config/.gitignore' à la place. – iconoclast

+1

Aussi, cela ne vous convient pas si le fichier database.yml est déjà dans le repo. Voir la réponse d'Evgeny pour plus de détails sur la façon de gérer cette situation. (Je n'ai pas testé son approche: c'est un peu différent du mien, mais vous supprimez essentiellement le fichier du repo pour que le .gitignore puisse être appliqué.) – iconoclast

8

Oui, il est possible.

git update-index --skip-worktree FILENAME

ou

git update-index --assume-unchanged FILENAME

où nomdefichiercompletseradonc config/database.yml pour votre cas.

Si vous utilisez la deuxième commande (supposée inchangée), les fichiers seront restaurés après la commande git reset.

+2

Que faire si je veux annuler l'une des commandes ci-dessus? – phoenixwizard

+0

git update-index --no-suppose-inchangé NOMDEFICHIER – Hartwig

6

Si « database.yml » se est ajouté à votre git avant qu'il spécifié dans le fichier ignorer, je pense que vous devez supprimer:

git rm config/database.yml 
git commit -a -m "Removed database.yml" 

Ensuite, ajoutez database.yml fichier dans votre projet , fonctionnera bien.

+1

Vous voudrez probablement le garder local sur votre disque: 'git rm --cached config/database.yml' – Chloe

0

La suppression de database.yml n'est pas une bonne idée si l'application est conçue pour être téléchargée et installée par d'autres utilisateurs. Si vous avez des utilisateurs peu sophistiqués qui installent votre application, la suppression du fichier est une sorte de coup de bite. Dire à git d'ignorer le fichier après l'avoir ajouté avec des valeurs par défaut est le bon moyen dans ce cas.