W3docs

git init

Erfahren Sie mehr über git init: Verwendung, Template-Verzeichnis, Konfiguration und den Unterschied zu git clone.

Was git init macht

git init erstellt ein brandneues, leeres Git-Repository — oder initialisiert ein vorhandenes neu. Es ist fast immer der erste Git-Befehl, den Sie für ein Projekt ausführen, und er verwandelt einen normalen Ordner in etwas, das Git verfolgen kann.

Durch die Ausführung wird ein einzelnes verstecktes Unterverzeichnis namens .git in Ihrem Projekt erstellt. Dieses Verzeichnis enthält alles, was Git zur Verwaltung Ihrer History benötigt: die Objektdatenbank, Referenzen (Branches und Tags), den HEAD-Zeiger, die Konfiguration und eine Kopie der Standard-Template-Dateien. Ihre eigentlichen Projektdateien bleiben genau dort, wo sie sind — Git verschiebt oder ändert sie bei der Initialisierung nie.

Diese Seite erläutert, wie Sie git init auf verschiedene Arten ausführen, den Unterschied zwischen einem regulären und einem Bare-Repository, das Template-Verzeichnis und die vollständige Liste der Optionen. Wenn Sie stattdessen eine Kopie eines bereits anderswo vorhandenen Repositorys möchten, benötigen Sie git clone statt git init. Einen übergeordneten Überblick finden Sie unter Was ist Git.

Ein Repository initialisieren

Der einfachste Weg, die Versionskontrolle eines Projekts zu starten, besteht darin, mit cd in dessen Verzeichnis zu wechseln und den Befehl ohne Argumente auszuführen:

cd my-project
git init

Git gibt eine Bestätigung aus und erstellt das .git-Unterverzeichnis:

Initialized empty Git repository in /home/user/my-project/.git/

Sie können auch einen Verzeichnisnamen übergeben. Git erstellt dieses Verzeichnis (falls es noch nicht existiert) und legt das neue Repository dort an:

git init my-project

Das Repository ist an diesem Punkt leer — es gibt noch keine Commits. Die nächsten Schritte sind in der Regel, Dateien mit git add zur Staging-Area hinzuzufügen und sie mit git commit zu speichern. Sie können den Zustand Ihres neuen Repositorys jederzeit mit git status überprüfen.

Ein vorhandenes Repository neu initialisieren

Das Ausführen von git init in einem Verzeichnis, das bereits ein .git-Unterverzeichnis enthält, ist sicher. Git löscht oder überschreibt Ihre History oder Konfiguration nicht — es wendet lediglich fehlende Template-Dateien erneut an und gibt folgende Meldung aus:

Reinitialized existing Git repository in /home/user/my-project/.git/

Dies ist gelegentlich nützlich, um neue Dateien aus einem aktualisierten Template-Verzeichnis zu übernehmen.

Bare-Repositories

Ein Bare-Repository wird mit dem Flag --bare erstellt. Es enthält die Git-History, hat jedoch kein Arbeitsverzeichnis — es gibt keine ausgecheckten Dateien zum Bearbeiten, sodass Sie nicht direkt darin committen können.

git init --bare project.git

Bare-Repositories dienen als gemeinsamer, zentraler Ort, zu dem andere Klone pushen und von dem sie pullen. Das Pushen in ein Nicht-Bare-Repository kann die Dateien überschreiben, an denen jemand aktiv in dessen Arbeitsverzeichnis arbeitet. Daher sind zentrale/Remote-Repositories fast immer Bare-Repositories. Gemäß Konvention werden sie mit dem Suffix .git benannt (zum Beispiel project.git).

Der Unterschied ist im Layout sichtbar. Ein reguläres Repository versteckt Git-Dateien in einem .git-Ordner:

my-project/
├── .git/ Git's data lives here
└── (your files)

Ein Bare-Repository legt denselben Inhalt direkt auf oberster Ebene ab — es gibt keinen Arbeitsbaum, der ihn umhüllt:

project.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/

Bare

Den Namen des initialen Branches festlegen

Historisch gesehen nannte Git den ersten Branch master. Sie können beim Initialisieren einen anderen Namen mit --initial-branch (oder der Kurzform -b) wählen:

git init --initial-branch=main

Um dies als Standard für jedes neue Repository festzulegen, sodass Sie das Flag nie übergeben müssen, setzen Sie es einmalig in Ihrer globalen Konfiguration:

git config --global init.defaultBranch main

Weitere Informationen zu globalen Einstellungen finden Sie unter git config.

Das Template-Verzeichnis

Wenn Git das .git-Unterverzeichnis erstellt, befüllt es dieses aus einem Template-Verzeichnis — einer Reihe von Dateien (wie Beispiel-Hooks und eine info/exclude-Datei), die in jedes neue Repository kopiert werden. Git wählt das zu verwendende Template aus dem ersten der folgenden, der Reihe nach gesetzten Werte:

  • der mit der Option --template angegebene Pfad,
  • die Umgebungsvariable $GIT_TEMPLATE_DIR,
  • die Konfigurationsvariable init.templateDir,
  • der integrierte Standard, normalerweise /usr/share/git-core/templates.

Die Standard-Templates dienen hauptsächlich als Beispiele (zum Beispiel sind die Beispiel-Hooks standardmäßig deaktiviert). Indem Sie Ihr eigenes Template-Verzeichnis bereitstellen, können Sie Dateien und Ordner — wie einen Standardsatz von Hooks — automatisch in jedes Repository kopieren lassen, das Sie initialisieren.

Optionsreferenz

git init akzeptiert ein optionales <directory>-Argument. Wenn Sie es weglassen, wird der Befehl im aktuellen Verzeichnis ausgeführt; wenn Sie einen nicht existierenden Pfad angeben, erstellt Git ihn. Die nützlichsten Flags sind unten aufgeführt.

FlagBeschreibung
-q, --quietGibt nur Fehler und Warnungen aus; alle anderen Ausgaben werden unterdrückt.
--bareErstellt ein Bare-Repository (kein Arbeitsverzeichnis).
--template=<template-directory>Gibt das Template-Verzeichnis an, aus dem Dateien beim Erstellen des Repositorys kopiert werden.
--separate-git-dir=<git-dir>Speichert die eigentlichen Git-Daten unter <git-dir> und hinterlässt eine kleine .git-Textdatei, die darauf verweist. Bei einem vorhandenen Repository wird das .git-Verzeichnis an den neuen Pfad verschoben.
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]Konfiguriert das Repository zur gemeinsamen Nutzung durch mehrere Benutzer und steuert die Gruppeizugriffsrechte für Dateien.
-b <name>, --initial-branch=<name>Legt den Namen des initialen Branches im neuen Repository fest.

git init vs. git clone

Beide Befehle erstellen ein lokales Repository, aber sie starten von entgegengesetzten Ausgangspunkten:

  • git init verwandelt einen vorhandenen lokalen Ordner in ein brandneues, leeres Repository ohne History.
  • git clone lädt ein vorhandenes Remote-Repository herunter — seine vollständige History, Branches und Dateien — und stellt eine Verbindung zu diesem Remote her.

Verwenden Sie git init, wenn Sie ein Projekt von Grund auf neu auf Ihrem Rechner beginnen; verwenden Sie git clone, wenn Sie einem Projekt beitreten, das bereits auf einem Server wie GitHub gehostet wird.

Übung

Übung
Was sind die Funktionen und Optionen des Befehls 'git init'?
Was sind die Funktionen und Optionen des Befehls 'git init'?
Was this page helpful?