Git 15
🔀 Git & GitHub · Modulo 3 · Lezione 15
README, licenze e .gitignore 📝
Scrivere un buon README · Markdown · Scegliere una licenza · .gitignore per escludere file indesiderati
📝 Un repository senza README è come un libro senza copertina. Il README è la prima cosa che le persone vedono quando visitano il tuo progetto su GitHub. È la tua occasione per spiegare cosa fa il progetto, come usarlo e come contribuire. In questa lezione impari a scrivere un README professionale in Markdown, a scegliere una licenza e a creare un .gitignore per tenere pulito il repository.
🎯 Obiettivi della lezione
- Capire l’importanza del README come “biglietto da visita” del progetto
- Scrivere un README completo usando la sintassi Markdown
- Conoscere le sezioni standard di un buon README
- Capire cos’è una licenza software e perché serve
- Scegliere la licenza giusta per il tuo progetto
- Creare un file
.gitignoreper escludere file indesiderati dal repository - Usare template
.gitignoreper i linguaggi più comuni
📖 1. Teoria
1.1 — Il README: la porta d’ingresso del progetto
Quando qualcuno visita il tuo repository su GitHub, la prima cosa che vede (sotto la lista dei file) è il contenuto del file README.md. GitHub lo renderizza automaticamente in HTML con formattazione — titoli, liste, link, immagini, blocchi di codice. È la tua vetrina.
1.2 — Markdown: il linguaggio del README
Markdown è un linguaggio di formattazione leggero — scrivi testo normale con pochi simboli speciali e GitHub lo renderizza in HTML formattato. L’estensione del file è .md.
| Scrivi (Markdown) | Ottieni (HTML reso) |
|---|---|
| # Titolo principale | Titolo principale |
| ## Sottotitolo | Sottotitolo |
| ### Sezione | Sezione |
| **grassetto** | grassetto |
| *corsivo* | corsivo |
| `codice inline` | codice inline |
| – elemento lista – altro elemento |
• elemento lista • altro elemento |
| 1. primo 2. secondo |
1. primo 2. secondo |
| [testo link](https://url.com) | testo link |
|  | (mostra l’immagine) |
| “`python print(“ciao”) “` |
print("ciao") (con syntax highlighting) |
1.3 — Le sezioni di un buon README
Non tutti i README hanno bisogno di tutte le sezioni — dipende dalla complessità del progetto. Ma ecco la struttura raccomandata, dalla più semplice alla più completa:
1.4 — Esempio di README completo
Una calcolatrice semplice e responsive che funziona nel browser.
Progetto scolastico per il corso di Informatica — Classe 4A, A.S. 2025/26.
## Funzionalità
– Operazioni base: +, -, ×, ÷
– Cronologia delle operazioni
– Tema chiaro e scuro
– Funziona su desktop e mobile
## Come iniziare
1. Clona il repository:
“`bash
git clone git@github.com:tuousername/calcolatrice-web.git
cd calcolatrice-web
“`
2. Apri `index.html` nel browser.
## Tecnologie
– HTML5
– CSS3 (Flexbox, variabili CSS)
– JavaScript (vanilla, nessun framework)
## Autori
– **Marco Rossi** — interfaccia e stili
– **Giulia Bianchi** — logica della calcolatrice
– **Luca Verdi** — cronologia e localStorage
## Licenza
MIT License — vedi [LICENSE](LICENSE) per i dettagli.
1.5 — Licenze: chi può usare il tuo codice?
Quando pubblichi codice su GitHub, senza una licenza nessuno ha il diritto legale di usarlo, copiarlo o modificarlo — anche se il repository è pubblico. La licenza è un file (LICENSE) che dichiara cosa gli altri possono fare con il tuo codice.
| Licenza | Permette | Richiede | Ideale per |
|---|---|---|---|
| MIT ⭐ | Tutto: usare, copiare, modificare, vendere | Mantenere il copyright originale | Progetti scolastici, librerie, codice che vuoi condividere liberamente |
| Apache 2.0 | Come MIT + protezione da brevetti | Copyright + documentare le modifiche | Progetti aziendali, librerie professionali |
| GPL v3 | Usare, copiare, modificare | Il codice derivato deve essere GPL (copyleft) | Software che vuoi rimanga sempre open source |
| Nessuna licenza | Niente — il codice è “tutti i diritti riservati” | — | Mai consigliato per repo pubblici |
📌 Per i progetti scolastici: usa la licenza MIT. È la più semplice e permissiva — dice sostanzialmente “fai quello che vuoi, basta che mantieni il mio nome”. È la licenza più popolare su GitHub. Per aggiungerla: quando crei il repository su GitHub, seleziona “MIT License” dal menu delle licenze. Oppure crea un file LICENSE copiando il testo da choosealicense.com/licenses/mit.
1.6 — .gitignore: escludere file dal repository
Non tutti i file devono andare nel repository. File temporanei, password, configurazioni locali, cartelle di dipendenze — tutti questi inquinano il repo e a volte creano problemi di sicurezza. Il file .gitignore dice a Git quali file ignorare.
| Tipo di file | Esempio | Perché ignorarlo |
|---|---|---|
| Credenziali e segreti | .env, passwords.txt, api_keys.json | Sicurezza! Password e token nel repo = compromessi. |
| Dipendenze installate | node_modules/, venv/, vendor/ | Pesanti (centinaia di MB) e ricostruibili con un comando. |
| File compilati / build | dist/, build/, *.class, *.o | Generati automaticamente dal codice sorgente. |
| File del sistema operativo | .DS_Store (macOS), Thumbs.db (Win) | File nascosti creati dal OS — inutili nel progetto. |
| File dell’IDE / editor | .vscode/, .idea/, *.swp | Configurazioni personali dell’editor — ogni sviluppatore ha le sue. |
| Log e cache | *.log, .cache/, tmp/ | File temporanei che cambiano continuamente — sporcano la storia. |
1.7 — Sintassi del .gitignore
# Ignora un file specifico
passwords.txt
# Ignora tutti i file con una certa estensione
*.log
*.tmp
# Ignora un’intera cartella
node_modules/
dist/
build/
# Ignora file di sistema
.DS_Store
Thumbs.db
# Ignora le configurazioni dell’editor
.vscode/
.idea/
# Ignora file .env (contengono variabili d’ambiente / segreti)
.env
.env.local
# Eccezione: NON ignorare questo file specifico (con !)
!.env.example
| file.txt | Ignora il file file.txt ovunque nel progetto |
| cartella/ | Ignora l’intera cartella e tutto il suo contenuto. Lo slash finale indica “è una cartella”. |
| *.log | Ignora tutti i file che terminano con .log. L’asterisco è un wildcard. |
| !importante.log | Eccezione: non ignorare questo file anche se corrisponde a *.log. |
| # | Commento — ignorato da Git. Usa per spiegare le regole. |
| **/logs | Ignora la cartella logs a qualsiasi profondità nell’albero delle cartelle. |
⚠️ .gitignore funziona solo sui file non ancora tracciati. Se hai già committato un file e poi lo aggiungi al .gitignore, Git continua a tracciarlo. Per smettere di tracciare un file già committato: git rm --cached file.txt (lo rimuove dal tracking ma lo lascia sul disco), poi committa. Da quel momento il .gitignore lo ignorerà.
1.8 — Template .gitignore per linguaggi comuni
GitHub fornisce template .gitignore pronti per ogni linguaggio. Li trovi su github.com/github/gitignore. Quando crei un repository su GitHub, puoi selezionare un template dal menu “Add .gitignore”.
dist/
.env
.DS_Store
*.log
*.pyc
venv/
.env
*.egg-info/
target/
.idea/
*.jar
*.war
💻 2. Esempi guidati
Esempio A — Creare un README da zero
# Crea il README con l’editor (o con cat)
$ cat > README.md <<‘EOF’
# Mio Progetto 🚀
Un progetto di esempio per imparare Git e GitHub.
## Come iniziare
“`bash
git clone git@github.com:tuousername/mio-progetto.git
cd mio-progetto
“`
## Autore
– **Mario Rossi** — [github.com/mario-rossi](https://github.com/mario-rossi)
## Licenza
MIT
EOF
$ git add README.md
$ git commit -m “Aggiunto README con descrizione e istruzioni”
$ git push
Esempio B — Creare un .gitignore per un progetto web
# Dipendenze
node_modules/
# Build
dist/
build/
# Variabili d’ambiente
.env
.env.local
# Sistema operativo
.DS_Store
Thumbs.db
# Editor
.vscode/
.idea/
# Log
*.log
EOF
# Verifica che funzioni
$ mkdir node_modules && echo “test” > node_modules/test.js
$ git status
# node_modules/ NON appare — il .gitignore lo ignora!
$ git add .gitignore
$ git commit -m “Aggiunto .gitignore per progetto web”
$ git push
Esempio C — Smettere di tracciare un file già committato
$ echo “.env” >> .gitignore ← aggiungi al .gitignore
# Ma .env è già tracciato! Il .gitignore da solo non basta.
# Devi rimuoverlo dal tracking (ma tenerlo sul disco):
$ git rm –cached .env
rm ‘.env’ ← rimosso dal tracking, NON dal disco
$ git status
deleted: .env ← Git lo vede come “cancellato” dal repo
modified: .gitignore
$ git commit -m “Rimosso .env dal tracking e aggiornato .gitignore”
$ git push
# Il file .env è ancora sul tuo disco ma non è più nel repository.
$ ls .env ← esiste ancora!
$ git status ← .env non appare (ignorato dal .gitignore)
🏋️ 3. Esercizi
🟢 Esercizio 1 — Il tuo primo README (Facile)
b) Crea un file
README.md con almeno: titolo, descrizione, sezione “Come iniziare” e autore.c) Committa e pusha.
d) Vai su GitHub nel browser — il README viene renderizzato correttamente sotto la lista dei file?
e) Aggiungi un’emoji nel titolo (es. 🚀). Pusha. Si vede su GitHub?
🔵 Esercizio 2 — .gitignore in azione (Medio)
.gitignore che ignora: *.log, .env, node_modules/, .DS_Store.b) Committa il
.gitignore.c) Crea i file:
errori.log, .env, una cartella node_modules/ con un file dentro, e codice.js.d) Esegui
git status. Quali file appaiono? (Solo codice.js — gli altri sono ignorati.)e) Aggiungi e committa
codice.js. Verifica che i file ignorati non siano nel commit con git show --stat HEAD.
🟠 Esercizio 3 — Rimuovere un file già tracciato (Medio)
segreto.txt con il testo “password123”. Fai add e commit. (Oops!)b) Aggiungi
segreto.txt al .gitignore.c) Esegui
git status — il file appare ancora? (Sì! Il .gitignore non agisce su file già tracciati.)d) Rimuovi dal tracking:
git rm --cached segreto.txt.e) Committa. Verifica con
git status che il file non sia più tracciato.f) Verifica che il file
segreto.txt sia ancora sul disco: ls segreto.txt.
🟣 Esercizio 4 — README professionale completo (Difficile)
Crea un repository portfolio-progetto su GitHub con tutti e tre i file professionali:
), sezione autori con link al profilo GitHub, licenza.b) .gitignore per un progetto web (node_modules, .env, .DS_Store, log, editor config).
c) LICENSE — scarica il testo della licenza MIT da choosealicense.com e crea il file.
d) Committa tutto e pusha. Visita il repository su GitHub: il README è renderizzato? La licenza è riconosciuta? (GitHub mostra un badge “MIT License” nella sidebar.)
e) Chiedi a un compagno di visitare il tuo repository e dirti se capisce cosa fa il progetto in meno di 30 secondi.
❓ 4. Quiz di verifica
1. Perché è importante avere un README nel repository?
Mostra risposta
Il README è la prima cosa che le persone vedono quando visitano il tuo repository su GitHub — è il “biglietto da visita” del progetto. Senza README, il visitatore vede solo una lista di file senza contesto e non sa cosa fa il progetto, come installarlo o come usarlo. Un buon README comunica professionalità, facilita la collaborazione (i compagni sanno come contribuire), aiuta il prof a capire cosa stai consegnando, e se il progetto è pubblico, attira potenziali contributori o datori di lavoro.
2. Se un repository pubblico su GitHub non ha una licenza, cosa possono fare gli altri con il codice?
Mostra risposta
Legalmente, niente. Senza licenza, il codice è sotto “tutti i diritti riservati” — nessuno ha il permesso di usarlo, copiarlo, modificarlo o distribuirlo, anche se il repository è pubblico e chiunque può vederlo. Il fatto che il codice sia visibile non significa che sia utilizzabile. Per permettere agli altri di usare il tuo codice, devi aggiungere esplicitamente una licenza (come MIT, Apache o GPL). Per i progetti scolastici, la licenza MIT è la scelta più semplice e permissiva.
3. Hai aggiunto node_modules/ al .gitignore, ma git status continua a mostrare file dentro node_modules. Perché?
Mostra risposta
Probabilmente la cartella node_modules/ era già stata aggiunta al tracking prima che il .gitignore fosse creato. Il .gitignore funziona solo sui file non ancora tracciati — non ha effetto sui file che Git sta già tracciando. Per risolvere: git rm -r --cached node_modules/ (rimuove dal tracking tutta la cartella ma la lascia sul disco), poi committa. Da quel momento, il .gitignore impedirà che venga ri-tracciata.
4. Qual è la differenza tra git rm file e git rm --cached file?
Mostra risposta
git rm file rimuove il file sia dal tracking di Git che dal disco — il file viene cancellato fisicamente. git rm --cached file rimuove il file solo dal tracking di Git ma lo lascia sul disco — il file resta nella tua cartella ma Git smette di seguirlo. Il secondo è quello che usi quando vuoi smettere di tracciare un file (per poi ignorarlo con .gitignore) senza cancellarlo dal tuo computer.
5. Cosa fa la riga !.env.example in un .gitignore che contiene anche .env?
Mostra risposta
Il punto esclamativo ! è una negazione: dice a Git “non ignorare questo file, anche se corrisponde a una regola precedente”. In questo caso, .env ignora tutti i file che si chiamano .env o iniziano con .env, ma !.env.example fa un’eccezione per .env.example. È una pratica comune: il file .env.example contiene le variabili d’ambiente senza i valori reali (es. API_KEY=inserisci_qui) come modello per i compagni — va nel repository. Il vero .env con i valori segreti resta ignorato.
6. Come si formatta un blocco di codice in Markdown?
Mostra risposta
Con tre backtick (```) prima e dopo il blocco. Per attivare il syntax highlighting (colorazione del codice), aggiungi il nome del linguaggio dopo i primi tre backtick: ```javascript per JavaScript, ```python per Python, ```bash per comandi da terminale. Per codice inline (nel mezzo di una frase), usa un singolo backtick: `variabile`. GitHub renderizza automaticamente il blocco con sfondo grigio e colorazione del codice appropriata per il linguaggio indicato.
📚 Riepilogo della lezione
- README.md: il biglietto da visita del progetto — GitHub lo renderizza in HTML
- Markdown:
#titoli,**grassetto**,- lista,[link](url),```blocco codice``` - Sezioni essenziali: titolo + descrizione, come iniziare, autore
- Licenza: senza licenza = tutti i diritti riservati. Per la scuola: MIT
- .gitignore: dice a Git quali file ignorare — credenziali, dipendenze, file di sistema
- Sintassi:
file.txt(file),cartella/(cartella),*.log(wildcard),!eccezione - .gitignore non agisce su file già tracciati — serve
git rm --cachedprima - Template pronti su github.com/github/gitignore
Prossima lezione →
Lezione 16 — GitHub Issues
Creare, assegnare, etichettare e chiudere issue.
Referenziare issue nei commit. Template per issue.
Corso Git & GitHub · Per studenti e insegnanti · Lezione 15 di 45