X

Ignorieren von Dateien in Git ohne Nutzung von gitignore

Gerade bei öffentlichen Repositories wird mit verschiedenen Entwicklungsumgebungen, Tools und ähnlichem gearbeitet. Viele von diesen legen anwendungsspezifische Dateien an, in welchen Informationen wie Pfade, Einstellungen, etc. gespeichert werden und welche nichts in Repositories zu suchen haben. Rein aus Gewohnheit wäre meine erste Wahl zum Ausschluss der Dateien auf die Datei .gitignore gefallen, mit Hilfe derer man Dateien von Repos ausschließen kann. Man stelle sich jedoch vor, in einem Open Source Projekt würden 100 Menschen arbeiten, welche 50 verschiedene Anwendungen nutzen, bei welchen Konfigurationen, etc. auszuschließen wären. Die .gitignore würde vmtl. unübersichtlich und die Wartung würde sich schwierig gestalten.

Eine Alternative, welche ich hier vorstellen möchte, .git/info/exclude. Hierin können Dateien oder gar Verzeichnisse vollständig _lokal_ von der Beachtung durch Git ausgeschlossen werden, ohne dass dies mit dem Repository synchronisiert wird. Wie dies funktioniert, beschreibe ich nun in den folgenden Schritten exemplarisch an dem öffentlichen Projekt „django-dashing„, an welchem ich gelegentlich mitwirke: 

Ich verwende für Python die Entwicklungsumgebung PyCharm von JetBrains. Sobald ich ein Projekt erstelle oder ein Verzeichnis als Projekt öffne, wird ein Verzeichnis „.idea“ erstellt. Dieses ist jedoch nicht gut in einem public Repository aufgehoben, da diese Dateien aufgrund der enthaltenen Pfade, Einstellungen, etc. auf anderen Rechnern andere Inhalte haben oder andere Entwickler dieses Verzeichnis nicht benötigen, da sie andere oder keine Entwicklungsumgebungen verwenden.

Beim ersten Commit nach dem Anlegen des Projekts finden sich nun folgende nicht-getrackte Dateien im Verzeichnis:

Auf der Kommandozeile sähe dies wie folgt aus:

$ git status
# On branch pypi
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .idea/
nothing added to commit but untracked files present (use "git add" to track)

 

Um nun das Verzeichnis und die enthaltenen Dateien lokal vom Repository auschließen, habe ich in der .git/info/exclude den Eintrag „.idea/*“ hinzufügt, so dass die exclude folgendermaßen aussieht:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

.idea/*

Die Syntax der Einträge ist gleich denen, die auch innerhalb der .gitignore Anwendung finden. Nach dem Speichern aktualisiere ich die Commit-Ansicht in GitExtensions und kann feststellen, dass die .idea-Einträge vollständig ignoriert werden und kein Update der .gitignore vorliegt:

Eine Überprüfung mittels „git status“ zeigt das gleiche Ergebnis:

$ git status
# On branch pypi
nothing to commit, working directory clean

 

 

Ich hoffe, ich dieser Artikel dient nicht nur als Gedankenstütze für mich, sondern hat auch euch geholfen. 😉 Über Fragen oder Anmerkungen in den Kommentaren freue ich mich.

Torsten Feld :

This website uses cookies.