SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
packz | Git                                                                                                   http://packz.noblogs.org/post/2007/06/03/git




                        packz




                   Se rvon o kTln 2 jou le s d i e n e rgia p e r trasm e tte re u n bit d i in form azion e in u n am bie n te a te m p e ratu ra T



          Git
                                                                                                                                      P u b lis h e d o n 0 6 / 0 3 ,2 0 0 7



              [AT T E N Z I O N E : p a g in a in via d i c o m p le ta m e n to ]



                    G it è un program m a distribuito per il c ontrollo di quot; revi sionequot; (m aledetti term ini inglesi[1][2]) di
          progetti sof tware c reato da L inus Torvalds per gestire lo sviluppo del kernel orm ai giunto ad un num ero
          di righe di c odic e probabilm ente insostenibile per una persona norm ale. Il progetto partì i l 3 Aprile 2005
          e già nel giugno dello stesso anno il kernel inc om inc iò ad essere gestito attraverso questo f antastic o
          strum ento. Visto l 'odio visc erale c he il c aro nostro am ic o (?) nutre per il sistem a alternati vo c hiam ato
          CVS (vedere video) e altri sistem i analoghi, ha dec iso di sc riverne uno lui stesso.

          Qui di seguito presenterò Git nella m aniera in c ui l' ho i m parato: non- linearm ente, per attività pratic he; i
          c om andi non direttam ente sperim entati avranno un link ad una possibile doc um entazione spec if ic a.

          Ca ra tteristiche
                      Supporto per lo sviluppo non lineare attraverso quot; branc hingquot; e quot; m ergingquot; e supporto per la
                      visualizzazione della loro storia.
                      Sviluppo distribuito: ognuno ha la propria c opia loc ale sulla quale può f are tutte le m odif ic he di c ui
                      sente il bisogno per poi poterle pubblic are ed eventual m ente gli am m ini stratori del progetto
                      potranno f are il m erge da quel repository.
                      F ac ilità di pubblic azione rem ota attraverso un protoc ollo apposito (git:// appunto) anc he se
                      ac c essibile anc he rispetto ai più tradizionali http, f tp, ssh etc ...
                      Utilizzo della c rittograf ia per la gestione della storia e dei quot; c om m itquot; .
          I nsta lla zione
              Per installarlo su un sistem a debian- like ai nec essitano dei seguenti pac c hetti
                      git- c ore
                      git- doc (se desideri avere la doc um entazione in f ile:///usr/share/doc /git- doc /index.htm l)
                      gitk (se si desidera visualizzare graf ic am ente gli sviluppi)
                      git- daem on- run (se si desidera rendere disponibile tram ite protoc ollo gi t gli sviluppi)
                      git- c om pletion (se si desidera avere il c om pletam ento dei c om andi da li nea di c om ando)
                      git- em ail (per le f unzioni legatate al m andare patc h via em ail)
                      git- gui (interf ac c i a spartana per le operazioni di base)



1 di 17                                                                                                                                                       16/11/2008 22:56
packz | Git                                                                             http://packz.noblogs.org/post/2007/06/03/git


                git- buildpac kage (perm ette di im portare pac c hetti sorgenti c om e reposi tory di git)
          F are attenzione c he la versione nei pac c hetti dif f erisc e m olto da una distribuzione ad un' al tra c ausa
          l' inc essante attivi tà degli hac ker c he lavorano sopra G it (sono isc ritto al la m l e m i arrivano c irc a 50 m ail
          al giorno quando stanno tranquilli).
          Concetti

           G it basa il suo design sull'idea c he non c ' è uno sviluppatore m igliore degli altri: non vi è l a nec essità
          c he esista un repository princ ipale a c ui tutti debbano rif erirsi, m a perm ette anzi uno sviluppo
          distribuito, dove ognuno può, una volta c he ha sc aric ato il c odic e, apporre delle m odif ic he e ripubblic are
          a sua volta il c odi c e perm ettendo m odif ic he ulteriori;

          Al c ontrario di altri program m i di questo tipo, lui non elabora f ile, m a i c ontenuti dei f ile, L inus stesso lo
          desc rive c om e c ontent- addressable; c ontiene due strutture dati
              1. Un indic e m utevol e c he rac c oglie le inf o sulla direc tory di lavoro c orrente e sulla versione
                 suc c essiva c he verrà im portata.
              2. D atabase di oggetti (im m utabile).
          In partic olare esistono varie tipologie di oggetti:
               Blob: semplic em ente un insiem e binario di dati c he non si rif erisc e a niente altro. A basso livello
                viene c reato tram ite git-update-index , m entre il c ontenuto può essere visualizzato tram ite
                git-c at-f ile.
                Tree: è un oggetto c he lega assiem e blob e/o tree; viene c reato tram ite git-w rite-tree e visualizzato
                attraverso git-ls-tree
                Com m it: introduc e il c onc etto di quot; storiaquot; : è rappresentato dal tree risultante, dal c om m it
                ef f ettuato/i per arrivare a quel punto e dal c om m ento a questi.
                Tag:identif ic a sim bolic am ente altri oggetti, tram ite l' identif ic azione ed il tipo dell' oggetto
          Si può ric onosc ere in questo sc hem a un graf ic o c ic lic o diretto.

          Ognuno di essi viene denominato attraverso un H ash SH A- 1 di 40 c if re esadec im ali c reato c on il
          c ontenuto proprio dell' oggetto. Questo c odic e può essere utilizzato per rif erirsi a ben determ inati punti
          (tem porali) del progetto.

          Capito c om e f unzi ona a basso livello questo astuto program m a, potete im m aginare c he la grandezza più
          utilizzata è il tree: sic c om e un c ommit punta ad un tree ed una tag punta ad un c ommit, entram bi
          possono essere usati indistam ente. In m aniera analoga una tag è sim il c ommit quindi può essere usata
          quando si ric hiede un c ommit.

          Spec if ic ando il nom e di una ref erenza, git la c erc a in una di queste direc tory



               .git/                 (or $GIT _DIR )
               .git/ref s/            (or $GIT _DIR /r ef s/)
               .git/ref s/heads/         (or $GIT _DIR /ref s/heads/)
               .git/ref s/tags/          (or $GIT _DIR /ref s/tags/)



           Esistono inoltre una gram m atic a ben prec isa per rif erirsi alle ref erenze: la testa del ram o c orrente di
          sviluppo viene indic ato c on H EAD (si trova in .git/H EAD) ed è un rif erim ento ad un elem ento in .git/ref s
          /heads/; è possibile usare l'operatore postf i sso ^ per indic are il genitore di una data ref erenza. Sic c om e è
          possibile usarlo pi ù volte esiste la regola c he l' applic azione ripetuta N volte di ^ può essere sostituita
          c on l' operatore postf isso ~ seguito da N: c ioé



               H EAD^^^ è eq uivalente a H EAD~3



          Sic c om e questi rif erim enti sono ovviam ente legati al la situazione attuale del ram o di svil uppo, è




2 di 17                                                                                                                   16/11/2008 22:56
packz | Git                                                                                   http://packz.noblogs.org/post/2007/06/03/git


          possibile c onosc ere la ref erenza assoluta usando



              git rev -parse R EFER ENZA



          quindi nel c aso prec edente basta dare git rev -parse H EAD~3 per sapere a qual e c ommit si rif erisc e. Una
          desc rizione più approf ondita la si può trovare tram ite git rev -parse --help alla sezione SP EC IFY IN G
          R EVISION S da c ui potrete c apire f igure quali

                         G H          I   J
                   /        /
                   D E F
                     | / 
                       | / |
                       |/      |
                        B         C
                          /
                            /
                            A


                  A =   = A^0
                  B = A^ = A^1                = A~1
                  C = A^2 = A^2
                  D = A^^ = A^1^1 = A~2
                  E = B^2 = A^^2
                  F = B^3 = A^^3
                  G = A^^^ = A^1^1^1 = A~3
                  H = D^2 = B^^2  = A^^^2 = A~2^2
                  I = F^ = B^3^  = A^^3^
                  J = F^2 = B^3^2 = A^^3^2

          Getting sta rted

           Oltre a voler c api re c om e sono im plem entate le f unzi onalità di git, m agari vorrete usarlo no? no
          problem a, per questo esiste questa parte: c erc hiam o di esplic are i c om andi f ondam entali e/o più utili,
          anc he se, per un approf ondim ento, rim ando alla doc um entazione uf f ic iale.

          Supponiam o c he abbiam o appena iniziato un nuovo progetto e c he c i troviam o nella direc tory in c ui il
          progetto stesso risiede, per inizializzare il repository bisogna eseguire[3]



              git init-db



          e di seguito



              git add . se si vuole imp ortare tutto, op p ure git add f ile_1 ... f ile_n se interessano solo c erti file



          Visto c he lo sc opo princ ipale di questo program m a è il trac c iare i c am bi am enti, una volta c he si è
          lavorato su un albero di sorgenti si possono c ontrollare i c am biam enti attraverso



              git status




3 di 17                                                                                                                      16/11/2008 22:56
packz | Git                                                                                    http://packz.noblogs.org/post/2007/06/03/git


          c he rende noto i f ile m odif ic ati m a non quot; c om m ittatiquot; , i f ile c he non vengono inseriti etc ..lo sc hem a di
          utilizzo è il seguente: via via c he si f anno le m odif ic he e si interessa salvarle nel prossim o c om m it, si
          aggiungono i f ile utili tramite git add; per ef f ettuare ef f ettivam ente il c om m it



                 git c ommit



          c he indic izza tutti i c am biam enti m em orizzati nell' index (bisogna sc rivere il c om m ento ed è
          c onsigliabile dividerlo in uno riassuntivo ed uno più esplic ativo separati da una linea vuota). Per
          ric ordarc i quali sono i c am biam enti c he sono stati apportati f ra indic e, repository e working tree viene in
          aiuto il c om ando git dif f : norm alm ente questo c om ando restituisc e la dif f erenza f ra il working tree ed il
          repository senza tenere c onto delle m odif ic he già inserite nell' indic e (in pratic a f a un dif f f ra working
          tree e indic e per f arla breve); per avere inf o a riguardo al c odic e inserito nell' indic e rispetto a quello del
          repo si aggiunge l 'opzione --c ac hed al c om ando.Altra sim patic a opzione c he aiuta la visualizzazione è
          --c olor c he rende di c olore rosso o verde le righe rispettivam ente tolte o aggiunte.

          È anc he possibile c onf igurare git in m aniera tale c he i nserisc a in autom atic o i vostri dati nei c om mit: nel
          m io c aso nel f ile .git/c onf ig ho inserito le righe



                 [user]
                    name = quot; pac kzquot;
                    email = quot; pac kz at autistic i dot or gquot; [ ovviamente tu c he non sei u n b ot fai i c amb iamenti d el c aso]



          È evidente c he è possibile inserire nuovi f ile in qualunque m om ento nel progetto usando sem pre git add
          ed è inoltre importante tenere c onto del f atto c he è possibile usare wildc ard per sc egliere f ile c he
          rientrano in un ben determ inato sc hem a: per esem pio



                 git add direc tory _generic a/*.tx t



          inserirà nell' indic e tutti i f ile c he hanno estensione txt (la barra davanti all' asterisc o preserva quel
          c arattere dall'interpretazione f atta dalla shell e nel c aso di git inserisc e f ile txt anc he di sottodirec tory).
          Nel c aso abbiate bisogno di elim inare un f ile dall' indic e potete usare



                 git rm



          c he appunto, si oc c upa dell'operazione inversa di git add (non è proprio c osì). Nel c aso nec essitate di un
          m essaggio standard nei c om m it, è possibile im postare nella c onf igurazione un f ile c ontenente il
          tem plate di questo m essaggio tram ite il suo path relativo alla working dir:



                 [c ommit]
                        template = .git/c ommit-template



          dove ovviam ente dopo tem plate potete inserire il perc orso c he volete.

          Coma ndi utili

              G it dispone di varie f unzionalità c he ric hiam ano le uti lity da riga da c om ando tipic he del m ondo *nix e



4 di 17                                                                                                                              16/11/2008 22:56
packz | Git                                                                                                                       http://packz.noblogs.org/post/2007/06/03/git


          c he perm ettono la gestione e la lettura del c odic e nel la sua evoluzione tem porale e non; uno dei c om andi
          è git blam e c he perm ette di vedere ad ogni linea di un dato f ile c hi lo ha m odif ic ato e quando, potendo
          lim itare ad un dato range di questo tram ite anc he espressioni regolari: per esem pio



                 :) $ git bla me -L ' /^ f unc t io n ge ne ra t e _sc ript _js( /,/^ }$/' priv a t e /P hp/ro ut ine .php
                 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 46) f unc t io n ge ne ra t e _sc ript _js( $src ) {
                 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 47)                  $js = quot; < sc ript t y pe = quot;t e x t /ja v a sc ript quot; src = quot;$src quot; re l= quot;ja v a sc ript quot;> quot;;
                 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 48)                              $js .= quot; < /sc ript > nquot;;
                 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 49)                              re t urn $js;
                 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 50) }




          restituisc e le righe delle def inizione di una f unzione Php. Inoltre è c apac e di trac c iare linee di c odic e
          spostate da un f ile all'altro passandogli l'opzione - C (seguendo questo c onsiglio di Torvalds, è m eglio
          c opiare, f are il c om m it e poi modif i c are quelle linee).

          Altro c om ando è git grep c he c om e l'om onim o da shell c erc a l' oc c orrenza di una determ inata stri nga
          nel f ile passato c om e argom ento (ni c e l'opzione --c olor c he perm ette una lettura più c hiara).

          È possibile anc he c onosc ere in quali c omm it un dato f ile è stato c am biato tram ite



                 git w hatc hanged path/to/f ile



          (senza il nom e del f ile restituisc e un log c on tutti i f ile m odif ic ati).

          F orse la vera potenzialità sta propri o in questa c aratteristic a c he perm ette di quot; m ontarequot; opportunam ente
          i singoli c om andi per ottenerne di nuovi: supponiam o di voler c onosc ere il num ero di linee a c ui
          am m onta ogni singolo f ile del progetto, usando le f unzionalità della shel l bash e i c om andi di git questo è
          possibile tram ite i l c om ando



                 f or i in $(git ls-f iles); do w c -l $i; done | aw k ' //{VAR +=$1; print $0}EN D{print quot; totale: quot; VAR }'



          oppure è possibile c onosc ere il num ero di persone diverse c he hanno c ontribuito al c odic e presente nel
          repository (f onte)



                 git log --pretty =short | sed -n 's/^Author: ([^<]*)<.*$/1/p' | sort | uniq | w c -l



          B ra nch& Ta g

              Esistono due c ose f ondam entali nell o sviluppo del sof tware: la possibilità di provare nuove soluzioni e la
          possibilità di im postare a determ inate c onf igurazioni del c odic e dei nom i/versioni da poter porre c ome
          punti f erm i nello sviluppo. Questa possibilità sono espresse da G it attraverso i branc h e le tag.

              Per branc h si intendono delle quot; linee c onc ettualiquot; di sviluppo in c ui suddi videre il progetto, possono
          essere derivate da progetti esterni (trac king branc hes) oppure provenire da c am biam enti m inim i dal
          ram o princ ipale (topic branc hes). Al l'inizio esiste solo il branc h c hiam ato m aster m a è sem plic issim o
          c rearne di nuovi e utilizzarli ac robatic amente passando da uno all' altro!!!

          Un sem plic e



                 git branc h




5 di 17                                                                                                                                                                                16/11/2008 22:56
packz | Git                                                                               http://packz.noblogs.org/post/2007/06/03/git


          restituisc e l' elenc o dei branc h disponibili, m entre per c rearne uno di nom e ' hazardous' si abbisogna del
          m agic o c om ando



              git branc h hazardous



          a c ui sarà possibil e ac c edere attraverso



              git c hec kout hazardous



          e f are le m odif ic he senza m odif ic are il ram o m aster; riutilizzando git branc h si otterrà



              master
              * hazardous



          c on l' asterisc o ad indic are il branc h in c ui si stanno ef f ettuando le m odif ic he. Nel m om ento in c ui c i
          ritroviam o c on del c odic e in un branc h quot; experim entalquot; c he riteniam o oram ai stabile, possiam o unirlo al
          branc h princ ipale tram ite il m erging:



              git merge [quot; qui un c ommentoquot; master] hazardous



          oppure spostarc i nel branc h voluto e poi eseguire sem plic em ente



              git merge hazardous



          se non c i saranno problem i i due ram i saranno uniti in uno solo e quello m aster c onterrà i c am biam enti;
          git possiede degli algoritm i per gestire la f usione di c odic e nello stesso f ile, m a non è detto c he il tutto
          sia possibile, in questo c aso nel f ile (o nei f ile) interessato/i saranno presenti delle linee in stile dif f c on
          evidenziati i probl em i (appena sarò più pra tico v i fa rò sa pere). Se non pensate di ef f ettuare più
          c am biam enti da quel branc h lo potete c anc ellare tram ite



              git branc h -d hazardous



          In una sola m ossa è possibile anc he c reare e spostarsi nel nuovo branc h tram ite



              git c hec kout -b hazardous



          inoltre è anc he possibile f are il c hec kout di una versione più vec c hia usando il c om m it c om e argom ento
          per poi aprire un nuovo branc h da quel punto usando la regola appena insegnata. È anc he possibile c reare
          dei branc h quot; vuotiquot; c ioé dei ram i di sviluppo senza parents: il m etodo da usare è un po' tric k y e ve lo
          espongo nel segui to




6 di 17                                                                                                                     16/11/2008 22:56
packz | Git                                                                             http://packz.noblogs.org/post/2007/06/03/git



                 $   git-sy mbolic -ref H EAD ref s/heads/my branc h
                 $   git rm --c ac hed -r .
                 $   rm * # questo serv e quando si c ambierà branc h per ev itare errori
                 $   git c ommit --allow -empty



          è utile per c reare del c odic e parallelo al progetto di sviluppo m a c he può non interessare i norm ali
          developer, per esem pio la web page del progetto etc ...

          Si può utilizzare il c hec kout per invertire i c am bi loc al i al proprio arc hivio loc ale tram ite



                 git c hec kout -f



          c he in pratic a riporta all'attuale ram o il c ontenuto dell a direc tory.

          Per quanto riguarda i tag invec e è ugualmente sem plic e la loro gestione:



                 git tag -l <pattern>



          visualizza i tag c on un nom e c he rispec c hia il pattern passato, m entre



                 git tag <label>



          im posta <label> c om e tag della at tuale versione.

          R eba sing

              È anc he possibile c he vi troviate in questa situazione



                                                       A---B---C topic
                           /
                           D---E---F---G master




          e vogliate aggiornare il branch topic con master in modo da ottenere la situazione


                                                                         A'--B'--C' topic
                           /
                           D---E---F---G master




          senza dover f are un branc h tem poraneo e spostare le patc h per ric reare la situazione: vi viene in aiuto
          git rebase! basta in questo c aso dare



                 git rebase master topic




7 di 17                                                                                                            16/11/2008 22:56
packz | Git                                                                                 http://packz.noblogs.org/post/2007/06/03/git


          c he passa al branc h topic ed ef f ettua appunto il rebasing; nel c aso f oste già in topic so potrebbe togliere
          l' ultim o argom ento.Questo c om ando è m olto potente i n quanto perm ette di m odif ic are i si ngoli c om m it
          f ondendoli o dividendoli all'oc c orrenza per sopperire a qualsiasi nec essità. Nel c aso c i siano dei problem i
          è possibile annullare l'operazione tram ite


                 git rebase --abort


          Esiste anc he una versione interattiva di questo c om ando nelle ultim issim e versioni a c ui si ac c ede
          (sorpresa) c on


                 git rebase --interac tiv e


          Erra re huma num est
              Può c apitare di sbagliare ed inf atti ec c o qualc he c om ando utile per invertire l' errore
                  git   c hec kout FIL E -
                  git   reset - dim entic a nuovi f ile aggiunti
                  git   reset --hard - tralasc ia i c am biam enti
                  git   reset --sof t H EAD^ - c anc ella l'ultim o c om m it m a lasc ia i c am biam enti
                  git c hec kout -m br anc h_c orretto nel c aso si sia ini ziato a f are c am bi am enti nel branc h errato
          B iseca re i bug

          Suc c ede appunto di sbagliare durante la produzione del c odic e, m a m agari c e ne ac c orgiam o (m olto) in
          seguito,m agari qualc un'altro c he il risultato del nostro lavoro lo usa in m aniera dif f erente e nel
          f rattem po sono stati pushati svariati c om m it nel repository e non possiam o sapere direttam ente quale
          c om m it in partic olare ha introdotto un bac o: a questo viene aiuto il c om ando git bisec t c he si preoc c upa
          di c reare un branc h tem poraneo e di ef f ettuare una operazione di dic otom ia sulle parti del c odic e

          Io personalm ente non l'ho provato anc ora, m a potete trovare dalle parole del som m o il suo utilizzo.

          I mporta re un re pository remoto

           È im portante anc he poter im portare da una loc azione rem ota un progetto c he c i interessa, in m aniera da
          apportare le m odi f ic he da eventualm ente rispedire al m ittente (w l' open sourc e); per m ettere in pratic a
          questo il c om ando è



                 git c lone <uri>



          c he c rea nella direc tory c orrente il c ontenuto del repository e due branc h: m aster e origin, di c ui il
          prim o, per c onvenzione, è preposto alle m odif ic he. Per aggiornare il c ontenuto loc ale rispetto a quello
          rem oto è usato il c om ando



                 git pull



          (l' indirizzo da c ui proviene è nel f ile .git/remotes/origin).

          D i def ault viene sc aric ato solo il ram o m aster di un repository, per ottenere tutti i ram i presenti eseguire



                 git branc h -r




8 di 17                                                                                                                    16/11/2008 22:56
packz | Git                                                                             http://packz.noblogs.org/post/2007/06/03/git


          c he restituirà qualc osa c om e



                  origin/H EAD
                  origin/label_plac ing
                  origin/master
                  origin/menu_on_c lient
                  origin/pdf _prof ile
                  origin/x f orm
                  origin/x slt



          a questo punto c on un bel



                 git c hec kout --trac k -b loc al_branc h_name origin/remote_branc h



          c reerà un branc h l oc ale c hiam ato loc al_branc h_name a partire dalla ref erenza origin/remote_branc h e lo
          sinc ronizzerà c on quello rem oto.

              Pa tching

           Una ulteriore c hic c a di questo program m a è la possibi lità di generare delle patc h da spedi re per posta
          tram ite il c om ando (c on l'opzione -n e più patc h spec i f ic ate vi ritroverete c on l' intestazione della m ail
          nella f orm a quot; [PATCH 2/5]quot; )



                 git f ormat-patc h <sinc e>..[<until>]



          A m eno c he non spec if ic hiate - - stdout vi ritroverete tutti i dif f dei vari c om m it per arrivare da <sinc e>
          ad <until> (se quest'ultim o non è spec if ic ato, pone di def ault il ram o attuale); si può indic are per questi
          sia il loro c odic e hash c he il nom e del branc h c he una tag. Ovviam ente c om e si possono spedire le patc h,
          si possono anc he quot; leggerequot; ed è qui c he la potenzialità svetta:



                 git am <mail box >



          apre la m ail, sc ari c a le patc h e le applic a. Per <m ail box> si intende il perc orso alla c artella loc ale della
          m ail (nella doc um entazione parlano di quot; Berkeley m ail quot; c he dovrebbe c orrispondere alla posta letta
          attraverso il pac c hetto mailx in un sistem a D ebian); nel m io c aso è /v ar/log/pac kz se qualc uno ne sa di
          più batta una m ail ;- )

          Consiglio di usare l'opzione --interac tiv e c osì da poter sc egliere le patc h da applic are (una alla volta!)
          altrim enti vi dà errore (se non c i sono solo patc h!!!), al m assim o sc arivatele a parte e poi applic atelo.
          Com unque a m eno c he non siate dei guru installatevi pine (su ubuntu c ' è alpine) altrim enti diventate
          rinc oglioniti ad usare mail.

          Nel c aso non vogli ate sc lerare è possibile applic are la patc h m anualm ente tram ite il c om ando



                 git-apply mbox <f ile della patc h>




9 di 17                                                                                                                  16/11/2008 22:56
packz | Git                                                                               http://packz.noblogs.org/post/2007/06/03/git


           e vi ritroverete il c om m it già inserito nel tree c on il c om m ento prec eduto da quot; [P AT C H ]quot; per la gioia di
           grandi e pic c ini.

            Nel c aso non vi f i diate del vostro c l ient di posta è possibile utilizzare git send-mail per avere c on
           sic urezza l' invio della patc h: quindi



                 git send-mail --to pac kz@porc o.lo.spam.org --subjec t quot; v attela a prendere nel c uloquot; f iles



           Probabilm ente non avete un servet SM TP quindi vi c onviene installarvene uno af f inc hé il tutto f unzioni
           per il m eglio: dall a doc um entazione di git si c onsiglia msmtp, un sem plic e program m a c he perm ette di
           inviare patc h anc he attraverso c onnessioni c he utilizzano SSL (tipo gm ail oppure autistic i ;- )): per
           installarlo



                 # apt-get install msmtp



           poi c reare il f ile ~/.msmtprc c on per c hi usa un ac c ount su autistic i



                 # Ex ample f or a user c onf iguration f ile
                 # Set def ault v alues f or all f ollow ing ac c ounts.
                 def aults
                 tls on
                 tls_starttls of f
                 #tls_trust_f ile /etc /ssl/c erts/c a-c ertif ic ates.c rt
                 tls_c ertc hec k of f
                 logf ile ~/.msmtp.log
                 # My email serv ic e
                 ac c ount pac kz
                 host smtp.autistic i.org
                 port 465
                 f rom pac kz@un.mondo.senza.spam.org
                 auth on
                 user pac kz@un.mondo.senza.spam.or g
                 # if not set below , msmtp ask f or a passw ord
                 passw ord
                 # Set a def ault ac c ount
                 ac c ount def ault : pac kz



           e poi inviare la m ail tram ite



                  git send-email --smtp-serv er /usr/bin/msmtp f ile_c ontenente_la_patc h



              a quel punto vi verranno c hieste interattivam ente gli estrem i della m ail e le m anderà in autom atic o.
           Troubleshooting

           A me personalmente non ha funzionato subito: ecco i possibili scenari
               msmtp: /home/pac kz/.msmtprc : must hav e no more than user read/w rite permissions
               Soluzione: c hmod 0600 ~/.msmtprc
               msmtp: the serv er sent an empty reply




10 di 17                                                                                                                  16/11/2008 22:56
packz | Git                                                                                    http://packz.noblogs.org/post/2007/06/03/git


                Soluzione: tls_starttls of f (f orse non la m igliore...)
                msmtp: T L S c ertif ic ate v erif ic ation f ailed: the c ertif ic ate hasn' t got a know n issuer
                Suc c ede sic c om e il server usato (c om e per esem pio autistic i), possiede un c ertif ic ato quot; self signedquot; .
                Soluzione: tls_c ertc hec k of f (sic urezza portam i via)[per altre inf o]
           Per usarlo c on Gm ail guardate nelle GitTips. Pubblica re il codice
           M agari siete proprio voi ad avere la nec essità di rendere pubblic o il c odi c e e di rendere disponibile quindi
           agli altri di poter c lonare il vostro repository; esistono vari m etodi per poterlo f are
                  H TTP
                  D i seguito le azioni da c om piere
                  1) Spostarsi nella direc tory padre rispetto al vostro albero dei sorgenti (c he deve essere già
                  quot; gittatoquot; );
                      il progetto presuppongo sia in una direc tory c hiam ata quot; projec tquot;
                  2) eseguire git c lone --bare pr ojec t projec t.git
                  3) c opiare la direc tory projec t.git nello spazio del web server
                  4) spostarsi nella direc tory appena c opiata
                  5) Eseguire git --bare update-serv er-inf o
                  6) Rendere esegui bile lo sc ript post-update tram ite c hmod a+x hooks/post-update nella direc tory
                  projec t.git.
           Nel c aso poi vogli ate pubblic are su questo server le nuove m odif ic he del c odic e, basta eseguire tram ite
           ssh il c om ando



                 git push ssh://mio.domino/absolute/path/to/git/projec t.git master:master




           Git by Git

              È possibile ottenere git attraverso git stesso c on il c om ando



                  git c lone git://git.kernel.org/pub/sc m/git/git.git



           Consiglio c aldam ente di installare la versione più quot; m odernaquot; , m agari tenendola parallelam ente a quella
           della vostra distro uf f ic iale: i passaggi da c om piere sono i seguenti (tutti da eseguire c om e utente
           norm ale)



                 git pull      # aggiorna il tutto
                 git tag      # per v edere l'ultima v er sione stabile (oppure gitk)
                 git c hec kout v x .x .x # pone il w orking tree a quella v ersione (no -rc please)
                 ./c onf igure --pref ix =/opt/git-v x .x .x   #   imposta   il   path   di   installazione   in   /opt/   (c r eatela
                 ev entualmente)
                 make
                 make install
                 c d /opt/
                 unlink git       # se av ete già una prec edente installazione manuale
                 ln -s git-v x .x .x git   # c rea il link simbolic o



           Aggiornate il PATH in ~/.bashrc nella seguente m aniera



                 P AT H =/opt/git/bin/:$P AT H




11 di 17                                                                                                                          16/11/2008 22:56
packz | Git                                                                                 http://packz.noblogs.org/post/2007/06/03/git




           e verif ic ate c he git --v ersion vi restituisc a il num erillo giusto... nel c aso interessi, la doc um entazione va
           c reata a parte c on make doc , installata c on make install-doc ric ordandosi di im postare il perc orso di m an
           c orrettam ente tram ite la variabile MANP AT H .




           Configura zione

            Un program m a dalle c osì vaste potenzialità e c om andi ac c essori, nec essità di poter essere c onf igurato a
           livello utente c om e m eglio si c rede: a questo sc opo sono possibili due al ternative
              1. editare a m ano il f ile .git/c onf ig
              2. usare il c om ando git c onf ig (usando assiem e l' opzione --global viene im postato per tutti i repository
                loc ali c ontenuti nel c om puter)
           Una possibilità di vasta portata è la c apac ità di c reare degli alias, c ioé dei nuovi c om andi c he eseguano
           c om andi di git e non: per im post arli basta c reare una sezione alias nel f ile di c onf igurazione (ulteriori
           inf orm azioni ).


           Clea nup& O ptimize

           D opo aver lavorato per un c erto periodo di tem po su un dato repository è possibile esegui re delle
           operazioni di quot; puli ziaquot; per tenere ordinato il nostro arc hivio e dim inuire l o spazio oc c upato su disc o dallo
           stesso. Il prim o c om ando e git repac k c he risc rive tutti gli oggetti presenti nella direc tory (.git)/objec ts/
           in una sottodirec tory (.git)/objec ts/pac k/ in un f orm ato partic olare (in pratic a in una f orm a del tif ic ata,
           per ulteriori inf o guardate Doc umentation/tec hnic al/pac k-f ormat.tx t nell' albero dei sorgenti di git). Il
           som m o c onsiglia di ef f ettuare il repac king per non avere perf orm anc e sc adenti sul lungo periodo.
           Appena c reati i f il e *.pac k c om unque restano in giro gli oggetti originali (c he a questo punto sono
           rindondanti) e servirebbe dare un bel git-prune-pac ked, tuttavia pare un c om ando di basso livello ed è
           quindi pref eribile usare i c om ndi più general purpouse per la pulizia.

           Per la pulizia del repository è c onsigliabile l' uso di git gc c he si preoc c upa di c hiam are a sua volta git
           prune, il quale è adibito ad elim inare ogni elem ento non più ac c essibile (tram ite git f sc k --unreac hable),
           oltre c he anc he gi t- prune- pac ked c om e ac c ennato sopra.

           A nche l'occhio v uole la sua pa rte

            Sic c om e è dif f ic i le seguire gli sviluppi del sof tware f ac endo solo af f idam ento ai c om m enti dei vari
           c om m it, è disponi bile il progetto gitk, attualm ente distribuito assiem e a git stesso tram ite c ui è possibile
           visualizzare l' evol uzione del progetto c he abbiam o a c uore: tram ite le parole dello stesso Torvalds
           possiam o dire



               gitk is really q uite inc red ib ly c ool, and is great for visu alizing what is going on in a git rep ository. It's
               esp ec ially useful when you are looking at what has c hanged sinc e a p artic u lar version, sinc e it grac efully
               hand les p artial trees (and this also avoid s the exp ense of looking at _all_ c hanges in a b ig p rojec t) .



           (c om m it 5569bf 9bbedd63a00780f c 5c 110e0c f ab3aa97b9 di git ;- )), m a una im m agine vale pi ù di m ille
           parole




12 di 17                                                                                                                       16/11/2008 22:56
packz | Git                                                                             http://packz.noblogs.org/post/2007/06/03/git




           questo è c om e si presenta visivam ente il progetto git a c irc a m età del suo sviluppo: i ram i di diverso
           c olore sono i vari branc h...

           Esistono tuttavia altri program m i analoghi c he tuttavia non hanno la stessa resa graf ic a: tig, qgit... se
           approf ondirò il loro utilizzo lo saprete.

           Q ua ndo la rete non è av ailable

           Suc c ede c he non si ha a disposizione un ac c esso alla rete e quindi i c om andi f etc h/pull/push non possono
           essere usati nella loro m aniera c onvenzionale, nonostante questo git è anc ora c apac e di essere
           pienam ente f unzionale attraverso il c om ando git bundle.

              L a sintassi del c om ando in questione è una delle seguenti



                 git-bundle   c reate <f ile> <git-rev -list args>
                 git-bundle   v erif y <f ile>
                 git-bundle   list-heads <f ile> [ref name...]
                 git-bundle   unbundle <f ile> [ref name...]



           L a prim a versione è quella utile per c reare il bundle: <f ile> c orrisponderà al nom e del f ile risultante e
           <git-rev -list args> è un qualunque argom ento ac c ettabile da git- rev- list (quindi oltre sha1 si possono
           usare tag e identif ic ativi tem porali c om e quot; --sinc e=10.day s.agoquot; ). Per c reare sem plic em ente un bundle
           c on tutto l' arc hivi o si usa



                 git-bundle c reate my -projec t.bundle master



           Nel f rattem po c he im paro m eglio leggetevi questo thread.

           Pa ck a ging

           In una c erta m isura è im portante poter esportare il proprio lavoro sotto f orm a di arc hivi da poter inviare
           o da sc aric are c om odam ente anc he a c hi non è un developer (developer developer) e propri o per questo
           è stato inventato il c om ando



                 git arc hiv e --f ormat=<tar|zip> [--pr ef ix =<pref ix >/] <tree-ish> [path]



            Poi per c hi è un am ante delle distri buzioni debian- based, esiste anc he un insiem e di c om andi pensati
           per interagire c on i rilasc i tram ite pac c hetti, inglobati nella suite git buildpac kage
                  git import-dsc : c rea un repository git da un pac c hetto debian pre- esistente.




13 di 17                                                                                                               16/11/2008 22:56
packz | Git                                                                             http://packz.noblogs.org/post/2007/06/03/git


                git import-orig: c rea un repository git da sorgenti.
                git buildpac kage: c om pila e c rea i l pac c hetto.
                git dc h: aggiorna il Changelog a partire dai c om m it di git.
           Esistono princ ipal m ente due m odi per iniziare ad usarlo
              1. Im portare un pac c hetto pre- esistente: f ac c iam o un esem pio c on netc at
                 $ apt-get sourc e netc at
                 $ git import-dsc
              2. Im portare un progetto non avente un pac c hetto debian:supponiam o c he i l progetto sia arc hiviato in
                 un f ile projec t-0.2.tar.gz (attenzione c he l' arc hivio deve c ontenere un pref isso altrim enti il
                 c om ando git import-orig restituirà un errore del tipo C annot c opy f iles: [Errno 20] N ot a direc tory :
                 ' ../tmpnsjU34/NOME_DI_QUAL C H E_FIL E' )
                 $ mkdir projec t-0.2
                 $ c d projec t-0.2
                 $ git init
                 $ git import-orig -u 0.2 /path/to/projec t-0.2.tar.gz
           In generale vengono usati due branc h partic olari
                debian-branc h: c ontiene il ram o di lavoro dove vengono ef f ettuati i lavori nel c odic e
                upstream-branc h: c ontiene l c odic e proveniente dalla upstream release (c om e tradurlo in italiano?)
           tuttavi nulla vieta di c am biare la topologia del reposi tory c om e m eglio vi aggrada.

           Per ulteriori inf orm azioni andate sulla hom e page: http://honk.sigxc pu.org/projec ts/git- buildpac kage
           /m anual- htm l/gbp.htm l .

           Contributi

           Esistono tutto un i nsiem e di pic c oli program m ini ac c essori a git c he si trovano sotto la direc tory
           /usr/share/doc /git- c ore/c ontrib/; f ra questi vi segnalo nel bash_c om pletion la possibilità di avere il
           prom pt c on indic ato il branc h in c ui c i si trova (nel c aso ovviam ente la direc tory c orrente c orrisponda ad
           un repo git)tram ite __git_ps1: il suo utilizzo è t ram ite



               P S1=' $(__git_ps1 quot; % s branc hquot; )'



           ovviam ente potete aggiungere sia prim a c he dopo robe utili a voi...

           Link ogra fia & Documentazione
                wikipedia
                hom e page del progetto (doc )
                L inus Torvalds's tec hnic al speac h (video)
                Pagine di m anuale (man git-<c omando> oppure git <c omando> --help)
                Everyday git
                git- buildpac kage (hom e&doc )
                M ailing list arc hive (vec c hia e nuova)
                Bart' s Blog (git tag)
                G it f or c om puter sc ientists (spiegazione tram ite graf i di c om e l avora git a basso livello)
                G it c heat sheet .
                altro c heat sheet.
                G it guide.
                G itTips.
                Repo pubblic o per avere hosting di progetti gestiti tram ite G it.
                Post c on c onsiderazioni interessanti (sopratutto sull' index).


           Footnote

           1 - In inglese viene c hiam ato distributed revision c ontrol sof tware c onf iguration m anagem ent projec t.



14 di 17                                                                                                                   16/11/2008 22:56
packz | Git                                                                                                                http://packz.noblogs.org/post/2007/06/03/git


           2 - G it in inglese è usato c om e insul to per rif erirsi ad uno stupido.
           3 - L a versione nel sistem a da m e usato è la 1.4.4.2, m entre nella doc um entazione uf f ic iale c i si rif erisc e
           alla 1.5 o suc c essive, quindi i c om andi potrebbero essere diversi; si può sc aric are la versi one unstable
           per debian a questo indirizzo.




           Tr ackback U R L
           http: / / nobl ogs. org/ trackback. php?i d=11115

           Leave a R eply

                                                                                 Name ( r equir ed)


                                                                                 Mail ( will not be published) ( r equir ed)


                                                                                 Website

           Pl ease sol ve the puzzl e ( requi red)




                 T ype the tw o w or ds:




               T h i s i s th e Re Ca p tc h a P l u g i n f o r Li f e ty p e




              Submit Comment


           One R esponse to Git




15 di 17                                                                                                                                             16/11/2008 22:56
packz | Git                                                                                 http://packz.noblogs.org/post/2007/06/03/git




                   pa ck z says:
                   07/ 13,2007, at 00: 07
              V isit packz


              Ma penso che questa situazione si a di f f i ci l e da gesti re i n quanto i l program m a è stato pensato
              apposi tam ente per i sorgenti del kernel e qui ndi f i l e di testo; i o non sono un gran esperto e sto
              scri vendo a poco a poco l e cose che i m paro ( tu m i sopravval uti . . . m a grazi e l o stesso per i
              com pl i m enti ) e nel m i o caso, quando sono presenti f i l e bi nari ( i m m agi ni per esem pi o) l i tengo i n
              di rectory separate e poi l e im porto a parte: è m eno f requente cam bi are un i m m agi ne e di sol i to se
              ne occupa una persona sol a, i o non so bene com e si a i l tuo caso. . . se ri sol vi i l tuo probl em a o hai
              qual che consi gli o sul l' uso di gi t non ti f are probl em i a postarl i che l i aggi ungo. . .




                   pa ck z says:
                   09/ 27,2007, at 17: 23
              V isit packz




16 di 17                                                                                                                      16/11/2008 22:56
packz | Git                                                                                      http://packz.noblogs.org/post/2007/06/03/git



              H o trovato questo deli zi oso li nk su del . i ci o. us su di un ti po che presenta una sol uzi one al tuo
              probl em a

              http: / / www. bluishcoder. co. nz/ 2007/ 09/ gi t- bi nary- f i l es- and- cherry- pi cki ng. htm l

              f ecendo uso di gi tattributes ( vedi http: / / www. kernel . org/ pub/ sof tware/ scm / gi t
              / docs/ gi tattributes. htm l) appena ho tem po scri vo qual cosa, m agari l a traduzi one del l a pagi na di
              m anual e. . . se qual cun' altro ha sol uzi oni si f acci a avanti .




17 di 17                                                                                                                    16/11/2008 22:56

Contenu connexe

Similaire à Git

Sistemi di Build Alternativi
Sistemi di Build AlternativiSistemi di Build Alternativi
Sistemi di Build Alternativi
Dario Bertini
 
Sistemi context-aware, esercitazione 2 (3 giugno 2009)
Sistemi context-aware, esercitazione 2 (3 giugno 2009)Sistemi context-aware, esercitazione 2 (3 giugno 2009)
Sistemi context-aware, esercitazione 2 (3 giugno 2009)
Marco Loregian
 
Data hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open sourceData hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open source
Marco Ferrigno
 

Similaire à Git (20)

GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Webminar del 12.03.2012
Webminar del 12.03.2012Webminar del 12.03.2012
Webminar del 12.03.2012
 
Introduzione a openstreetmap e casi d'uso disi 23-04-2012
Introduzione a openstreetmap e casi d'uso   disi 23-04-2012Introduzione a openstreetmap e casi d'uso   disi 23-04-2012
Introduzione a openstreetmap e casi d'uso disi 23-04-2012
 
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0
 
Rai qt presentazione-2015-06-03
Rai qt presentazione-2015-06-03Rai qt presentazione-2015-06-03
Rai qt presentazione-2015-06-03
 
Hadoop in action!
Hadoop in action!Hadoop in action!
Hadoop in action!
 
Sistemi di Build Alternativi
Sistemi di Build AlternativiSistemi di Build Alternativi
Sistemi di Build Alternativi
 
Graphs plugin 20160923-ita
Graphs plugin 20160923-itaGraphs plugin 20160923-ita
Graphs plugin 20160923-ita
 
Topog presentation
Topog presentationTopog presentation
Topog presentation
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Sistemi context-aware, esercitazione 2 (3 giugno 2009)
Sistemi context-aware, esercitazione 2 (3 giugno 2009)Sistemi context-aware, esercitazione 2 (3 giugno 2009)
Sistemi context-aware, esercitazione 2 (3 giugno 2009)
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
Data Hiding
Data HidingData Hiding
Data Hiding
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Pycon
PyconPycon
Pycon
 
Ridirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimentoRidirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimento
 
Data hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open sourceData hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open source
 
Openmoko
OpenmokoOpenmoko
Openmoko
 

Git

  • 1. packz | Git http://packz.noblogs.org/post/2007/06/03/git packz Se rvon o kTln 2 jou le s d i e n e rgia p e r trasm e tte re u n bit d i in form azion e in u n am bie n te a te m p e ratu ra T Git P u b lis h e d o n 0 6 / 0 3 ,2 0 0 7 [AT T E N Z I O N E : p a g in a in via d i c o m p le ta m e n to ] G it è un program m a distribuito per il c ontrollo di quot; revi sionequot; (m aledetti term ini inglesi[1][2]) di progetti sof tware c reato da L inus Torvalds per gestire lo sviluppo del kernel orm ai giunto ad un num ero di righe di c odic e probabilm ente insostenibile per una persona norm ale. Il progetto partì i l 3 Aprile 2005 e già nel giugno dello stesso anno il kernel inc om inc iò ad essere gestito attraverso questo f antastic o strum ento. Visto l 'odio visc erale c he il c aro nostro am ic o (?) nutre per il sistem a alternati vo c hiam ato CVS (vedere video) e altri sistem i analoghi, ha dec iso di sc riverne uno lui stesso. Qui di seguito presenterò Git nella m aniera in c ui l' ho i m parato: non- linearm ente, per attività pratic he; i c om andi non direttam ente sperim entati avranno un link ad una possibile doc um entazione spec if ic a. Ca ra tteristiche Supporto per lo sviluppo non lineare attraverso quot; branc hingquot; e quot; m ergingquot; e supporto per la visualizzazione della loro storia. Sviluppo distribuito: ognuno ha la propria c opia loc ale sulla quale può f are tutte le m odif ic he di c ui sente il bisogno per poi poterle pubblic are ed eventual m ente gli am m ini stratori del progetto potranno f are il m erge da quel repository. F ac ilità di pubblic azione rem ota attraverso un protoc ollo apposito (git:// appunto) anc he se ac c essibile anc he rispetto ai più tradizionali http, f tp, ssh etc ... Utilizzo della c rittograf ia per la gestione della storia e dei quot; c om m itquot; . I nsta lla zione Per installarlo su un sistem a debian- like ai nec essitano dei seguenti pac c hetti git- c ore git- doc (se desideri avere la doc um entazione in f ile:///usr/share/doc /git- doc /index.htm l) gitk (se si desidera visualizzare graf ic am ente gli sviluppi) git- daem on- run (se si desidera rendere disponibile tram ite protoc ollo gi t gli sviluppi) git- c om pletion (se si desidera avere il c om pletam ento dei c om andi da li nea di c om ando) git- em ail (per le f unzioni legatate al m andare patc h via em ail) git- gui (interf ac c i a spartana per le operazioni di base) 1 di 17 16/11/2008 22:56
  • 2. packz | Git http://packz.noblogs.org/post/2007/06/03/git git- buildpac kage (perm ette di im portare pac c hetti sorgenti c om e reposi tory di git) F are attenzione c he la versione nei pac c hetti dif f erisc e m olto da una distribuzione ad un' al tra c ausa l' inc essante attivi tà degli hac ker c he lavorano sopra G it (sono isc ritto al la m l e m i arrivano c irc a 50 m ail al giorno quando stanno tranquilli). Concetti G it basa il suo design sull'idea c he non c ' è uno sviluppatore m igliore degli altri: non vi è l a nec essità c he esista un repository princ ipale a c ui tutti debbano rif erirsi, m a perm ette anzi uno sviluppo distribuito, dove ognuno può, una volta c he ha sc aric ato il c odic e, apporre delle m odif ic he e ripubblic are a sua volta il c odi c e perm ettendo m odif ic he ulteriori; Al c ontrario di altri program m i di questo tipo, lui non elabora f ile, m a i c ontenuti dei f ile, L inus stesso lo desc rive c om e c ontent- addressable; c ontiene due strutture dati 1. Un indic e m utevol e c he rac c oglie le inf o sulla direc tory di lavoro c orrente e sulla versione suc c essiva c he verrà im portata. 2. D atabase di oggetti (im m utabile). In partic olare esistono varie tipologie di oggetti: Blob: semplic em ente un insiem e binario di dati c he non si rif erisc e a niente altro. A basso livello viene c reato tram ite git-update-index , m entre il c ontenuto può essere visualizzato tram ite git-c at-f ile. Tree: è un oggetto c he lega assiem e blob e/o tree; viene c reato tram ite git-w rite-tree e visualizzato attraverso git-ls-tree Com m it: introduc e il c onc etto di quot; storiaquot; : è rappresentato dal tree risultante, dal c om m it ef f ettuato/i per arrivare a quel punto e dal c om m ento a questi. Tag:identif ic a sim bolic am ente altri oggetti, tram ite l' identif ic azione ed il tipo dell' oggetto Si può ric onosc ere in questo sc hem a un graf ic o c ic lic o diretto. Ognuno di essi viene denominato attraverso un H ash SH A- 1 di 40 c if re esadec im ali c reato c on il c ontenuto proprio dell' oggetto. Questo c odic e può essere utilizzato per rif erirsi a ben determ inati punti (tem porali) del progetto. Capito c om e f unzi ona a basso livello questo astuto program m a, potete im m aginare c he la grandezza più utilizzata è il tree: sic c om e un c ommit punta ad un tree ed una tag punta ad un c ommit, entram bi possono essere usati indistam ente. In m aniera analoga una tag è sim il c ommit quindi può essere usata quando si ric hiede un c ommit. Spec if ic ando il nom e di una ref erenza, git la c erc a in una di queste direc tory .git/ (or $GIT _DIR ) .git/ref s/ (or $GIT _DIR /r ef s/) .git/ref s/heads/ (or $GIT _DIR /ref s/heads/) .git/ref s/tags/ (or $GIT _DIR /ref s/tags/) Esistono inoltre una gram m atic a ben prec isa per rif erirsi alle ref erenze: la testa del ram o c orrente di sviluppo viene indic ato c on H EAD (si trova in .git/H EAD) ed è un rif erim ento ad un elem ento in .git/ref s /heads/; è possibile usare l'operatore postf i sso ^ per indic are il genitore di una data ref erenza. Sic c om e è possibile usarlo pi ù volte esiste la regola c he l' applic azione ripetuta N volte di ^ può essere sostituita c on l' operatore postf isso ~ seguito da N: c ioé H EAD^^^ è eq uivalente a H EAD~3 Sic c om e questi rif erim enti sono ovviam ente legati al la situazione attuale del ram o di svil uppo, è 2 di 17 16/11/2008 22:56
  • 3. packz | Git http://packz.noblogs.org/post/2007/06/03/git possibile c onosc ere la ref erenza assoluta usando git rev -parse R EFER ENZA quindi nel c aso prec edente basta dare git rev -parse H EAD~3 per sapere a qual e c ommit si rif erisc e. Una desc rizione più approf ondita la si può trovare tram ite git rev -parse --help alla sezione SP EC IFY IN G R EVISION S da c ui potrete c apire f igure quali G H I J / / D E F | / | / | |/ | B C / / A A = = A^0 B = A^ = A^1 = A~1 C = A^2 = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2 Getting sta rted Oltre a voler c api re c om e sono im plem entate le f unzi onalità di git, m agari vorrete usarlo no? no problem a, per questo esiste questa parte: c erc hiam o di esplic are i c om andi f ondam entali e/o più utili, anc he se, per un approf ondim ento, rim ando alla doc um entazione uf f ic iale. Supponiam o c he abbiam o appena iniziato un nuovo progetto e c he c i troviam o nella direc tory in c ui il progetto stesso risiede, per inizializzare il repository bisogna eseguire[3] git init-db e di seguito git add . se si vuole imp ortare tutto, op p ure git add f ile_1 ... f ile_n se interessano solo c erti file Visto c he lo sc opo princ ipale di questo program m a è il trac c iare i c am bi am enti, una volta c he si è lavorato su un albero di sorgenti si possono c ontrollare i c am biam enti attraverso git status 3 di 17 16/11/2008 22:56
  • 4. packz | Git http://packz.noblogs.org/post/2007/06/03/git c he rende noto i f ile m odif ic ati m a non quot; c om m ittatiquot; , i f ile c he non vengono inseriti etc ..lo sc hem a di utilizzo è il seguente: via via c he si f anno le m odif ic he e si interessa salvarle nel prossim o c om m it, si aggiungono i f ile utili tramite git add; per ef f ettuare ef f ettivam ente il c om m it git c ommit c he indic izza tutti i c am biam enti m em orizzati nell' index (bisogna sc rivere il c om m ento ed è c onsigliabile dividerlo in uno riassuntivo ed uno più esplic ativo separati da una linea vuota). Per ric ordarc i quali sono i c am biam enti c he sono stati apportati f ra indic e, repository e working tree viene in aiuto il c om ando git dif f : norm alm ente questo c om ando restituisc e la dif f erenza f ra il working tree ed il repository senza tenere c onto delle m odif ic he già inserite nell' indic e (in pratic a f a un dif f f ra working tree e indic e per f arla breve); per avere inf o a riguardo al c odic e inserito nell' indic e rispetto a quello del repo si aggiunge l 'opzione --c ac hed al c om ando.Altra sim patic a opzione c he aiuta la visualizzazione è --c olor c he rende di c olore rosso o verde le righe rispettivam ente tolte o aggiunte. È anc he possibile c onf igurare git in m aniera tale c he i nserisc a in autom atic o i vostri dati nei c om mit: nel m io c aso nel f ile .git/c onf ig ho inserito le righe [user] name = quot; pac kzquot; email = quot; pac kz at autistic i dot or gquot; [ ovviamente tu c he non sei u n b ot fai i c amb iamenti d el c aso] È evidente c he è possibile inserire nuovi f ile in qualunque m om ento nel progetto usando sem pre git add ed è inoltre importante tenere c onto del f atto c he è possibile usare wildc ard per sc egliere f ile c he rientrano in un ben determ inato sc hem a: per esem pio git add direc tory _generic a/*.tx t inserirà nell' indic e tutti i f ile c he hanno estensione txt (la barra davanti all' asterisc o preserva quel c arattere dall'interpretazione f atta dalla shell e nel c aso di git inserisc e f ile txt anc he di sottodirec tory). Nel c aso abbiate bisogno di elim inare un f ile dall' indic e potete usare git rm c he appunto, si oc c upa dell'operazione inversa di git add (non è proprio c osì). Nel c aso nec essitate di un m essaggio standard nei c om m it, è possibile im postare nella c onf igurazione un f ile c ontenente il tem plate di questo m essaggio tram ite il suo path relativo alla working dir: [c ommit] template = .git/c ommit-template dove ovviam ente dopo tem plate potete inserire il perc orso c he volete. Coma ndi utili G it dispone di varie f unzionalità c he ric hiam ano le uti lity da riga da c om ando tipic he del m ondo *nix e 4 di 17 16/11/2008 22:56
  • 5. packz | Git http://packz.noblogs.org/post/2007/06/03/git c he perm ettono la gestione e la lettura del c odic e nel la sua evoluzione tem porale e non; uno dei c om andi è git blam e c he perm ette di vedere ad ogni linea di un dato f ile c hi lo ha m odif ic ato e quando, potendo lim itare ad un dato range di questo tram ite anc he espressioni regolari: per esem pio :) $ git bla me -L ' /^ f unc t io n ge ne ra t e _sc ript _js( /,/^ }$/' priv a t e /P hp/ro ut ine .php 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 46) f unc t io n ge ne ra t e _sc ript _js( $src ) { 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 47) $js = quot; < sc ript t y pe = quot;t e x t /ja v a sc ript quot; src = quot;$src quot; re l= quot;ja v a sc ript quot;> quot;; 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 48) $js .= quot; < /sc ript > nquot;; 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 49) re t urn $js; 96c 53bd8 ( pa c kz 2007-06-09 16:11:57 + 0200 50) } restituisc e le righe delle def inizione di una f unzione Php. Inoltre è c apac e di trac c iare linee di c odic e spostate da un f ile all'altro passandogli l'opzione - C (seguendo questo c onsiglio di Torvalds, è m eglio c opiare, f are il c om m it e poi modif i c are quelle linee). Altro c om ando è git grep c he c om e l'om onim o da shell c erc a l' oc c orrenza di una determ inata stri nga nel f ile passato c om e argom ento (ni c e l'opzione --c olor c he perm ette una lettura più c hiara). È possibile anc he c onosc ere in quali c omm it un dato f ile è stato c am biato tram ite git w hatc hanged path/to/f ile (senza il nom e del f ile restituisc e un log c on tutti i f ile m odif ic ati). F orse la vera potenzialità sta propri o in questa c aratteristic a c he perm ette di quot; m ontarequot; opportunam ente i singoli c om andi per ottenerne di nuovi: supponiam o di voler c onosc ere il num ero di linee a c ui am m onta ogni singolo f ile del progetto, usando le f unzionalità della shel l bash e i c om andi di git questo è possibile tram ite i l c om ando f or i in $(git ls-f iles); do w c -l $i; done | aw k ' //{VAR +=$1; print $0}EN D{print quot; totale: quot; VAR }' oppure è possibile c onosc ere il num ero di persone diverse c he hanno c ontribuito al c odic e presente nel repository (f onte) git log --pretty =short | sed -n 's/^Author: ([^<]*)<.*$/1/p' | sort | uniq | w c -l B ra nch& Ta g Esistono due c ose f ondam entali nell o sviluppo del sof tware: la possibilità di provare nuove soluzioni e la possibilità di im postare a determ inate c onf igurazioni del c odic e dei nom i/versioni da poter porre c ome punti f erm i nello sviluppo. Questa possibilità sono espresse da G it attraverso i branc h e le tag. Per branc h si intendono delle quot; linee c onc ettualiquot; di sviluppo in c ui suddi videre il progetto, possono essere derivate da progetti esterni (trac king branc hes) oppure provenire da c am biam enti m inim i dal ram o princ ipale (topic branc hes). Al l'inizio esiste solo il branc h c hiam ato m aster m a è sem plic issim o c rearne di nuovi e utilizzarli ac robatic amente passando da uno all' altro!!! Un sem plic e git branc h 5 di 17 16/11/2008 22:56
  • 6. packz | Git http://packz.noblogs.org/post/2007/06/03/git restituisc e l' elenc o dei branc h disponibili, m entre per c rearne uno di nom e ' hazardous' si abbisogna del m agic o c om ando git branc h hazardous a c ui sarà possibil e ac c edere attraverso git c hec kout hazardous e f are le m odif ic he senza m odif ic are il ram o m aster; riutilizzando git branc h si otterrà master * hazardous c on l' asterisc o ad indic are il branc h in c ui si stanno ef f ettuando le m odif ic he. Nel m om ento in c ui c i ritroviam o c on del c odic e in un branc h quot; experim entalquot; c he riteniam o oram ai stabile, possiam o unirlo al branc h princ ipale tram ite il m erging: git merge [quot; qui un c ommentoquot; master] hazardous oppure spostarc i nel branc h voluto e poi eseguire sem plic em ente git merge hazardous se non c i saranno problem i i due ram i saranno uniti in uno solo e quello m aster c onterrà i c am biam enti; git possiede degli algoritm i per gestire la f usione di c odic e nello stesso f ile, m a non è detto c he il tutto sia possibile, in questo c aso nel f ile (o nei f ile) interessato/i saranno presenti delle linee in stile dif f c on evidenziati i probl em i (appena sarò più pra tico v i fa rò sa pere). Se non pensate di ef f ettuare più c am biam enti da quel branc h lo potete c anc ellare tram ite git branc h -d hazardous In una sola m ossa è possibile anc he c reare e spostarsi nel nuovo branc h tram ite git c hec kout -b hazardous inoltre è anc he possibile f are il c hec kout di una versione più vec c hia usando il c om m it c om e argom ento per poi aprire un nuovo branc h da quel punto usando la regola appena insegnata. È anc he possibile c reare dei branc h quot; vuotiquot; c ioé dei ram i di sviluppo senza parents: il m etodo da usare è un po' tric k y e ve lo espongo nel segui to 6 di 17 16/11/2008 22:56
  • 7. packz | Git http://packz.noblogs.org/post/2007/06/03/git $ git-sy mbolic -ref H EAD ref s/heads/my branc h $ git rm --c ac hed -r . $ rm * # questo serv e quando si c ambierà branc h per ev itare errori $ git c ommit --allow -empty è utile per c reare del c odic e parallelo al progetto di sviluppo m a c he può non interessare i norm ali developer, per esem pio la web page del progetto etc ... Si può utilizzare il c hec kout per invertire i c am bi loc al i al proprio arc hivio loc ale tram ite git c hec kout -f c he in pratic a riporta all'attuale ram o il c ontenuto dell a direc tory. Per quanto riguarda i tag invec e è ugualmente sem plic e la loro gestione: git tag -l <pattern> visualizza i tag c on un nom e c he rispec c hia il pattern passato, m entre git tag <label> im posta <label> c om e tag della at tuale versione. R eba sing È anc he possibile c he vi troviate in questa situazione A---B---C topic / D---E---F---G master e vogliate aggiornare il branch topic con master in modo da ottenere la situazione A'--B'--C' topic / D---E---F---G master senza dover f are un branc h tem poraneo e spostare le patc h per ric reare la situazione: vi viene in aiuto git rebase! basta in questo c aso dare git rebase master topic 7 di 17 16/11/2008 22:56
  • 8. packz | Git http://packz.noblogs.org/post/2007/06/03/git c he passa al branc h topic ed ef f ettua appunto il rebasing; nel c aso f oste già in topic so potrebbe togliere l' ultim o argom ento.Questo c om ando è m olto potente i n quanto perm ette di m odif ic are i si ngoli c om m it f ondendoli o dividendoli all'oc c orrenza per sopperire a qualsiasi nec essità. Nel c aso c i siano dei problem i è possibile annullare l'operazione tram ite git rebase --abort Esiste anc he una versione interattiva di questo c om ando nelle ultim issim e versioni a c ui si ac c ede (sorpresa) c on git rebase --interac tiv e Erra re huma num est Può c apitare di sbagliare ed inf atti ec c o qualc he c om ando utile per invertire l' errore git c hec kout FIL E - git reset - dim entic a nuovi f ile aggiunti git reset --hard - tralasc ia i c am biam enti git reset --sof t H EAD^ - c anc ella l'ultim o c om m it m a lasc ia i c am biam enti git c hec kout -m br anc h_c orretto nel c aso si sia ini ziato a f are c am bi am enti nel branc h errato B iseca re i bug Suc c ede appunto di sbagliare durante la produzione del c odic e, m a m agari c e ne ac c orgiam o (m olto) in seguito,m agari qualc un'altro c he il risultato del nostro lavoro lo usa in m aniera dif f erente e nel f rattem po sono stati pushati svariati c om m it nel repository e non possiam o sapere direttam ente quale c om m it in partic olare ha introdotto un bac o: a questo viene aiuto il c om ando git bisec t c he si preoc c upa di c reare un branc h tem poraneo e di ef f ettuare una operazione di dic otom ia sulle parti del c odic e Io personalm ente non l'ho provato anc ora, m a potete trovare dalle parole del som m o il suo utilizzo. I mporta re un re pository remoto È im portante anc he poter im portare da una loc azione rem ota un progetto c he c i interessa, in m aniera da apportare le m odi f ic he da eventualm ente rispedire al m ittente (w l' open sourc e); per m ettere in pratic a questo il c om ando è git c lone <uri> c he c rea nella direc tory c orrente il c ontenuto del repository e due branc h: m aster e origin, di c ui il prim o, per c onvenzione, è preposto alle m odif ic he. Per aggiornare il c ontenuto loc ale rispetto a quello rem oto è usato il c om ando git pull (l' indirizzo da c ui proviene è nel f ile .git/remotes/origin). D i def ault viene sc aric ato solo il ram o m aster di un repository, per ottenere tutti i ram i presenti eseguire git branc h -r 8 di 17 16/11/2008 22:56
  • 9. packz | Git http://packz.noblogs.org/post/2007/06/03/git c he restituirà qualc osa c om e origin/H EAD origin/label_plac ing origin/master origin/menu_on_c lient origin/pdf _prof ile origin/x f orm origin/x slt a questo punto c on un bel git c hec kout --trac k -b loc al_branc h_name origin/remote_branc h c reerà un branc h l oc ale c hiam ato loc al_branc h_name a partire dalla ref erenza origin/remote_branc h e lo sinc ronizzerà c on quello rem oto. Pa tching Una ulteriore c hic c a di questo program m a è la possibi lità di generare delle patc h da spedi re per posta tram ite il c om ando (c on l'opzione -n e più patc h spec i f ic ate vi ritroverete c on l' intestazione della m ail nella f orm a quot; [PATCH 2/5]quot; ) git f ormat-patc h <sinc e>..[<until>] A m eno c he non spec if ic hiate - - stdout vi ritroverete tutti i dif f dei vari c om m it per arrivare da <sinc e> ad <until> (se quest'ultim o non è spec if ic ato, pone di def ault il ram o attuale); si può indic are per questi sia il loro c odic e hash c he il nom e del branc h c he una tag. Ovviam ente c om e si possono spedire le patc h, si possono anc he quot; leggerequot; ed è qui c he la potenzialità svetta: git am <mail box > apre la m ail, sc ari c a le patc h e le applic a. Per <m ail box> si intende il perc orso alla c artella loc ale della m ail (nella doc um entazione parlano di quot; Berkeley m ail quot; c he dovrebbe c orrispondere alla posta letta attraverso il pac c hetto mailx in un sistem a D ebian); nel m io c aso è /v ar/log/pac kz se qualc uno ne sa di più batta una m ail ;- ) Consiglio di usare l'opzione --interac tiv e c osì da poter sc egliere le patc h da applic are (una alla volta!) altrim enti vi dà errore (se non c i sono solo patc h!!!), al m assim o sc arivatele a parte e poi applic atelo. Com unque a m eno c he non siate dei guru installatevi pine (su ubuntu c ' è alpine) altrim enti diventate rinc oglioniti ad usare mail. Nel c aso non vogli ate sc lerare è possibile applic are la patc h m anualm ente tram ite il c om ando git-apply mbox <f ile della patc h> 9 di 17 16/11/2008 22:56
  • 10. packz | Git http://packz.noblogs.org/post/2007/06/03/git e vi ritroverete il c om m it già inserito nel tree c on il c om m ento prec eduto da quot; [P AT C H ]quot; per la gioia di grandi e pic c ini. Nel c aso non vi f i diate del vostro c l ient di posta è possibile utilizzare git send-mail per avere c on sic urezza l' invio della patc h: quindi git send-mail --to pac kz@porc o.lo.spam.org --subjec t quot; v attela a prendere nel c uloquot; f iles Probabilm ente non avete un servet SM TP quindi vi c onviene installarvene uno af f inc hé il tutto f unzioni per il m eglio: dall a doc um entazione di git si c onsiglia msmtp, un sem plic e program m a c he perm ette di inviare patc h anc he attraverso c onnessioni c he utilizzano SSL (tipo gm ail oppure autistic i ;- )): per installarlo # apt-get install msmtp poi c reare il f ile ~/.msmtprc c on per c hi usa un ac c ount su autistic i # Ex ample f or a user c onf iguration f ile # Set def ault v alues f or all f ollow ing ac c ounts. def aults tls on tls_starttls of f #tls_trust_f ile /etc /ssl/c erts/c a-c ertif ic ates.c rt tls_c ertc hec k of f logf ile ~/.msmtp.log # My email serv ic e ac c ount pac kz host smtp.autistic i.org port 465 f rom pac kz@un.mondo.senza.spam.org auth on user pac kz@un.mondo.senza.spam.or g # if not set below , msmtp ask f or a passw ord passw ord # Set a def ault ac c ount ac c ount def ault : pac kz e poi inviare la m ail tram ite git send-email --smtp-serv er /usr/bin/msmtp f ile_c ontenente_la_patc h a quel punto vi verranno c hieste interattivam ente gli estrem i della m ail e le m anderà in autom atic o. Troubleshooting A me personalmente non ha funzionato subito: ecco i possibili scenari msmtp: /home/pac kz/.msmtprc : must hav e no more than user read/w rite permissions Soluzione: c hmod 0600 ~/.msmtprc msmtp: the serv er sent an empty reply 10 di 17 16/11/2008 22:56
  • 11. packz | Git http://packz.noblogs.org/post/2007/06/03/git Soluzione: tls_starttls of f (f orse non la m igliore...) msmtp: T L S c ertif ic ate v erif ic ation f ailed: the c ertif ic ate hasn' t got a know n issuer Suc c ede sic c om e il server usato (c om e per esem pio autistic i), possiede un c ertif ic ato quot; self signedquot; . Soluzione: tls_c ertc hec k of f (sic urezza portam i via)[per altre inf o] Per usarlo c on Gm ail guardate nelle GitTips. Pubblica re il codice M agari siete proprio voi ad avere la nec essità di rendere pubblic o il c odi c e e di rendere disponibile quindi agli altri di poter c lonare il vostro repository; esistono vari m etodi per poterlo f are H TTP D i seguito le azioni da c om piere 1) Spostarsi nella direc tory padre rispetto al vostro albero dei sorgenti (c he deve essere già quot; gittatoquot; ); il progetto presuppongo sia in una direc tory c hiam ata quot; projec tquot; 2) eseguire git c lone --bare pr ojec t projec t.git 3) c opiare la direc tory projec t.git nello spazio del web server 4) spostarsi nella direc tory appena c opiata 5) Eseguire git --bare update-serv er-inf o 6) Rendere esegui bile lo sc ript post-update tram ite c hmod a+x hooks/post-update nella direc tory projec t.git. Nel c aso poi vogli ate pubblic are su questo server le nuove m odif ic he del c odic e, basta eseguire tram ite ssh il c om ando git push ssh://mio.domino/absolute/path/to/git/projec t.git master:master Git by Git È possibile ottenere git attraverso git stesso c on il c om ando git c lone git://git.kernel.org/pub/sc m/git/git.git Consiglio c aldam ente di installare la versione più quot; m odernaquot; , m agari tenendola parallelam ente a quella della vostra distro uf f ic iale: i passaggi da c om piere sono i seguenti (tutti da eseguire c om e utente norm ale) git pull # aggiorna il tutto git tag # per v edere l'ultima v er sione stabile (oppure gitk) git c hec kout v x .x .x # pone il w orking tree a quella v ersione (no -rc please) ./c onf igure --pref ix =/opt/git-v x .x .x # imposta il path di installazione in /opt/ (c r eatela ev entualmente) make make install c d /opt/ unlink git # se av ete già una prec edente installazione manuale ln -s git-v x .x .x git # c rea il link simbolic o Aggiornate il PATH in ~/.bashrc nella seguente m aniera P AT H =/opt/git/bin/:$P AT H 11 di 17 16/11/2008 22:56
  • 12. packz | Git http://packz.noblogs.org/post/2007/06/03/git e verif ic ate c he git --v ersion vi restituisc a il num erillo giusto... nel c aso interessi, la doc um entazione va c reata a parte c on make doc , installata c on make install-doc ric ordandosi di im postare il perc orso di m an c orrettam ente tram ite la variabile MANP AT H . Configura zione Un program m a dalle c osì vaste potenzialità e c om andi ac c essori, nec essità di poter essere c onf igurato a livello utente c om e m eglio si c rede: a questo sc opo sono possibili due al ternative 1. editare a m ano il f ile .git/c onf ig 2. usare il c om ando git c onf ig (usando assiem e l' opzione --global viene im postato per tutti i repository loc ali c ontenuti nel c om puter) Una possibilità di vasta portata è la c apac ità di c reare degli alias, c ioé dei nuovi c om andi c he eseguano c om andi di git e non: per im post arli basta c reare una sezione alias nel f ile di c onf igurazione (ulteriori inf orm azioni ). Clea nup& O ptimize D opo aver lavorato per un c erto periodo di tem po su un dato repository è possibile esegui re delle operazioni di quot; puli ziaquot; per tenere ordinato il nostro arc hivio e dim inuire l o spazio oc c upato su disc o dallo stesso. Il prim o c om ando e git repac k c he risc rive tutti gli oggetti presenti nella direc tory (.git)/objec ts/ in una sottodirec tory (.git)/objec ts/pac k/ in un f orm ato partic olare (in pratic a in una f orm a del tif ic ata, per ulteriori inf o guardate Doc umentation/tec hnic al/pac k-f ormat.tx t nell' albero dei sorgenti di git). Il som m o c onsiglia di ef f ettuare il repac king per non avere perf orm anc e sc adenti sul lungo periodo. Appena c reati i f il e *.pac k c om unque restano in giro gli oggetti originali (c he a questo punto sono rindondanti) e servirebbe dare un bel git-prune-pac ked, tuttavia pare un c om ando di basso livello ed è quindi pref eribile usare i c om ndi più general purpouse per la pulizia. Per la pulizia del repository è c onsigliabile l' uso di git gc c he si preoc c upa di c hiam are a sua volta git prune, il quale è adibito ad elim inare ogni elem ento non più ac c essibile (tram ite git f sc k --unreac hable), oltre c he anc he gi t- prune- pac ked c om e ac c ennato sopra. A nche l'occhio v uole la sua pa rte Sic c om e è dif f ic i le seguire gli sviluppi del sof tware f ac endo solo af f idam ento ai c om m enti dei vari c om m it, è disponi bile il progetto gitk, attualm ente distribuito assiem e a git stesso tram ite c ui è possibile visualizzare l' evol uzione del progetto c he abbiam o a c uore: tram ite le parole dello stesso Torvalds possiam o dire gitk is really q uite inc red ib ly c ool, and is great for visu alizing what is going on in a git rep ository. It's esp ec ially useful when you are looking at what has c hanged sinc e a p artic u lar version, sinc e it grac efully hand les p artial trees (and this also avoid s the exp ense of looking at _all_ c hanges in a b ig p rojec t) . (c om m it 5569bf 9bbedd63a00780f c 5c 110e0c f ab3aa97b9 di git ;- )), m a una im m agine vale pi ù di m ille parole 12 di 17 16/11/2008 22:56
  • 13. packz | Git http://packz.noblogs.org/post/2007/06/03/git questo è c om e si presenta visivam ente il progetto git a c irc a m età del suo sviluppo: i ram i di diverso c olore sono i vari branc h... Esistono tuttavia altri program m i analoghi c he tuttavia non hanno la stessa resa graf ic a: tig, qgit... se approf ondirò il loro utilizzo lo saprete. Q ua ndo la rete non è av ailable Suc c ede c he non si ha a disposizione un ac c esso alla rete e quindi i c om andi f etc h/pull/push non possono essere usati nella loro m aniera c onvenzionale, nonostante questo git è anc ora c apac e di essere pienam ente f unzionale attraverso il c om ando git bundle. L a sintassi del c om ando in questione è una delle seguenti git-bundle c reate <f ile> <git-rev -list args> git-bundle v erif y <f ile> git-bundle list-heads <f ile> [ref name...] git-bundle unbundle <f ile> [ref name...] L a prim a versione è quella utile per c reare il bundle: <f ile> c orrisponderà al nom e del f ile risultante e <git-rev -list args> è un qualunque argom ento ac c ettabile da git- rev- list (quindi oltre sha1 si possono usare tag e identif ic ativi tem porali c om e quot; --sinc e=10.day s.agoquot; ). Per c reare sem plic em ente un bundle c on tutto l' arc hivi o si usa git-bundle c reate my -projec t.bundle master Nel f rattem po c he im paro m eglio leggetevi questo thread. Pa ck a ging In una c erta m isura è im portante poter esportare il proprio lavoro sotto f orm a di arc hivi da poter inviare o da sc aric are c om odam ente anc he a c hi non è un developer (developer developer) e propri o per questo è stato inventato il c om ando git arc hiv e --f ormat=<tar|zip> [--pr ef ix =<pref ix >/] <tree-ish> [path] Poi per c hi è un am ante delle distri buzioni debian- based, esiste anc he un insiem e di c om andi pensati per interagire c on i rilasc i tram ite pac c hetti, inglobati nella suite git buildpac kage git import-dsc : c rea un repository git da un pac c hetto debian pre- esistente. 13 di 17 16/11/2008 22:56
  • 14. packz | Git http://packz.noblogs.org/post/2007/06/03/git git import-orig: c rea un repository git da sorgenti. git buildpac kage: c om pila e c rea i l pac c hetto. git dc h: aggiorna il Changelog a partire dai c om m it di git. Esistono princ ipal m ente due m odi per iniziare ad usarlo 1. Im portare un pac c hetto pre- esistente: f ac c iam o un esem pio c on netc at $ apt-get sourc e netc at $ git import-dsc 2. Im portare un progetto non avente un pac c hetto debian:supponiam o c he i l progetto sia arc hiviato in un f ile projec t-0.2.tar.gz (attenzione c he l' arc hivio deve c ontenere un pref isso altrim enti il c om ando git import-orig restituirà un errore del tipo C annot c opy f iles: [Errno 20] N ot a direc tory : ' ../tmpnsjU34/NOME_DI_QUAL C H E_FIL E' ) $ mkdir projec t-0.2 $ c d projec t-0.2 $ git init $ git import-orig -u 0.2 /path/to/projec t-0.2.tar.gz In generale vengono usati due branc h partic olari debian-branc h: c ontiene il ram o di lavoro dove vengono ef f ettuati i lavori nel c odic e upstream-branc h: c ontiene l c odic e proveniente dalla upstream release (c om e tradurlo in italiano?) tuttavi nulla vieta di c am biare la topologia del reposi tory c om e m eglio vi aggrada. Per ulteriori inf orm azioni andate sulla hom e page: http://honk.sigxc pu.org/projec ts/git- buildpac kage /m anual- htm l/gbp.htm l . Contributi Esistono tutto un i nsiem e di pic c oli program m ini ac c essori a git c he si trovano sotto la direc tory /usr/share/doc /git- c ore/c ontrib/; f ra questi vi segnalo nel bash_c om pletion la possibilità di avere il prom pt c on indic ato il branc h in c ui c i si trova (nel c aso ovviam ente la direc tory c orrente c orrisponda ad un repo git)tram ite __git_ps1: il suo utilizzo è t ram ite P S1=' $(__git_ps1 quot; % s branc hquot; )' ovviam ente potete aggiungere sia prim a c he dopo robe utili a voi... Link ogra fia & Documentazione wikipedia hom e page del progetto (doc ) L inus Torvalds's tec hnic al speac h (video) Pagine di m anuale (man git-<c omando> oppure git <c omando> --help) Everyday git git- buildpac kage (hom e&doc ) M ailing list arc hive (vec c hia e nuova) Bart' s Blog (git tag) G it f or c om puter sc ientists (spiegazione tram ite graf i di c om e l avora git a basso livello) G it c heat sheet . altro c heat sheet. G it guide. G itTips. Repo pubblic o per avere hosting di progetti gestiti tram ite G it. Post c on c onsiderazioni interessanti (sopratutto sull' index). Footnote 1 - In inglese viene c hiam ato distributed revision c ontrol sof tware c onf iguration m anagem ent projec t. 14 di 17 16/11/2008 22:56
  • 15. packz | Git http://packz.noblogs.org/post/2007/06/03/git 2 - G it in inglese è usato c om e insul to per rif erirsi ad uno stupido. 3 - L a versione nel sistem a da m e usato è la 1.4.4.2, m entre nella doc um entazione uf f ic iale c i si rif erisc e alla 1.5 o suc c essive, quindi i c om andi potrebbero essere diversi; si può sc aric are la versi one unstable per debian a questo indirizzo. Tr ackback U R L http: / / nobl ogs. org/ trackback. php?i d=11115 Leave a R eply Name ( r equir ed) Mail ( will not be published) ( r equir ed) Website Pl ease sol ve the puzzl e ( requi red) T ype the tw o w or ds: T h i s i s th e Re Ca p tc h a P l u g i n f o r Li f e ty p e Submit Comment One R esponse to Git 15 di 17 16/11/2008 22:56
  • 16. packz | Git http://packz.noblogs.org/post/2007/06/03/git pa ck z says: 07/ 13,2007, at 00: 07 V isit packz Ma penso che questa situazione si a di f f i ci l e da gesti re i n quanto i l program m a è stato pensato apposi tam ente per i sorgenti del kernel e qui ndi f i l e di testo; i o non sono un gran esperto e sto scri vendo a poco a poco l e cose che i m paro ( tu m i sopravval uti . . . m a grazi e l o stesso per i com pl i m enti ) e nel m i o caso, quando sono presenti f i l e bi nari ( i m m agi ni per esem pi o) l i tengo i n di rectory separate e poi l e im porto a parte: è m eno f requente cam bi are un i m m agi ne e di sol i to se ne occupa una persona sol a, i o non so bene com e si a i l tuo caso. . . se ri sol vi i l tuo probl em a o hai qual che consi gli o sul l' uso di gi t non ti f are probl em i a postarl i che l i aggi ungo. . . pa ck z says: 09/ 27,2007, at 17: 23 V isit packz 16 di 17 16/11/2008 22:56
  • 17. packz | Git http://packz.noblogs.org/post/2007/06/03/git H o trovato questo deli zi oso li nk su del . i ci o. us su di un ti po che presenta una sol uzi one al tuo probl em a http: / / www. bluishcoder. co. nz/ 2007/ 09/ gi t- bi nary- f i l es- and- cherry- pi cki ng. htm l f ecendo uso di gi tattributes ( vedi http: / / www. kernel . org/ pub/ sof tware/ scm / gi t / docs/ gi tattributes. htm l) appena ho tem po scri vo qual cosa, m agari l a traduzi one del l a pagi na di m anual e. . . se qual cun' altro ha sol uzi oni si f acci a avanti . 17 di 17 16/11/2008 22:56