Git

From AIRWiki
Jump to: navigation, search

Concetti Fondamentali

Git è un sistema di controllo versione distribuito. Questo vuol dire che ogni copia locale è un repository a se stante. Quindi a differenza di SVN la gestione dei repository è più complessa, con il vantaggio di una maggiore versatilità. Avere un repository locale significa che è possibile committare in locale il proprio lavoro. Una volta committato in locale il proprio lavoro si può sincronizzare il repository locale con quello remoto. Si chiama pull l'operazione che aggiorna il repository locale con quello remoto. Si chiama push l'operazione che invia i commit locali sul repository remoto. Per poter eseguire correttamente un push, è necessario che l'ultimo commit locale e l'ultimo commit remoto siano lo stesso, il che significa che per effettuare un push, è necessario, a meno di non aver il repository locale già aggiornato, effettuare un pull.

Il repository locale mantiene la storia locale dei commit. Tuttavia è possibile effettuare modifiche sul repository locale. Per aggiungere a un commit modifiche locali e nuovi file, è necessario aggiungere i file (sia quelli nuovi, sia quelli modificati) all'indice del repository. Ogni volta che si effettua un commit verranno considerati solo i file presenti nell'indice, tutte le altre modifiche locali non verranno aggiunte al commit, ma resteranno nel repository.

Può capitare, se più persone lavorano a un progetto, che la copia sul repository remoto abbia subito modifiche rispetto all'ultimo commit del repository locale, ovvero che le due versioni (locale e remoto) abbiano un antenato in comune, ma poi si siano divise. In questo caso è necessario effettuare un merge. Se i due rami non hanno modifiche conflittuali, il merge sarà automatico. Se i due rami presentano delle modifiche concorrrenti, o modifiche che git non è in grado di risolvere (ad esempio cambio intentazione e spaziatura differenti) si dovrà procedere a un merge manuale. In caso di versioni discordanti è necessario ricordarsi di procedere nelseguente modo:

  • effettuare il commit del proprio lavoro
  • effettuare il pull del repository remoto
  • effettuare il merge
  • effettuare il push del repository

Che sia un merge automatico o un merge manuale, l'operazione si conclude sempre con un commit.

Guida base git

Segue una piccola guida minimale per utilizzare git in maniera semplice. per imparare a usarlo in maniera avanzata consigliamo di cercare tutorial su internet. Questa guida non ha la pretesa quindi di spiegare l'effettivo funzionamento, ma solo di riuscire a utilizzare il repository in maniera base.

creazione repository git

una volta creato il repository sul vostro server, o su un provider esterno (github, assembla, bitbucket)

git clone git@server:/var/git/repo_name local_repo_name

Il repository git ufficiale dell'airlab è qui, potete chiedere al professor Bonarini di farvi creare un repository per il vostro progetto.

Impostazioni globali

Prima di fare il primo commit è importante impostare email e nome utente nel seguente modo:

git config --global user.email email

git config --global user.name username


email è la vostra e-mail username è il vostro username

E' importante avere impostato correttamente questi campi, anche perchè sono utilizzati, specialmente la mail, dalle interfacce grafiche dei servizi di hosting (vedasi github) per riconoscere gli utenti.

primo commit

cd local_repo_name

crei dei file da committare

git add -A

git commit

git push origin master

primo pull

cd local_repo_name git pull origin master


successivi commit

git add -A

git commit

git push

successivi pull

git pull


Guida ai submodules

Clonare un repository con submodules

per clonare un repository che contiene submodules,usare il comando


git clone git@server:/var/git/repo_name local_repo_name --recursive


in alternativa, se il clone è stato effettuato senza il flag --recursive è possibile usare


git submodule init

git submodule update

aggiornare i submodule

Per aggiornare i submodule è possibile utilizzare il comando:

git submodule update --remote

Comandi utili

  • status
  • pull
  • push
  • commit
  • add
  • rm
  • stash
  • checkout
  • revert
  • reset
  • rebase
  • mergetool