Von Gast (nicht überprüft) , 29 April 2026

Einführung

git init verwandelt ein gewöhnliches Verzeichnis in ein Git-Repository. Es erstellt ein verstecktes .git-Verzeichnis, das Gits gesamte Buchhaltung enthält: Objekte, Refs, Konfiguration und Hooks. Der Working Tree (Ihre normalen Dateien) bleibt unverändert.

Ein Projekt initialisieren

mkdir my-project
cd my-project
git init
# Initialized empty Git repository in /home/ada/my-project/.git/

Seit Git 2.28 können Sie den initialen Branch-Namen auf der Befehlszeile festlegen:

git init --initial-branch=main
# oder kurz
git init -b main

Was gerade passiert ist

Sehen Sie sich das neue Verzeichnis an:

ls -a
ls .git

Sie sehen HEAD, config, description, hooks/, info/, objects/ und refs/. Es ist noch nichts committet; HEAD zeigt auf einen ungeborenen Branch.

Ihr erster Commit

  1. Datei erstellen: echo "# My Project" > README.md
  2. Stagen: git add README.md
  3. Committen: git commit -m "Initial commit"
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
git log --oneline

Bare-Repositories

Server hosten üblicherweise bare-Repositories ohne Working Tree. Verwenden Sie --bare:

git init --bare project.git

Bare-Repositories sind das Ziel von Pushes; Sie bearbeiten Dateien darin nicht direkt.

Erneutes Initialisieren

Das erneute Ausführen von git init in einem bestehenden Repository ist sicher; es wendet Templates erneut an und gibt "Reinitialized existing Git repository" aus. Es löscht keine Commits.

Templates

Standardmäßig befüllt git init .git/hooks/ aus /usr/share/git-core/templates/. Sie können das Template-Verzeichnis überschreiben, um eigene Hooks, eine Standard-.gitignore oder eine Beschreibung in jedes neue Repository einzubringen:

git init --template=~/.git-templates
git config --global init.templateDir ~/.git-templates

So bringen Organisationen standardisierte Pre-Commit-Hooks in jeden neuen Klon, ohne dass jeder Entwickler Dateien manuell kopieren muss.

Initialer Branch-Name

Viele Projekte sind von master auf main als Standard-Branch-Name umgestiegen. Die Wahl ist lokal in Ihrem Repository, aber das Anpassen an die Voreinstellung Ihres Hosting-Anbieters vermeidet Verwirrung beim erstmaligen Push. Setzen Sie es einmal global und vergessen Sie es: git config --global init.defaultBranch main.

Wo Git aufhört zu suchen

Git findet das Repository, indem es den Verzeichnisbaum nach oben durchläuft, bis es ein .git-Verzeichnis oder eine entsprechende Datei findet. Der Lauf stoppt standardmäßig an Dateisystemgrenzen (core.discoveryAcrossFilesystem ändert dies). Die Umgebungsvariable GIT_DIR überschreibt die Discovery vollständig; GIT_WORK_TREE setzt einen abweichenden Working Tree. Zusammen erlauben sie Operationen auf einem Repository, dessen .git sich an einem ungewöhnlichen Ort befindet:

GIT_DIR=/srv/repos/widget.git GIT_WORK_TREE=/var/www git status

Häufige Fehler

Versehentliches Ausführen von git init in Ihrem Home-Verzeichnis, was Ihre gesamte Dotfile-Sammlung unter eine massive Repository-Wurzel stellt. Prüfen Sie immer zuerst pwd. Ein weiterer Fehler: Das Löschen von .git, um "neu anzufangen", während uncommitted Arbeit erhalten bleibt. Das ist okay, aber bedenken Sie, dass die gesamte Historie für immer verloren ist. Schließlich: Committen Sie keine großen Binärdateien in ein frisch initialisiertes Repository, ohne vorher eine .gitignore zu schreiben; Sie werden es bereuen, wenn das Repository aufquillt. Führen Sie direkt nach git init ein git status aus, um zu sehen, was Git zu verfolgen plant, bevor Sie irgendetwas stagen.