Introduzione
git init trasforma una directory ordinaria in un repository Git. Crea una directory nascosta .git contenente tutta la contabilità di Git: oggetti, ref, configurazione e hook. La working tree (i tuoi file normali) è lasciata invariata.
Inizializzare un progetto
mkdir my-project
cd my-project
git init
# Initialized empty Git repository in /home/ada/my-project/.git/
Da Git 2.28 puoi impostare il nome del branch iniziale dalla riga di comando:
git init --initial-branch=main
# oppure abbreviato
git init -b main
Cosa è appena successo
Ispeziona la nuova directory:
ls -a
ls .git
Vedrai HEAD, config, description, hooks/, info/, objects/ e refs/. Niente è ancora committato; HEAD punta a un branch non ancora nato.
Il tuo primo commit
- Crea un file:
echo "# My Project" > README.md - Mettilo in stage:
git add README.md - Fai commit:
git commit -m "Initial commit"
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
git log --oneline
Repository bare
I server di solito ospitano repository bare senza working tree. Usa --bare:
git init --bare project.git
I repo bare sono il bersaglio dei push; non si modificano i file direttamente al loro interno.
Ri-inizializzare
Eseguire di nuovo git init in un repo esistente è sicuro; ri-applica i template e stampa "Reinitialized existing Git repository". Non cancella i commit.
Template
Per impostazione predefinita git init popola .git/hooks/ da /usr/share/git-core/templates/. Puoi sovrascrivere la directory dei template per iniettare i tuoi hook, un .gitignore predefinito o una description in ogni nuovo repo:
git init --template=~/.git-templates
git config --global init.templateDir ~/.git-templates
È così che le organizzazioni distribuiscono pre-commit hook standard a ogni nuovo clone senza che ogni sviluppatore copi i file manualmente.
Nome del branch iniziale
Molti progetti sono passati da master a main come nome del branch predefinito. La scelta è locale al tuo repo, ma far corrispondere il default del tuo provider di hosting evita confusione al primo push. Impostalo una volta globalmente e dimenticatene: git config --global init.defaultBranch main.
Dove Git smette di cercare
Git localizza il repository risalendo l'albero delle directory finché non trova una directory o un file .git. La risalita si ferma ai confini del filesystem per impostazione predefinita (core.discoveryAcrossFilesystem cambia questo). La variabile d'ambiente GIT_DIR sovrascrive completamente la discovery; GIT_WORK_TREE imposta una working tree non predefinita. Insieme ti permettono di operare su un repo il cui .git è in una posizione insolita:
GIT_DIR=/srv/repos/widget.git GIT_WORK_TREE=/var/www git status
Errori comuni
Eseguire git init nella tua home directory per errore, mettendo l'intera collezione di dotfile sotto un'unica radice di repository massiccia. Controlla sempre pwd prima. Un altro errore: cancellare .git per "ricominciare da capo" mantenendo il lavoro non committato. Va bene, ma renditi conto che tutta la storia è andata persa per sempre. Infine, non committare grossi binari in un repo appena inizializzato senza prima scrivere un .gitignore; te ne pentirai quando il repo si gonfierà. Esegui git status subito dopo git init per vedere cosa Git intende tracciare prima di mettere qualsiasi cosa in stage.