Git mini guida ai comandi principali

Git è stato ideato e sviluppato da Linus Torvalds ed è forse attualmente il miglior sistema di controllo di versione distribuito. Torvalds ha sempre odiato CVS e SVN in quanto non permettevano lo sviluppo completamente offline del codice. Git ha infatti un approccio diverso in quanto una copia del repository è in locale. Git viene utilizzato per sviluppare il kernel di linux, android ma anche un infinità di altri progetti come jquery mobile, eclipse, kde postgreSQL etc. Ormai gira ovunque anche su windows ed è scaricabile dal sito ufficiale http://git-scm.com/ Esistono anche tantissime interfacce grafiche per linux, windows e Mac Os.

Questa guida da per scontato che vi siate già scaricati e installati git e che sappiate usare la bash di linux o windows.

Git-Logo

Git mini guida ai comandi principali

Creare la cartella di progetto

mkdir nomeprogetto.git

Ovviamente prima di digitare i comandi dovete spostarvi all’interno della directory del progetto:

Creare un progetto con git (inizializzare)

git init

Usare il progetto normale solo se vi occorre usare git per progetti personali a cui lavorate solo voi in locale e non dovete condividerlo.

Invece se il progetto è utilizzato da molte persone occorre creare un progetto bara 🙂 r.i.p. Per inizializzare un progetto bara usare questo comando:

git init --bare

Se il progetto è sviluppato da un team di persone e condiviso deve essere bare in questo modo git si comporterà come cvs o svn con tutti i vantaggi di git. Un “bare repository” significa creare un repository centralizzato, ovvero che non contiene files di lavoro, ma solo la cartella .git con le metainformazioni. In pratica si lavora con i file solo sul pc locale, poi si invieranno (pusheranno) i dati al repository centrale con git push.

Checkout e gestione di un repository di git

git clone nomeutente@host:/percorso/del/repository

Qua ci sarebbe da fare un lungo discorso su come fare l’autenticazione automatica tramite chiave ssh per non mettere tutte le volte nome utente e password se riesco scriverò un articolo a parte su questa cosa che è peraltro già spiegata meravigliosamente su github.
https://help.github.com/articles/generating-ssh-keys

Aggiornare il repository in pratica l’update dei file

git pull

Aggiungere files al progetto

git add 

oppure per aggiungere TUTTI I FILE

git add *

Rimuovere file dal progetto

git rm 

Rimuovere un file senza cancellarlo dal filesystem

git rm --cached 

Committare le modifiche (sul repository LOCALE)

git commit -m "Messaggio per la commit"

Se successivamente modificherai i files il comando commit non farà nulla
esplicitamente e dovrai usare il flag -a che committerà automaticamente tutti i file modificati:

git commit -a -m "Changed some files"

oppure dovrai indicare i files che sono stati modificati e che vuoi committare:

git commit -m "change some files" file1 file2

Se non avete definito utenza, vi darà errore ecco come fare:

*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.

Come dice l’errore vi basterà inserire le informazioni con il comando git config se volete che valgano solo per il progetto corrente non dovete mettere –global altrimenti mettete global e tutti i progetti utilizzeranno stessa email e stesso username.

Inviare le modifiche al progetto principale (PUSH)

git push origin master

Notare che dopo origin c’è la branch ovviamente quella principale è master se si vuole committare su una determinata branch basta cambiare “master” nel branch al quale vuoi inviare le modifiche.

Git Lavorare con i branches

La potenza di git è anche la facilità con cui si gestiscono le branch di un progetto ecco un esempio banale:
Esempio per creare un branch chiamato “feature_x” e switchare per usarlo si fa semplicemente così

git checkout -b feature_x

Per eliminare il branch invece basta fare -d e poi fare il push

git branch -d feature_x
git push origin 

Update dei file e merge

Nella directory principale per unificare una branch nella branch principale, il master occorre usare il comando:

git merge 

Purtroppo non sempre sono rose e fiori se si lavora in molti sulle stesse porzioni di codice è facile andare in conflitto. Per risolvere eventuali conflitti e flaggarli come risolti.

Ignorare i file di progetto o inutili

Per ignorare i file di eclipse, visualstudio o qualsiasi altro materiale che non volete che git aggiunga automaticamente bisogna creare il file .gitignore dentro al progetto. Su questo repository su github trovate i principali gitignore del pianeta terra 😀
https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

Archiviare il master ovvero il tarball in git (in locale)

Dopo esservi posizionati all’interno del progetto digitare questo comando

git archive --output=../master.zip master

Risoluzionni problemi elementari:

Attenzione che la prima volta che fate push (una specie di commit sull’originale) essendo un repository vuoto potrebbe darvi errore

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as ‘master’.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to […]

vi basterà usare questo comando per rimettere le cose a posto

git push origin master

ovvero indicare che si sta lavorando nel branch master, una volta eseguito se lo ricorderà e basterà fare semplicemente git push, maggiori info le trovate qui: http://www.thebuzzmedia.com/git-tip-git-push-no-refs-in-common-and-none-specified

Vi ricordo che con git vale la regola “one repository per project” cioè va creato un repository per ogni progetto, ovviamente ognuno fa come vuole e potresti ammucchiare tutti i progetti all’interno di un unico repository, tuttavia se i progetti sono complessi poi sarebbe molto difficile da gestire.

Questa guida si ispira alla fantastica guida tascabile presente a questo indirizzo: http://rogerdudler.github.com/git-guide/index.it.html

Happy gitting (:

Frasi famose su git

Torvalds ha scherzato sul nome git, il cui suono in slang ricorda quello di “persona sgradevole”. Torvalds ha detto: “Sono un bastardo egoista, e chiamo tutti i miei progetti con la mia persona prima ‘Linux’ e ora ‘git’.». La pagina del manuale di git lo descrive come “uno stupido tracker per contenuti”.

Linux Torvalds odia CVS e odia SVN perchè è “CVS FATTO BENE”.

Link utili

http://stackoverflow.com/questions/871/why-is-git-better-than-subversion

http://git-scm.com

L'articolo ti è stato utile?

Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!