In questo articolo vedremo come creare un ambiente Git completo e simulare il deploy automatico, utilizzando delle semplici cartelle locali su un’unitΓ (come la Z:) per rappresentare server remoti separati per produzione (main) e sviluppo/test (dev). Vedremo anche i vantaggi pratici, esempi reali e best practice nella gestione degli ambienti tramite Git.
Sommario
- β Preparazione dei repository bare
- π autorizzare le cartelle per Git
- π struttura consigliata delle cartelle
- π configurare script di deploy automatico
- π» collegare il progetto locale ai remoti
- π esempio per server remoto reale
- π vantaggi del deploy automatico con Git
- βοΈ best practice nella gestione dei branch
- β best practice commit
- π§ guida comandi Git tradotti
- π‘ consigli finali
β Preparazione dei repository bare
I repository bare simulano server Git remoti, come GitHub o GitLab. Creali così:
mkdir "Z:\Git Remote\progetto1-main.git"
cd "Z:\Git Remote\progetto1-main.git"
git init --bare
mkdir "Z:\Git Remote\progetto1-dev.git"
cd "Z:\Git Remote\progetto1-dev.git"
git init --bare
π Autorizzare le cartelle per Git
Git potrebbe bloccare operazioni su percorsi non sicuri. Per evitarlo autorizza le cartelle:
git config --global --add safe.directory "Z:/Git Remote/progetto1-main.git"
git config --global --add safe.directory "Z:/Git Remote/progetto1-dev.git"
π Struttura consigliata delle cartelle
Z:/Git Remote/
βββ progetto1-main.git/ # repo per produzione
β βββ hooks/post-receive # script deploy
βββ progetto1-dev.git/ # repo per sviluppo
β βββ hooks/post-receive # script deploy
βββ deploy/
β βββ progetto1-main/ # deploy produzione
β βββ progetto1-dev/ # deploy sviluppo/test
π Configurare script di deploy automatico
Crea script post-receive nei repository bare.
Per produzione (main):
#!/bin/bash
while read oldrev newrev ref
do
if [ "$ref" = "refs/heads/main" ]; then
echo "Deploy ramo MAIN"
GIT_WORK_TREE="Z:/Git Remote/deploy/progetto1-main" git checkout -f main
fi
done
Per sviluppo (dev):
#!/bin/bash
while read oldrev newrev ref
do
if [ "$ref" = "refs/heads/dev" ]; then
echo "Deploy ramo DEV"
GIT_WORK_TREE="Z:/Git Remote/deploy/progetto1-dev" git checkout -f dev
fi
done
β οΈ Salva questi script senza estensione, con terminazione LF e codifica UTF-8 (senza BOM).
π» Collegare il progetto locale ai remoti
Dal progetto locale:
git init -b main
git remote add production "Z:/Git Remote/progetto1-main.git"
git remote add development "Z:/Git Remote/progetto1-dev.git"
# Se il branch dev non esiste ancora
git checkout -b dev
# Push iniziali
git checkout main
git push -u production main
git checkout dev
git push -u development dev
π Esempio per server remoto reale
Per effettuare un deploy su un server remoto reale (es. Linux):
# Dal repository locale
git remote add production user@example.com:/var/git/progetto1-main.git
# Sul server remoto
mkdir -p /var/git/progetto1-main.git
cd /var/git/progetto1-main.git
git init --bare
# Configurare post-receive:
vi /var/git/progetto1-main.git/hooks/post-receive
#!/bin/bash
while read oldrev newrev ref
do
if [ "$ref" = "refs/heads/main" ]; then
echo "Deploy ramo MAIN"
GIT_WORK_TREE="/var/www/progetto1-main" git checkout -f main
fi
done
chmod +x /var/git/progetto1-main.git/hooks/post-receive
π Vantaggi del deploy automatico con Git
- Riduzione errori: automatizzando, eviti errori manuali.
- Coerenza ambienti: codice uniforme in sviluppo, test e produzione.
- VelocitΓ di rilascio: tempi ridotti per deploy.
- Rollback semplificato: facile ritorno alle versioni precedenti.
- Semplificazione gestione ambienti: automatizzare significa ridurre la complessitΓ della gestione manuale.
- Documentazione implicita: ogni commit e deploy Γ¨ tracciato chiaramente.
βοΈ Best practice nella gestione dei branch
- Usa branch distinti per
dev,staging, emain(produzione). - Proteggi branch principali (
mainestaging) con pull request obbligatorie. - Automatizza promozione tra ambienti con script o pipeline locali.
- Usa feature branch per nuove funzionalitΓ e bugfix per maggiore chiarezza.
β Best practice commit
Utilizza lβimperativo presente:
aggiungi campo telefono al form
correggi bug validazione email
rimuovi file obsoleto
π§ Guida comandi Git tradotti
| Comando Git | Italiano | Descrizione |
|---|---|---|
git init | inizializza repo | crea repo locale |
git clone <url> | clona repo | copia repo remoto |
git status | stato repo | mostra cambiamenti |
git add <file> | aggiungi file | prepara file al commit |
git commit -m "msg" | registra modifica | salva modifiche |
git push | invia modifiche | invia commit al remoto |
git pull | recupera e unisci modifiche | aggiorna repo locale |
git merge <branch> | unisci ramo | combina rami |
git checkout <branch> | cambia ramo | sposta ramo attivo |
git checkout -f | estrai file nel sistema | copia file in cartella target |
git log | storico commit | cronologia commit |
π‘ Consigli finali
Questa simulazione Γ¨ ideale per ambienti locali e aiuta team e clienti a comprendere Git in modo semplice ed efficace, facilitando l’adozione di pratiche moderne e collaborative di sviluppo.