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
- Datei erstellen:
echo "# My Project" > README.md - Stagen:
git add README.md - 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.