git init
Découvrez l'importance, l'utilisation, le répertoire de modèles et la configuration de la commande git init, et la différence entre git init et git clone.
Ce que fait git init
git init crée un tout nouveau dépôt Git vide — ou réinitialise un dépôt existant. C'est presque toujours la toute première commande Git que vous exécutez sur un projet, et c'est ce qui transforme un simple dossier en quelque chose que Git peut suivre.
L'exécution de cette commande crée un seul sous-répertoire caché appelé .git à l'intérieur de votre projet. Ce répertoire contient tout ce dont Git a besoin pour gérer votre historique : la base de données d'objets, les références (branches et tags), le pointeur HEAD, la configuration et une copie des fichiers de modèle par défaut. Vos fichiers de projet réels restent exactement là où ils se trouvent — Git ne les déplace ni ne les modifie lors de l'initialisation.
Cette page explique comment exécuter git init de différentes manières, la différence entre un dépôt ordinaire et un dépôt nu, le répertoire de modèles et la liste complète des options. Si vous souhaitez plutôt une copie d'un dépôt qui existe déjà ailleurs, vous aurez besoin de git clone plutôt que de git init. Pour une vue d'ensemble de plus haut niveau, consultez What is Git.
Initialiser un dépôt
La façon la plus simple de commencer à versionner un projet est d'utiliser cd pour accéder à son répertoire et d'exécuter la commande sans arguments :
cd my-project
git initGit affiche une confirmation et crée le sous-répertoire .git :
Initialized empty Git repository in /home/user/my-project/.git/Vous pouvez également indiquer un nom de répertoire. Git crée ce répertoire (s'il n'existe pas déjà) et y place le nouveau dépôt :
git init my-projectLe dépôt est vide à ce stade — il n'y a encore aucun commit. Les étapes suivantes consistent généralement à indexer des fichiers avec git add et à les enregistrer avec git commit. Vous pouvez vérifier l'état de votre nouveau dépôt à tout moment avec git status.
Réinitialiser un dépôt existant
Exécuter git init dans un répertoire qui contient déjà un sous-répertoire .git est sans danger. Git ne supprime ni n'écrase votre historique ou votre configuration — il réapplique simplement les fichiers de modèle manquants et indique :
Reinitialized existing Git repository in /home/user/my-project/.git/C'est parfois utile pour récupérer de nouveaux fichiers depuis un répertoire de modèles mis à jour.
Dépôts nus
Un dépôt nu est un dépôt créé avec le flag --bare. Il contient l'historique Git mais n'a pas de répertoire de travail — il n'y a pas de fichiers extraits à modifier, il est donc impossible de committer directement dedans.
git init --bare project.gitLes dépôts nus existent pour servir de lieu central partagé vers lequel d'autres clones effectuent des push et des pull. Pousser vers un dépôt non nu peut écraser les fichiers sur lesquels quelqu'un travaille activement dans son répertoire de travail, c'est pourquoi les dépôts centraux/distants sont presque toujours nus. Par convention, ils sont nommés avec le suffixe .git (par exemple project.git).
La différence est visible dans la structure. Un dépôt ordinaire cache les fichiers Git dans un dossier .git :
my-project/
├── .git/ ← Git's data lives here
└── (your files)Un dépôt nu place ce même contenu directement au niveau supérieur — il n'y a pas d'arborescence de travail l'entourant :
project.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/
Définir le nom de la branche initiale
Historiquement, Git nommait la première branche master. Vous pouvez choisir un nom différent au moment de l'initialisation avec --initial-branch (ou sa forme abrégée -b) :
git init --initial-branch=mainPour en faire la valeur par défaut pour chaque nouveau dépôt sans avoir à passer le flag à chaque fois, définissez-le une seule fois dans votre configuration globale :
git config --global init.defaultBranch mainConsultez git config pour en savoir plus sur les paramètres globaux.
Le répertoire de modèles
Lorsque Git crée le sous-répertoire .git, il l'initialise à partir d'un répertoire de modèles — un ensemble de fichiers (tels que des exemples de hooks et un fichier info/exclude) qui sont copiés dans chaque nouveau dépôt. Git choisit le modèle à utiliser en prenant le premier défini parmi les suivants, dans l'ordre :
- le chemin fourni avec l'option
--template, - la variable d'environnement
$GIT_TEMPLATE_DIR, - la variable de configuration
init.templateDir, - la valeur par défaut intégrée, généralement
/usr/share/git-core/templates.
Les modèles par défaut servent principalement d'exemples (par exemple, les exemples de hooks sont désactivés par défaut). En fournissant votre propre répertoire de modèles, vous pouvez faire en sorte que des fichiers et dossiers — comme un ensemble standard de hooks — soient copiés automatiquement dans chaque dépôt que vous initialisez.
Référence des options
git init accepte un argument optionnel <directory>. Si vous l'omettez, la commande s'exécute dans le répertoire courant ; si vous fournissez un chemin qui n'existe pas, Git le crée. Les flags les plus utiles sont listés ci-dessous.
| Flag | Description |
|---|---|
-q, --quiet | Affiche uniquement les erreurs et les avertissements ; toute autre sortie est supprimée. |
--bare | Crée un dépôt nu (sans répertoire de travail). |
--template=<template-directory> | Spécifie le répertoire de modèles à partir duquel copier les fichiers lors de la création du dépôt. |
--separate-git-dir=<git-dir> | Stocke les données Git réelles dans <git-dir> et laisse un petit fichier texte .git pointant vers ce répertoire. Sur un dépôt existant, le répertoire .git est déplacé vers le nouveau chemin. |
--shared[=(false|true|umask|group|all|world|everybody|0xxx)] | Configure le dépôt pour qu'il soit partagé entre plusieurs utilisateurs, en contrôlant les permissions de fichiers du groupe. |
-b <name>, --initial-branch=<name> | Définit le nom de la branche initiale dans le nouveau dépôt. |
git init vs. git clone
Ces deux commandes créent toutes les deux un dépôt local, mais elles partent de points opposés :
git inittransforme un dossier local existant en un tout nouveau dépôt vide sans historique.git clonetélécharge un dépôt distant existant — son historique complet, ses branches et ses fichiers — et établit une connexion vers ce dépôt distant.
Utilisez git init lorsque vous démarrez un projet from scratch sur votre machine ; utilisez git clone lorsque vous rejoignez un projet qui se trouve déjà sur un serveur tel que GitHub.