- Git steuert sein Verhalten über bestimmte Dateien im Repository; diese sind keine Konfigurationen innerhalb von
.git/, sondern versionierte Dateien, die zusammen mit dem Code mitwandern
.gitignore, .gitattributes, .lfsconfig, .gitmodules, .mailmap usw. sind jeweils für das Ausschließen von Dateien aus dem Tracking, die Definition von Attributen, LFS-Konfiguration, Submodul-Verwaltung und die Zusammenführung von Autoreninformationen zuständig
.git-blame-ignore-revs und .gitmessage bieten das Ignorieren von Code-Formatierungs-Commits bzw. Vorlagen für Commit-Nachrichten und verbessern so die Qualität der Zusammenarbeit
- GitHub, GitLab, Gitea usw. erweitern Funktionen wie CI/CD und die Zuweisung von Reviewern über plattformspezifische Konfigurationsordner wie
.github/, .gitlab/, .gitea/
- Diese Struktur reicht über Git hinaus auch in EditorConfig, Docker und Tools zur Sprachversionsverwaltung hinein und bildet so ein Ökosystem automatischer Konfiguration auf Basis von Dotfiles
Wichtige magische Dateien von Git
- Git erkennt verschiedene spezielle Dateien wie
.gitignore, .gitattributes, .lfsconfig, .gitmodules, .mailmap, um das Verhalten des Repositorys zu steuern
- Diese Dateien sind keine internen Einstellungen in
.git/, sondern versionierte und gemeinsam genutzte Konfigurationsbestandteile, die bei der Zusammenarbeit ein einheitliches Verhalten sicherstellen
.gitignore
- Definiert Dateimuster, die Git nicht verfolgen soll
- Unterstützt Wildcards (
*.log), Verzeichnisse (dist/) und Negationen (!important.log)
- Wird in der Reihenfolge
.gitignore, .git/info/exclude, globale Konfiguration (~/.config/git/ignore) angewendet
- Bereits verfolgte Dateien werden auch nach dem Hinzufügen zu
.gitignore weiter verfolgt und können mit git rm --cached entfernt werden
- GitHub, GitLab, Gitea usw. erlauben es, Dateien, die zu ignorierten Mustern passen, trotzdem ohne Warnung zu committen
- GitHub stellt sprachspezifische
.gitignore-Vorlagen im offiziellen Repository bereit
.gitattributes
- Steuert pro Datei Filter, Diff, Merge, Zeilenenden und Spracherkennung
- Zum Beispiel:
*.psd filter=lfs, *.png binary, *.sh text eol=lf
text normalisiert Zeilenenden, binary deaktiviert Diff/Merge, merge=ours behält bei Konflikten die lokale Version bei
- GitHub Linguist liest
.gitattributes, um Sprachstatistiken auszuschließen, generierten Code einzuklappen und Dokumentation auszunehmen
- Erkennt außerdem
.gitattributes pro Verzeichnis sowie .git/info/attributes
.lfsconfig
- Speichert Git-LFS-Konfiguration gemeinsam mit dem Repository
- In
.gitattributes werden die per LFS zu behandelnden Dateien festgelegt, während .lfsconfig Details wie den Serverstandort übernimmt
- Um Dateien aus bestehenden Commits nach LFS zu migrieren, ist der Befehl
git lfs migrate erforderlich
.gitmodules
- Speichert Konfigurationsinformationen für Submodule
- Wird bei
git submodule add erstellt und bei git submodule update referenziert
- Bei
git clone werden Submodule nicht automatisch geholt; dafür ist die Option --recurse-submodules nötig
- Nachteile sind unter anderem fehlendes Tracking von Versionsbereichen und die Erzeugung verschachtelter
.git-Verzeichnisse
.mailmap
- Dient der zentralen Zusammenführung von Autorennamen und E-Mail-Adressen
- In
git log, git shortlog, git blame usw. werden die zusammengeführten Namen angezeigt
- Das Beitragsdiagramm von GitHub berücksichtigt mailmap nicht
- Der Speicherort kann über
.mailmap oder die Einstellung mailmap.file festgelegt werden
.git-blame-ignore-revs
- Legt eine Liste von Commits fest, die
git blame ignorieren soll
- Aktivierung mit
git config blame.ignoreRevsFile .git-blame-ignore-revs
- GitHub, GitLab (15.4+) und Gitea erkennen die Datei automatisch
- Wenn die Datei fehlt, kann es zu Fehlern kommen; daher wird empfohlen, eine leere Datei beizubehalten
.gitmessage
- Definiert eine Vorlage für Commit-Nachrichten
- Beispiel:
# <type>: <subject>
#
# Types: feat, fix, docs, style, refactor, test, chore
- Muss mit
git config commit.template .gitmessage konfiguriert werden
- Nach dem Klonen ist eine manuelle Einrichtung nötig; manche Teams automatisieren das mit husky o. Ä.
- Als Alternativen können
commit-msg-Hook oder prepare-commit-msg-Hook verwendet werden
Plattformbezogene Erweiterungsordner
- GitHub, GitLab, Gitea, Forgejo, Bitbucket usw. verwenden eigene Konfigurationsordner
.github/, .gitlab/, .gitea/, .forgejo/, .bitbucket/
- Sie enthalten CI/CD-Workflows, Vorlagen für Issues und PRs, CODEOWNERS-Dateien usw.
- Forgejo verwendet Fallbacks in der Reihenfolge
.forgejo/ → .gitea/ → .github/, Gitea in der Reihenfolge .gitea/ → .github/
- SourceHut verwendet
.build.yml oder .builds/*.yml
Weitere konventionelle Dateien
- .gitkeep: Da Git keine leeren Verzeichnisse verfolgt, wird diese Datei als Platzhalter verwendet, um Verzeichnisse beizubehalten
- .gitconfig: Kann projektbezogene Git-Konfigurationsbeispiele bereitstellen, wird aber nicht automatisch geladen
- .gitsigners: Verwaltet die Liste von GPG-/SSH-Signaturschlüsseln und kann über
gpg.ssh.allowedSignersFile angegeben werden
- .gitreview: Konfigurationsdatei für den Gerrit-Code-Review-Server
- .gitlint: Definiert Lint-Regeln für Commit-Nachrichten
- .jj/: Statusverzeichnis von Jujutsu, einem Git-kompatiblen VCS, das neben
.git/ existieren kann
Das Dotfile-Ökosystem über Git hinaus
- .editorconfig: Sorgt für einen konsistenten Code-Stil über verschiedene Editoren hinweg
- Definiert Einrückung, Zeilenenden, Kodierung, Entfernen von Leerraum usw.
- Unterstützt von wichtigen Editoren wie VS Code, Vim und Emacs
- .ruby-version, .node-version, .python-version: Werden von Tools zur Sprachversionsverwaltung (rbenv, nodenv, pyenv usw.) gelesen und lösen automatische Umschaltung aus
- .tool-versions: Mehrsprachige Versionsverwaltungsdatei von asdf
- .dockerignore: Legt fest, welche Dateien beim Docker-Build ausgeschlossen werden
- Verwendet dieselbe Muster-Syntax wie
.gitignore, verbessert die Build-Geschwindigkeit und schließt Geheimnisse aus
Was bei der Entwicklung von Git-integrierten Tools zu beachten ist
- Tools, die mit Git-Repositories arbeiten, sollten die folgenden Dateien unbedingt erkennen
.gitignore: Anwenden von Ignoriermustern bei der Dateisuche
.gitattributes: Unterscheidung zwischen Binär- und generierten Dateien
.mailmap: Einheitliche Anzeige von Autoreninformationen
.gitmodules: Behandlung von Submodulen
- Das Format von Git-Konfigurationsdateien folgt der Struktur
[section "subsection"] key = value und kann mit dem Befehl git config gelesen und geschrieben werden
- Die meisten Git-Bibliotheken für verschiedene Programmiersprachen bieten Funktionen zum Parsen dieses Formats
Noch keine Kommentare.