la gestione di versioni multiple di un insieme di informazioni” • Repository • Struttura dati che mantiene file, directory • Ogni cambiamento tracciato nella storia si chiama revisione (commit) • Working copy • Copia locale del repository ad una certa revisione Luca Ottaviano – [email protected]
di un repository • Update • Aggiorna la working copy all'ultima versione sul repository • Revert • Riporta un file nella working copy alla versione del repository Luca Ottaviano – [email protected]
repository • Devono essere atomici, cioè implementare una sola funzionalità • Bisect • Ricerca binaria del commit errato a partire dall'ultima versione funzionante • Tutti i commit devono essere atomici • Codice sempre compilabile! Luca Ottaviano – [email protected]
ha l'intera storia del progetto • Offline: tutte (o quasi) le operazioni non richiedono collegamento al server • Veloce: tutte le operazioni sono fatte in locale (eccetto gli update) • Ridondato: non c'è un singolo punto di fallimento • Sicuro: non si può modificare la storia senza che qualcuno se ne accorga • Bisect nativo Luca Ottaviano – [email protected]
copy • Salva lo stato della working copy e pochi altri metadati • I file non modificati sono riferimenti allo snapshot precedente Luca Ottaviano – [email protected]
+ metadati (autore, messaggio, data) • Può avere zero, uno o due commit padri • Identificato da un hash di 40 byte (SHA-1) Luca Ottaviano – [email protected]
in cui erano quando è stato fatto il commit • Può aggiungere e rimuovere file • Non funziona se ci sono modifiche locali ai file • Sintassi: $ git checkout f5aa747586ec2 # Ritorna allo stato di testingbranch # (fra poco vediamo i branch) $ git checkout testingbranch Luca Ottaviano – [email protected]
lettura • Per fare modifiche si deve creare un branch locale • Di default viene scaricato solo il branch 'master' • Altri branch vanno aggiunti a mano $ git branch a * master remotes/origin/master remotes/origin/testing $ git checkout t origin/testing Branch testing set up to track remote branch testing from origin. Switched to a new branch 'testing' Luca Ottaviano – [email protected]
modifiche dal repository remoto • In realtà fa fetch e merge • git push: invia le modifiche al repository remoto • Non funziona se il branch remoto è andato avanti Luca Ottaviano – [email protected]
i sorgenti di un progetto $ cd project $ git init . $ git commit a m “Primo commit” # Fatto! Adesso ho un repository git funzionante! # Faccio delle modifiche... $ vim bar.c # ...e salvo i cambiamenti $ git add bar.c $ git commit m “Fix bug” • Si può creare un repository locale per lavorare da soli • Utile per progetti personali, script etc. Luca Ottaviano – [email protected]
Il comando 'push' aggiorna i branch remoti • Non funziona se il branch remoto è andato avanti • Bisogna fare 'fetch' e 'merge' prima di riprovarci • Non si può distruggere il lavoro di altri • git push <repo> <mio_branch> • git push <repo> <mio_branch>:<branch_remoto>