Ein neues Rails Projekt wurde angelegt und auch gleichzeitig dazu ein GIT-Repository initialisiert. Bevor es jetzt losgehen kann, noch schnell die .gitignore
einstellen. Nur was kommt jetzt alles in die Datei rein?
Das schöne an Rails 3 ist, dass mit rails new neben der leeren Rails-App auch noch ein Git-Reposity angelegt wird. Doch nicht alle Dateien, welche im Projektordner liegen, wollt ihr auch später in eurem Repository haben. Hierfür kommt die .gitignore
Datei ins Spiel. Alle Dateien und Ordner die hier eingetragen werden, kommen nicht in euer Repository. Beim Ausführen von git status
werden diese nicht unter den “untracked files” aufgelistet und auch bei git add .
nicht eurem commit hinzugefügt.
So nachdem wir mit rails new ein neues Projekt angelegt haben öffnen wir die .gitignore File. Diese findet ihr in eurem Stammverzeichnis eurer Rails App:
.bundle db/*.sqlite3 log/*.log tmp/
Hier wurden schon einige Pfade und Files eingetragen, welche später nicht im Repository landen sollen. Die Dateien und Ordner werden hier relativ vom Rails-Root angegeben. Ihr könnt hier jetzt einzelne Dateien (.bundle, .rspec)
, Verzeichnisse (tmp/
) oder spezielle Dateitypen (log/*.log
) eingeben.
Was kommt jetzt aber noch alles in die Git-Ignore, damit später keiner im Team sagt “Warum hast du das eingecheckt? Das kommt nicht ins Repository!”. Dazu muss ich sagen, dass es keine allgemeine .gitignore-Datei gibt. Es gibt zwar ein paar Standardeinträge, welche von Rails in die Datei eingetragen werden, aber was im speziellen nicht ins Repository kommt, hängt von folgenden Faktoren ab:
- Verwendete GEM’s wie z.B. rspec, rcov,..
- Welche IDE verwendet wird. So muss bei Netbeans z.B. noch nbproject der .gitignore hinzugefügt werden.
- Welches Betriebsystem verwenden die Entwickler? Hierbei (.DS_Store bei Mac oder Thumbs.db bei Windows)
- Welche Dateiein enthalten sensible Daten wie Login-Daten. (z.B. database.yml)
.bundle db/*.sqlite3 log/*.log tmp/ .rspec /spec/tmp/*
Eine Vorlage für eine .gitignore-Datei speziell für Rails, findet ihr hier. Dort könnt findet ihr auch noch für andere Sprachen die Vorlagen (link).
Zwei Dinge wären da noch zu erwähnen. Git selbst ignoriert keine Dateien, welche bereits dem Repository hinzugefügt wurden. Um Dateien im nachhinein zu ignorieren muss git rm --cached filename
ausgeführt werden. Die Datei bleibt weiterhin im lokalen Verzeichnis, wird aber von GIT nicht mehr getracked.
Wenn ihr nicht bei jedem neuen Projekt eine neue .gitignore Datei anlegen wollt, habt ihr auch die Möglichkeit, eine globale .gitignore anzulegen. Hierfür einfach git config --global core.excludesfile ~PFAD_ZUR_GITIGNORE/.gitignore_global
eingeben, und die globale Gitignore ist gesetzt.
werden die globale und die lokale .gitignore dateien gemerged verwendet oder ersetzt die globale die lokale?
Unser Problem:
Die .gitignore ist eingechecked – und das soll auch so sein – bis auf einen rechner – dort soll eine bestimmte datei doch ignoriert werden (ein vagrant file) – dazu würden wir gerne eine nicht zu syncende ausname bauen…
die Globale überschreibt die Lokale.