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 (
main
estaging
) 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.