• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Git
 

Git

on

  • 951 views

 

Statistics

Views

Total Views
951
Views on SlideShare
951
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Git Git Document Transcript

    • 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