W3docs

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 init

Git 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-project

Le 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.git

Les 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/

Bare

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=main

Pour 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 main

Consultez 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.

FlagDescription
-q, --quietAffiche uniquement les erreurs et les avertissements ; toute autre sortie est supprimée.
--bareCré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 init transforme un dossier local existant en un tout nouveau dépôt vide sans historique.
  • git clone té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.

Pratique

Pratique
Quelles sont les fonctions et les options de la commande 'git init' ?
Quelles sont les fonctions et les options de la commande 'git init' ?
Was this page helpful?