mercoledì 11 Giugno 2025

Home » Tutorial e Guide » Git con deploy automatico

Git con deploy automatico

Guida pratica: configura repository bare locali su unità Z:, automatizza il deploy nei branch main e dev con hook post-receive, riduci errori, accelera i rilasci e mantieni ambienti allineati con Git e script shell. Impara vantaggi, esempi reali e best practice.

Sviluppatore con laptop automatizza deploy Git da repository main e dev

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

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, e main (produzione).
  • Proteggi branch principali (main e staging) 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 GitItalianoDescrizione
git initinizializza repocrea repo locale
git clone <url>clona repocopia repo remoto
git statusstato repomostra cambiamenti
git add <file>aggiungi fileprepara file al commit
git commit -m "msg"registra modificasalva modifiche
git pushinvia modificheinvia commit al remoto
git pullrecupera e unisci modificheaggiorna repo locale
git merge <branch>unisci ramocombina rami
git checkout <branch>cambia ramosposta ramo attivo
git checkout -festrai file nel sistemacopia file in cartella target
git logstorico commitcronologia 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.


Banner 2