SlideShare ist ein Scribd-Unternehmen logo
1 von 80
Downloaden Sie, um offline zu lesen
G(et)it nå!



Marcus Ramberg
Nordaaker Ltd
@marcusramberg (Twitter)
I denne presentasjonen
●   Hvorfor versjonskontroll?
●   Et historisk perspektiv
●   Viktige konsepter
●   Git i daglig bruk
●   Snedige 3. parts-tillegg
Hvorfor versjonskontroll?
●   Forutsetting for samarbeid
●   Men også alene
●   Undo for kodebasen din
    –   cp Codebase Codebase.goodCopy
    –   cp Codebase Codebase.reallyGoodCopy
●   Forutsetning for kontroll
●   Utvikle fere funksjoner parallelt (Grener)
Et historisk perspektiv
●   ~1960 CDC Update IBM IEB_Update, første
    SCM verktøyene (Kort-baserte)
●   1972 Bell Labs fnner opp diff algoritmen
●   RCS (Sent på 1970-tallet
    –   Revision Control System
    –   Låser alle fler
    –   Skalerer dårlig med fere utviklere.
    –   Fortsatt nyttig for å jobbe med binærobjekter
Et historisk perspektiv
●   Patch 1985
●   CVS (1986)
    –   Concurrent Versison System
    –   Lar fere redigere samme fl
    –   Defakto verktøy i UNIX miljøet 1990-tallet
Et historisk perspektiv
●   SVN
●   Annonsert in 2000 som en erstatning for
    CVS
    –   Atomiske commit
    –   Lagrer fytting og kopiering av fler. Sporer hele
        endringer samlet, heller enn enkelt-fler.
    –   Støtter Webdav-basert protokoll
    –   SVK er et påbygg som gir distribuert støtte for
        SVN
Et historisk perspektiv
●   Tidlig på 2000 tallet, første distribuerte
    systemer som GNU arch og BitKeeper
●   2005 – Linus thorvalds starter Git
    prosjektet etter kontrovers rundt
    Bitkeeper-lisensiering.
●   Ps: det fnnes fere systemer som
    Perforce, Rational og Microsoft Source
    Safe som ikke ble nevnt i denne
    historikken.
Git er:
●   Distribuert
●   Kjapt og skalerbart til store kodebaser
●   Open Source     (GPL V2)
●   Basert på å lagre snapshots, ikke diffs
●   Tilgjengelig i de feste unix distribusjoner.
●   Tilgjengelig som installasjonspakker for
    Windows og OSX.
Git er ikke:
●   SVN
       –   Git er ikke det neste logiske steget på stigen
            fra RCS -> CVS -> SVN
●   Kjempe-enkelt
       –   «With great power comes great reponsibility»
       –   Git kan være litt frusterende i starten.
Viktige konsepter
●   Sentralisert vs Desentralisert
●   .git - flstruktur
●   Objektdatabase
●   «Plumbing» og «Porclain»
Sentralisert versjonkontroll

   Arbeidskopi   Alice              Bob    Arbeidskopi




                           Tjener




   Arbeidskopi   Charlie            Dixe    Arbeidskopi
Desentralisert versjonkontroll

                Arbeidskopi
                  Tjener      Alice              Bob    Tjener


Charlie's
Laptop

                                        Tjener
            Tjener




                     Tjener   Charlie            Dixe    Tjener
Offine
●   Diff              ●   Merge branch
●   Copy              ●   Blame
●   Add               ●   Tag
●   Commit            ●   Alt untatt push/pull
●   Checkout branch
.git
●   En katalog i roten av hvert prosjekt:
|-- HEAD          # peker til aktiv gren
|-- config        # instillinger for dette prosjektet
|-- description   # beskrivelse av prosjektet
|-- hooks/        # automatiske handlinger
|-- index         # index file ( Hva er planlagt til neste
                    commit)?
|-- logs/         # Historikk over grenene dine
|-- objects/      # Objektene til prosjektet (commiter,
                    trær, blober, tagger)
`-- refs/         # Pekere til grenene dine
Informasjon lagres i
objektdatabase
id(object) = SHA1(innholdet i flen)



    335e   a23f   6679


                                601a   5592

           3347   efa4                 34fe   cca6

                  dd85   57bc
                                cc39   3e93
                                       2211   5390
           8e9b   1798

                  332e   23a7
                                1432   1260

           f943   eab4                 93a4   cc5e
                                              b3ca
Innhold lagres i blob objekter


                                                     #include <stdio.h>
    335e   a23f   6679                               int main ()
                                                     {
                                601a   5592            printf(”Hello World”);
                                                       return 0;
                                       34fe   cca6   }
           3347   efa4

                  dd85   57bc
                                cc39   3e93
                                       2211   5390
           8e9b   1798

                  332e   23a7
                                1432   1260

           f943   eab4                 93a4   cc5e
                                              b3ca
Struktur lagres i tree-objekter


                                                     040000 tree fec552 src
                                                     100644 blob cdea5 hw.c
    335e   a23f   6679                               100644 blob b45d5
                                                     INFO
                                601a   5592

           3347   efa4                 34fe   cca6

                  dd85   57bc
                                cc39   3e93
                                       2211   5390
           8e9b   1798

                  332e   23a7
                                1432   1260

           f943   eab4                 93a4   cc5e
                                              b3ca
Historikk lagres i commit-
objekter

                                                     tree eec64...
                                                     parent c9781...
    335e   a23f   6679                               author Tom <tom@...>
                                                       1204666883 +0100
                                601a   5592          committer Max
                                                       <max@...>
                                       34fe   cca6     1204666883 +0100
           3347   efa4

                  dd85   57bc                        Fixed a major bug in
                                cc39   3e93          Hello World.
                                       2211   5390
           8e9b   1798

                  332e   23a7
                                1432   1260

           f943   eab4                 93a4   cc5e
                                              b3ca
Referanser lagres i tag-objekter


                                                     object 92e86...
                                                     type commit
                                                     tag v1.0.7
    335e   a23f   6679                               tagger Jack <jack@...
                                                     >
                                                       1136523576 -0800

                                601a   5592          GIT 1.0.7
                                                     -----BEGIN PGP
                                                     SIGNATURE-----
           3347   efa4                 34fe   cca6   Version: GnuPG v1.4.2
                                                     (GNU/Linux)

                  dd85   57bc                        iD8D…
                                                     -----END PGP
                                cc39   3e93          SIGNATURE-----

                                       2211   5390
           8e9b   1798

                  332e   23a7
                                1432   1260

           f943   eab4                 93a4   cc5e
                                              b3ca
Peker på et
                              grener




                                           feature-X
                    master
                                                       commit
                                                       objekt




             335e     a23f   6679


tags                                          601a     5592

                                                       34fe   cca6
     v1.0             3347   efa4

                             dd85   57bc
   alpha-3                                    cc39     3e93
                                                       2211   5390
as aliases            8e9b   1798
of objects                   332e   23a7
(usually                                      1432     1260
commits)                                               93a4   cc5e
                      f943   eab4
                                                              b3ca
En viktig konsekvens:




Git er kjapt!
Git-kommandoer - UNIX-flosof
Porselenet
I daglig bruk
$ cd ~/Source/latest-project
$ git init
$ git add .
$ git commit -m'First post'
●   Lav kostnad for å komme igang
Hent info om repo
$ git status
$ git log
$ git show e6bf359ac52200efe9e46a1
$ git diff HEAD^
$ git grep foo
$ git blame lib/buildbreaker.c
Kan legge til noder etter
behov.
F.eks kan bob ha forket mitt repository og
gjort noen endringer jeg ønsker å hente


$ git add remote bob git://bob/o.git
$ git pull bob
Split & Hersk
$ git clone git://git.no/foo.git foo
$ vi foo.pl
$ git rebase
$ vi bar.pl
$ git add foo.pl bar.pl
$ git format-patch origin/master
Evt. La maintainer pulle direkte fra din fork.
Grener
$ git checkout -b new_branch
$ git branch # vis gren
$ git push origin new_branch
$ git checkout –track -b
new_remote_branch
$ git tag v1.0
Pro Tip: retrack your branch
#   Make sure pushed remote branch is
setup
retrack = quot;!retrack() { git
config quot;branch.$1.remotequot; $(dirname
quot;$2quot;); git config quot;branch.
$1.mergequot; quot;refs/heads/$
(basename quot;$2quot;)quot;; }; retrackquot;

$ git retrack foo origin/foo
Snedige 3-partstilegg
●   Github
●   Git-svn
●   Easy git
●   Gitorious
●   gitk/gitx
Github – Open Source hosting
Spore Forks
Github – Sosialt nisje-nettverk
Easy git
●   Enkelt påbygg til git
●   Kun sukker, fullt kompatibel med git
●   Bedre dokumentasjon med eksempler
●   Får git til å ligne mer på svn
●   Finnes en rekke lignende tillegg


●   http://www.gnome.org/~newren/eg/
git-svn
●   Bruk git som klient for svn repositories
$ git-svn clone http://svn.url/
$ git-add Changes
$ git-commit -m'Phear it'
$ git-svn rebase
$ git-svn dcommit
Gitosis
●   Sett opp din egen git server
●   Gir tilgang over SSH uten å trenge egne
    brukerkontoer
●   Styr tilgangskontroll
●   http://eagain.net/gitweb/?p=gitosis.git
●   Kombiner med GitWeb for din egen mini-
    github.
gitk/gitx
Bonus: git prompt
●   Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i
    promptet?
function parse_git_dirty {

  [[ $(git status 2> /dev/null | tail -n1) != quot;nothing to commit
(working directory clean)quot; ]] && echo quot;*quot; }

function parse_git_branch {

  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e quot;s/* 
(.*)/[1$(parse_git_dirty)]/quot; }

export PS1='u@h [033[1;33m]w[033[0m]$(parse_git_branch)$
'

presto:

marcus@Command-Central ~/Source/mojomojo[master*]$
Spørsmål?
●   marcus@nordaaker.com
●   Nordaaker leverer blant annet konsulent-
    tjenester ifb. med git.
    http://nordaaker.com/services.no.html
●   Noen skisser ble hentet fra
    http://inso.cc/wp/2008/04/10/get-the-git-sl
●   Alt slide-materialet er lisensiert under
    Attribution-Share Alike 2.5 Lisensen
G(et)it nå!



     Marcus Ramberg
     Nordaaker Ltd
     @marcusramberg (Twitter)




                                               1




Hvem er jeg?
Erfaring med versjonkontroll
 - Jobb
   - Brukt diverse verktøy siden 1996. Tidlig, RCS &
  CVS.
   - Innført SVN i flere bedrifter
   - Evaluerte VCS for SO - Perforce
 - Open Source
   - Bruker av diverse tjenester fra Sourceforge til
  Google Code.
   - Satte opp opprinnelig SVN repo for Catalyst
   - Nylig migrert MojoMojo fra SVN til Git
Mitt selskap git alle prosjekter
Også dokument-storage
Deployer iusethis.com direkte til produksjon via
  GitHub. Har også rails applikasjoner som deployer
  med capistrano og Git.
I denne presentasjonen
●   Hvorfor versjonskontroll?
●   Et historisk perspektiv
●   Viktige konsepter
●   Git i daglig bruk
●   Snedige 3. parts-tillegg




                                2
Hvorfor versjonskontroll?
      ●   Forutsetting for samarbeid
      ●   Men også alene
      ●   Undo for kodebasen din
          –   cp Codebase Codebase.goodCopy
          –   cp Codebase Codebase.reallyGoodCopy
      ●   Forutsetning for kontroll
      ●   Utvikle fere funksjoner parallelt (Grener)

                                                       3




Versionskontroll utenfor utvikling:
      Wiki
      Undo tracking i Word
Et historisk perspektiv
      ●   ~1960 CDC Update IBM IEB_Update, første
          SCM verktøyene (Kort-baserte)
      ●   1972 Bell Labs fnner opp diff algoritmen
      ●   RCS (Sent på 1970-tallet
          –   Revision Control System
          –   Låser alle fler
          –   Skalerer dårlig med fere utviklere.
          –   Fortsatt nyttig for å jobbe med binærobjekter
                                                              4




Diff fortsatt viktig i dag – unified diff som ble utviklet i
  1990 er dominerende stil for patchutveksling
RCS er nyttig f.eks i DNS-systemer hvor du ønsker å
  låse en zonefil fra å bli redigert av flere samtidig.
Et historisk perspektiv
      ●   Patch 1985
      ●   CVS (1986)
          –   Concurrent Versison System
          –   Lar fere redigere samme fl
          –   Defakto verktøy i UNIX miljøet 1990-tallet




                                                           5




Patch utviklet av Larry wall , forfatteren av Perl, og en
 deltaker på denne konferansen


CVS har versjonsnummer per fil. Sentralisert
 låsemekanisme. Ingen sporing av
 kopiering/renaming

. Metadata i hver katalog
Et historisk perspektiv
     ●   SVN
     ●   Annonsert in 2000 som en erstatning for
         CVS
         –   Atomiske commit
         –   Lagrer fytting og kopiering av fler. Sporer hele
             endringer samlet, heller enn enkelt-fler.
         –   Støtter Webdav-basert protokoll
         –   SVK er et påbygg som gir distribuert støtte for
             SVN
                                                                6




Brandet som CVS done right.
Samme sentraliserte modell, men sporer endringer i
  trær heller enn filer
Et historisk perspektiv
       ●   Tidlig på 2000 tallet, første distribuerte
           systemer som GNU arch og BitKeeper
       ●   2005 – Linus thorvalds starter Git
           prosjektet etter kontrovers rundt
           Bitkeeper-lisensiering.
       ●   Ps: det fnnes fere systemer som
           Perforce, Rational og Microsoft Source
           Safe som ikke ble nevnt i denne
           historikken.
                                                        7




●   Merk at det også finnes andre distribuerte VCS som
     bazaar og hg.
Git er:
     ●   Distribuert
     ●   Kjapt og skalerbart til store kodebaser
     ●   Open Source     (GPL V2)
     ●   Basert på å lagre snapshots, ikke diffs
     ●   Tilgjengelig i de feste unix distribusjoner.
     ●   Tilgjengelig som installasjonspakker for
         Windows og OSX.
                                                        8




Eksempel på store kodebaser som bruker git: Linux,
 Perl, Gnome, X11 & Wine
Windows-støtte var lenge et problem, og fungerte
 kun med hjelp av CygWin. Nå finnes msysgit, som
 inkluderer en installer, samt en portabel versjon
 som ikke trenger å installeres.
Git er ikke:
     ●   SVN
            –   Git er ikke det neste logiske steget på stigen
                 fra RCS -> CVS -> SVN
     ●   Kjempe-enkelt
            –   «With great power comes great reponsibility»
            –   Git kan være litt frusterende i starten.




                                                                 9




Ugyldig mental modell.

Hjelper hvis du er vant med unix modellen.
Så blir det skikkelig digg etterhvert
Viktige konsepter
●   Sentralisert vs Desentralisert
●   .git - flstruktur
●   Objektdatabase
●   «Plumbing» og «Porclain»




                                     10
Sentralisert versjonkontroll

          Arbeidskopi   Alice              Bob    Arbeidskopi




                                  Tjener




          Arbeidskopi   Charlie            Dixe    Arbeidskopi



                                                                 11




Dette er f.eks SVN og CVS

Arbeidskopien innholder ikke historikk
Kan ikke jobbe offline
Desentralisert versjonkontroll

                    Arbeidskopi
                      Tjener      Alice              Bob    Tjener


    Charlie's
    Laptop

                                            Tjener
                Tjener




                         Tjener   Charlie            Dixe    Tjener



                                                                      12




Hver bruker har et fullverdig tre med historikk, og
 utveksler sine endringer med «upstream» og
 «downstream».

I Charlie's eksempel utveksler laptoppen hans
   infomasjon kun med arbeidsstasjonen, som igjen
   utveksler informasjon med de andre.
I praksis finnes det ofte et offentlig/sentralt repository,
   men dette trenger ikke være autorativt.
Eks. Linux
Offine
      ●   Diff               ●   Merge branch
      ●   Copy               ●   Blame
      ●   Add                ●   Tag
      ●   Commit             ●   Alt untatt push/pull
      ●   Checkout branch




                                                    13




SVN var her en forbedring over CVS, som trengte
 online tilgang til alle operasjoner, inkludert diff.
.git
      ●   En katalog i roten av hvert prosjekt:
     |-- HEAD          # peker til aktiv gren
     |-- config        # instillinger for dette prosjektet
     |-- description   # beskrivelse av prosjektet
     |-- hooks/        # automatiske handlinger
     |-- index         # index file ( Hva er planlagt til neste
                         commit)?
     |-- logs/         # Historikk over grenene dine
     |-- objects/      # Objektene til prosjektet (commiter,
                         trær, blober, tagger)
     `-- refs/         # Pekere til grenene dine

                                                                  14




Kan flyttes ut av prosjektet ved å sette en ENV
 variabel
Hooks innholder eksempler. Kan f.eks. Brukes for å
 sende mail på commit eller sjekke at ting er riktig
 formattert.
Objektdatabasen skal vi se på straks
Informasjon lagres i
      objektdatabase




                                            15




Katalogen i .git som vist i forrige slide
id(object) = SHA1(innholdet i flen)



           335e   a23f   6679


                                       601a   5592

                  3347   efa4                 34fe   cca6

                         dd85   57bc
                                       cc39   3e93
                                              2211   5390
                  8e9b   1798
                         332e   23a7
                                       1432   1260

                  f943   eab4                 93a4   cc5e
                                                     b3ca

                                                            16




SHA1 – Populær hashing algoritme
Secure Hash Algorithm
SHA-1 (as well as SHA-0) produces a 160-bit digest
 from a message with a maximum length of (264 −
 1) bits.
Utfases som crypto fra 2010 til fordel for SHA-2
Mer enn bra nok for Git's formål.
Innhold lagres i blob objekter


                                                             #include <stdio.h>
            335e   a23f   6679                               int main ()
                                                             {
                                        601a   5592            printf(”Hello World”);
                                                               return 0;
                                               34fe   cca6   }
                   3347   efa4
                          dd85   57bc
                                        cc39   3e93
                                               2211   5390
                   8e9b   1798
                          332e   23a7
                                        1432   1260

                   f943   eab4                 93a4   cc5e
                                                      b3ca

                                                                                        17




binary large object (Blob)
Populær term fra SQL
Struktur lagres i tree-objekter


                                                             040000 tree fec552 src
                                                             100644 blob cdea5 hw.c
            335e   a23f   6679                               100644 blob b45d5
                                                             INFO
                                        601a   5592

                   3347   efa4                 34fe   cca6

                          dd85   57bc
                                        cc39   3e93
                                               2211   5390
                   8e9b   1798
                          332e   23a7
                                        1432   1260

                   f943   eab4                 93a4   cc5e
                                                      b3ca

                                                                                      18




Flere tre-objekter bygger en trestruktur.
Filrettigheter i oktal.
Historikk lagres i commit-
     objekter

                                                             tree eec64...
                                                             parent c9781...
            335e   a23f   6679                               author Tom <tom@...>
                                                                          <tom@...>
                                                               1204666883 +0100
                                        601a   5592          committer Max
                                                               <max@...>
                                                                max@...>
                                               34fe   cca6     1204666883 +0100
                                                               1204666883
                   3347   efa4
                          dd85   57bc                        Fixed a major bug in
                                        cc39   3e93          Hello World.
                                               2211   5390
                   8e9b   1798
                          332e   23a7
                                        1432   1260

                   f943   eab4                 93a4   cc5e
                                                      b3ca

                                                                                      19




Git skiller mellom forfatter og committer
Referanser lagres i tag-objekter


                                                            object 92e86...
                                                            type commit
                                                            tag v1.0.7
           335e   a23f   6679                               tagger Jack <jack@...
                                                            >
                                                              1136523576 -0800

                                       601a   5592          GIT 1.0.7
                                                            -----BEGIN PGP
                                                            SIGNATURE-----
                  3347   efa4                 34fe   cca6   Version: GnuPG v1.4.2
                                                            (GNU/Linux)

                         dd85   57bc                        iD8D…
                                                            -----END PGP
                                       cc39   3e93          SIGNATURE-----

                                              2211   5390
                  8e9b   1798
                         332e   23a7
                                       1432   1260

                  f943   eab4                 93a4   cc5e
                                                     b3ca

                                                                                    20




Tags kan signeres kryptografisk
Kan også pushes upstream
Peker på et
                                 grener




                                              feature-X
                       master
                                                          commit
                                                          objekt




                335e     a23f   6679


    tags                                         601a     5592
                                                          34fe   cca6
        v1.0             3347   efa4
                                dd85   57bc
      alpha-3                                    cc39     3e93
                                                          2211   5390
   as aliases            8e9b   1798
   of objects                   332e   23a7
   (usually                                      1432     1260
   commits)                                               93a4   cc5e
                         f943   eab4
                                                                 b3ca

                                                                        21




Git sporer da siste commit objekt for hver branch du
 tracker
Git holder også styr på når du sist merget en branch.
Merk at når du sletter en branch etter å ha merget
 den inn i head forsvinner den fra objektdatabasen,
 men er fortsatt tilgjengelig i logger i en periode.
En viktig konsekvens:




     Git er kjapt!                              22




De fleste lokale operasjoner går på under et sekund,
  inkludert lage ny branch og bytte branch
Undersøkelse fra mozilla fra 2006 viste da at git var
  betraktelig raskere enn hg og bazar
http://weblogs.mozillazine.org/jst/archives/2006/11/vc
  s_performance.html
Git-kommandoer - UNIX-flosof




                                          23




Små kraftige kommandoer som har et begrenset
 område. Alle kommandoene som heter git- kan
 også kalles via selve git kommandoen med
 kommandonavnet som parameter
Porselenet




                                               24




Kommandoene du bruker
Resten kalles plumbing, og trengs ikke for vanlige
 brukere / brukes internt i porselenet
I daglig bruk
     $ cd ~/Source/latest-project
     $ git init
     $ git add .
     $ git commit -m'First post'
      ●   Lav kostnad for å komme igang



                                                25




Svært kjapt å starte å versjonskontrollere en katalog
Krever ikke server
Hent info om repo
     $ git status
     $ git log
     $ git show e6bf359ac52200efe9e46a1
     $ git diff HEAD^
     $ git grep foo
     $ git blame lib/buildbreaker.c

                                             26




Commitish trenger bare nok av commit-meldingen til
 å være unikt i dette repositoriet
Postfix med ^ referrerer til parent
Kan legge til noder etter
behov.
F.eks kan bob ha forket mitt repository og
gjort noen endringer jeg ønsker å hente


$ git add remote bob git://bob/o.git
$ git pull bob




                                             27
Split & Hersk
$ git clone git://git.no/foo.git foo
$ vi foo.pl
$ git rebase
$ vi bar.pl
$ git add foo.pl bar.pl
$ git format-patch origin/master
Evt. La maintainer pulle direkte fra din fork.
                                                 28
Grener
$ git checkout -b new_branch
$ git branch # vis gren
$ git push origin new_branch
$ git checkout –track -b
new_remote_branch
$ git tag v1.0




                               29
Pro Tip: retrack your branch
      #   Make sure pushed remote branch is
      setup
      retrack = quot;!retrack() { git
      config quot;branch.$1.remotequot; $(dirname
      quot;$2quot;); git config quot;branch.
      $1.mergequot; quot;refs/heads/$
      (basename quot;$2quot;)quot;; }; retrackquot;

      $ git retrack foo origin/foo

                                           30




Etter en push av en ny branch
Sikrer at configen blir satt opp riktig.
Snedige 3-partstilegg
●   Github
●   Git-svn
●   Easy git
●   Gitorious
●   gitk/gitx




                        31
Github – Open Source hosting




                                    32




Tilbyr
Webgrensesnitt for commits
Grafer
Admin for bidragsytere
Spore Forks




                                            33




Med en distribuert VCS kan det være mange
 bidragsytere du ikke har kontakt med
Github lar deg spore dem
Github – Sosialt nisje-nettverk
      ●   Click to add an outline




                                       34




Timeline for utviklere
Nye prosjekter fra folk du følger
Commits fra jobb-prosjekter.
Easy git
     ●   Enkelt påbygg til git
     ●   Kun sukker, fullt kompatibel med git
     ●   Bedre dokumentasjon med eksempler
     ●   Får git til å ligne mer på svn
     ●   Finnes en rekke lignende tillegg


     ●   http://www.gnome.org/~newren/eg/
                                                35




Jeg bruker ikke dette
Kan være nyttig i en overgangsfase
git-svn
      ●   Bruk git som klient for svn repositories
      $ git-svn clone http://svn.url/
      $ git-add Changes
      $ git-commit -m'Phear it'
      $ git-svn rebase
      $ git-svn dcommit

                                                      36




Greit hvis du vil teste ut git uten å gjøre en full
 migrering
Gitosis
●   Sett opp din egen git server
●   Gir tilgang over SSH uten å trenge egne
    brukerkontoer
●   Styr tilgangskontroll
●   http://eagain.net/gitweb/?p=gitosis.git
●   Kombiner med GitWeb for din egen mini-
    github.

                                              37
gitk/gitx




            38
Bonus: git prompt
●    Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i
     promptet?
function parse_git_dirty {

    [[ $(git status 2> /dev/null | tail -n1) != quot;nothing to commit
(working directory clean)quot; ]] && echo quot;*quot; }

function parse_git_branch {

    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e quot;s/* 
(.*)/[1$(parse_git_dirty)]/quot; }

export PS1='u@h [033[1;33m]w[033[0m]$(parse_git_branch)$
'

presto:

marcus@Command-Central ~/Source/mojomojo[master*]$                   39
Spørsmål?
●   marcus@nordaaker.com
●   Nordaaker leverer blant annet konsulent-
    tjenester ifb. med git.
    http://nordaaker.com/services.no.html
●   Noen skisser ble hentet fra
    http://inso.cc/wp/2008/04/10/get-the-git-slides/
●   Alt slide-materialet er lisensiert under
    Attribution-Share Alike 2.5 Lisensen
                                               40

Weitere ähnliche Inhalte

Mehr von Friprogsenteret

GoOpen Roadshow Trondheim - Innledning ved Friprogsenteret
GoOpen Roadshow Trondheim - Innledning ved FriprogsenteretGoOpen Roadshow Trondheim - Innledning ved Friprogsenteret
GoOpen Roadshow Trondheim - Innledning ved FriprogsenteretFriprogsenteret
 
The Norwegian approach to open source in the public sector
The Norwegian approach to open source in the public sectorThe Norwegian approach to open source in the public sector
The Norwegian approach to open source in the public sectorFriprogsenteret
 
Åpning av MSc ved UiA og HiT
Åpning av MSc ved UiA og HiTÅpning av MSc ved UiA og HiT
Åpning av MSc ved UiA og HiTFriprogsenteret
 
GoOpen 2010: David Elboth
GoOpen 2010: David ElbothGoOpen 2010: David Elboth
GoOpen 2010: David ElbothFriprogsenteret
 
Fri programvare og utfordringer i anskaffelsesprosessen
Fri programvare og utfordringer i anskaffelsesprosessenFri programvare og utfordringer i anskaffelsesprosessen
Fri programvare og utfordringer i anskaffelsesprosessenFriprogsenteret
 
GoOpen 2010: Sandro D'Elia
GoOpen 2010: Sandro D'EliaGoOpen 2010: Sandro D'Elia
GoOpen 2010: Sandro D'EliaFriprogsenteret
 
GoOpen 2010: Roger Bivand
GoOpen 2010: Roger BivandGoOpen 2010: Roger Bivand
GoOpen 2010: Roger BivandFriprogsenteret
 
GoOpen 2010: Reidar Conradi
GoOpen 2010: Reidar ConradiGoOpen 2010: Reidar Conradi
GoOpen 2010: Reidar ConradiFriprogsenteret
 
GoOpen 2010: Lisbeth Bergholt
GoOpen 2010: Lisbeth BergholtGoOpen 2010: Lisbeth Bergholt
GoOpen 2010: Lisbeth BergholtFriprogsenteret
 
GoOpen 2010: Jan Rasmus Sulebak
GoOpen 2010: Jan Rasmus SulebakGoOpen 2010: Jan Rasmus Sulebak
GoOpen 2010: Jan Rasmus SulebakFriprogsenteret
 
GoOpen 2010: Erlend Øverby
GoOpen 2010: Erlend ØverbyGoOpen 2010: Erlend Øverby
GoOpen 2010: Erlend ØverbyFriprogsenteret
 
GoOpen 2010: Ann Therese Lotherington
GoOpen 2010: Ann Therese LotheringtonGoOpen 2010: Ann Therese Lotherington
GoOpen 2010: Ann Therese LotheringtonFriprogsenteret
 
GoOpen 2010: Olav Torvund
GoOpen 2010: Olav TorvundGoOpen 2010: Olav Torvund
GoOpen 2010: Olav TorvundFriprogsenteret
 
GoOpen 2010: Arne Magnus
GoOpen 2010: Arne MagnusGoOpen 2010: Arne Magnus
GoOpen 2010: Arne MagnusFriprogsenteret
 
GoOpen 2010: Anne Cathrine Frøstrup
GoOpen 2010: Anne Cathrine FrøstrupGoOpen 2010: Anne Cathrine Frøstrup
GoOpen 2010: Anne Cathrine FrøstrupFriprogsenteret
 
GoOpen 2010: Rein Amund Schultz
GoOpen 2010: Rein Amund SchultzGoOpen 2010: Rein Amund Schultz
GoOpen 2010: Rein Amund SchultzFriprogsenteret
 
GoOpen 2010: Per Einar Dybvik
GoOpen 2010: Per Einar DybvikGoOpen 2010: Per Einar Dybvik
GoOpen 2010: Per Einar DybvikFriprogsenteret
 
GoOpen 2010: Paul Skrede
GoOpen 2010: Paul SkredeGoOpen 2010: Paul Skrede
GoOpen 2010: Paul SkredeFriprogsenteret
 

Mehr von Friprogsenteret (20)

GoOpen Roadshow Trondheim - Innledning ved Friprogsenteret
GoOpen Roadshow Trondheim - Innledning ved FriprogsenteretGoOpen Roadshow Trondheim - Innledning ved Friprogsenteret
GoOpen Roadshow Trondheim - Innledning ved Friprogsenteret
 
The Norwegian approach to open source in the public sector
The Norwegian approach to open source in the public sectorThe Norwegian approach to open source in the public sector
The Norwegian approach to open source in the public sector
 
Åpning av MSc ved UiA og HiT
Åpning av MSc ved UiA og HiTÅpning av MSc ved UiA og HiT
Åpning av MSc ved UiA og HiT
 
Overalt, alltid
Overalt, alltidOveralt, alltid
Overalt, alltid
 
GoOpen 2010: David Elboth
GoOpen 2010: David ElbothGoOpen 2010: David Elboth
GoOpen 2010: David Elboth
 
Fri programvare og utfordringer i anskaffelsesprosessen
Fri programvare og utfordringer i anskaffelsesprosessenFri programvare og utfordringer i anskaffelsesprosessen
Fri programvare og utfordringer i anskaffelsesprosessen
 
GoOpen 2010: Sandro D'Elia
GoOpen 2010: Sandro D'EliaGoOpen 2010: Sandro D'Elia
GoOpen 2010: Sandro D'Elia
 
GoOpen 2010: Roger Bivand
GoOpen 2010: Roger BivandGoOpen 2010: Roger Bivand
GoOpen 2010: Roger Bivand
 
GoOpen 2010: Reidar Conradi
GoOpen 2010: Reidar ConradiGoOpen 2010: Reidar Conradi
GoOpen 2010: Reidar Conradi
 
GoOpen 2010: Lisbeth Bergholt
GoOpen 2010: Lisbeth BergholtGoOpen 2010: Lisbeth Bergholt
GoOpen 2010: Lisbeth Bergholt
 
GoOpen 2010: Jan Rasmus Sulebak
GoOpen 2010: Jan Rasmus SulebakGoOpen 2010: Jan Rasmus Sulebak
GoOpen 2010: Jan Rasmus Sulebak
 
GoOpen 2010: Erlend Øverby
GoOpen 2010: Erlend ØverbyGoOpen 2010: Erlend Øverby
GoOpen 2010: Erlend Øverby
 
GoOpen 2010: Ann Therese Lotherington
GoOpen 2010: Ann Therese LotheringtonGoOpen 2010: Ann Therese Lotherington
GoOpen 2010: Ann Therese Lotherington
 
GoOpen 2010: Olav Torvund
GoOpen 2010: Olav TorvundGoOpen 2010: Olav Torvund
GoOpen 2010: Olav Torvund
 
GoOpen 2010: Arne Magnus
GoOpen 2010: Arne MagnusGoOpen 2010: Arne Magnus
GoOpen 2010: Arne Magnus
 
GoOpen 2010: Anne Cathrine Frøstrup
GoOpen 2010: Anne Cathrine FrøstrupGoOpen 2010: Anne Cathrine Frøstrup
GoOpen 2010: Anne Cathrine Frøstrup
 
GoOpen 2010: Tom Orvei
GoOpen 2010: Tom OrveiGoOpen 2010: Tom Orvei
GoOpen 2010: Tom Orvei
 
GoOpen 2010: Rein Amund Schultz
GoOpen 2010: Rein Amund SchultzGoOpen 2010: Rein Amund Schultz
GoOpen 2010: Rein Amund Schultz
 
GoOpen 2010: Per Einar Dybvik
GoOpen 2010: Per Einar DybvikGoOpen 2010: Per Einar Dybvik
GoOpen 2010: Per Einar Dybvik
 
GoOpen 2010: Paul Skrede
GoOpen 2010: Paul SkredeGoOpen 2010: Paul Skrede
GoOpen 2010: Paul Skrede
 

Marcus Ramberg: Git now

  • 1. G(et)it nå! Marcus Ramberg Nordaaker Ltd @marcusramberg (Twitter)
  • 2. I denne presentasjonen ● Hvorfor versjonskontroll? ● Et historisk perspektiv ● Viktige konsepter ● Git i daglig bruk ● Snedige 3. parts-tillegg
  • 3. Hvorfor versjonskontroll? ● Forutsetting for samarbeid ● Men også alene ● Undo for kodebasen din – cp Codebase Codebase.goodCopy – cp Codebase Codebase.reallyGoodCopy ● Forutsetning for kontroll ● Utvikle fere funksjoner parallelt (Grener)
  • 4. Et historisk perspektiv ● ~1960 CDC Update IBM IEB_Update, første SCM verktøyene (Kort-baserte) ● 1972 Bell Labs fnner opp diff algoritmen ● RCS (Sent på 1970-tallet – Revision Control System – Låser alle fler – Skalerer dårlig med fere utviklere. – Fortsatt nyttig for å jobbe med binærobjekter
  • 5. Et historisk perspektiv ● Patch 1985 ● CVS (1986) – Concurrent Versison System – Lar fere redigere samme fl – Defakto verktøy i UNIX miljøet 1990-tallet
  • 6. Et historisk perspektiv ● SVN ● Annonsert in 2000 som en erstatning for CVS – Atomiske commit – Lagrer fytting og kopiering av fler. Sporer hele endringer samlet, heller enn enkelt-fler. – Støtter Webdav-basert protokoll – SVK er et påbygg som gir distribuert støtte for SVN
  • 7. Et historisk perspektiv ● Tidlig på 2000 tallet, første distribuerte systemer som GNU arch og BitKeeper ● 2005 – Linus thorvalds starter Git prosjektet etter kontrovers rundt Bitkeeper-lisensiering. ● Ps: det fnnes fere systemer som Perforce, Rational og Microsoft Source Safe som ikke ble nevnt i denne historikken.
  • 8. Git er: ● Distribuert ● Kjapt og skalerbart til store kodebaser ● Open Source (GPL V2) ● Basert på å lagre snapshots, ikke diffs ● Tilgjengelig i de feste unix distribusjoner. ● Tilgjengelig som installasjonspakker for Windows og OSX.
  • 9. Git er ikke: ● SVN – Git er ikke det neste logiske steget på stigen fra RCS -> CVS -> SVN ● Kjempe-enkelt – «With great power comes great reponsibility» – Git kan være litt frusterende i starten.
  • 10. Viktige konsepter ● Sentralisert vs Desentralisert ● .git - flstruktur ● Objektdatabase ● «Plumbing» og «Porclain»
  • 11. Sentralisert versjonkontroll Arbeidskopi Alice Bob Arbeidskopi Tjener Arbeidskopi Charlie Dixe Arbeidskopi
  • 12. Desentralisert versjonkontroll Arbeidskopi Tjener Alice Bob Tjener Charlie's Laptop Tjener Tjener Tjener Charlie Dixe Tjener
  • 13. Offine ● Diff ● Merge branch ● Copy ● Blame ● Add ● Tag ● Commit ● Alt untatt push/pull ● Checkout branch
  • 14. .git ● En katalog i roten av hvert prosjekt: |-- HEAD # peker til aktiv gren |-- config # instillinger for dette prosjektet |-- description # beskrivelse av prosjektet |-- hooks/ # automatiske handlinger |-- index # index file ( Hva er planlagt til neste commit)? |-- logs/ # Historikk over grenene dine |-- objects/ # Objektene til prosjektet (commiter, trær, blober, tagger) `-- refs/ # Pekere til grenene dine
  • 16. id(object) = SHA1(innholdet i flen) 335e a23f 6679 601a 5592 3347 efa4 34fe cca6 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca
  • 17. Innhold lagres i blob objekter #include <stdio.h> 335e a23f 6679 int main () { 601a 5592 printf(”Hello World”); return 0; 34fe cca6 } 3347 efa4 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca
  • 18. Struktur lagres i tree-objekter 040000 tree fec552 src 100644 blob cdea5 hw.c 335e a23f 6679 100644 blob b45d5 INFO 601a 5592 3347 efa4 34fe cca6 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca
  • 19. Historikk lagres i commit- objekter tree eec64... parent c9781... 335e a23f 6679 author Tom <tom@...> 1204666883 +0100 601a 5592 committer Max <max@...> 34fe cca6 1204666883 +0100 3347 efa4 dd85 57bc Fixed a major bug in cc39 3e93 Hello World. 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca
  • 20. Referanser lagres i tag-objekter object 92e86... type commit tag v1.0.7 335e a23f 6679 tagger Jack <jack@... > 1136523576 -0800 601a 5592 GIT 1.0.7 -----BEGIN PGP SIGNATURE----- 3347 efa4 34fe cca6 Version: GnuPG v1.4.2 (GNU/Linux) dd85 57bc iD8D… -----END PGP cc39 3e93 SIGNATURE----- 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca
  • 21. Peker på et grener feature-X master commit objekt 335e a23f 6679 tags 601a 5592 34fe cca6 v1.0 3347 efa4 dd85 57bc alpha-3 cc39 3e93 2211 5390 as aliases 8e9b 1798 of objects 332e 23a7 (usually 1432 1260 commits) 93a4 cc5e f943 eab4 b3ca
  • 25. I daglig bruk $ cd ~/Source/latest-project $ git init $ git add . $ git commit -m'First post' ● Lav kostnad for å komme igang
  • 26. Hent info om repo $ git status $ git log $ git show e6bf359ac52200efe9e46a1 $ git diff HEAD^ $ git grep foo $ git blame lib/buildbreaker.c
  • 27. Kan legge til noder etter behov. F.eks kan bob ha forket mitt repository og gjort noen endringer jeg ønsker å hente $ git add remote bob git://bob/o.git $ git pull bob
  • 28. Split & Hersk $ git clone git://git.no/foo.git foo $ vi foo.pl $ git rebase $ vi bar.pl $ git add foo.pl bar.pl $ git format-patch origin/master Evt. La maintainer pulle direkte fra din fork.
  • 29. Grener $ git checkout -b new_branch $ git branch # vis gren $ git push origin new_branch $ git checkout –track -b new_remote_branch $ git tag v1.0
  • 30. Pro Tip: retrack your branch # Make sure pushed remote branch is setup retrack = quot;!retrack() { git config quot;branch.$1.remotequot; $(dirname quot;$2quot;); git config quot;branch. $1.mergequot; quot;refs/heads/$ (basename quot;$2quot;)quot;; }; retrackquot; $ git retrack foo origin/foo
  • 31. Snedige 3-partstilegg ● Github ● Git-svn ● Easy git ● Gitorious ● gitk/gitx
  • 32. Github – Open Source hosting
  • 34. Github – Sosialt nisje-nettverk
  • 35. Easy git ● Enkelt påbygg til git ● Kun sukker, fullt kompatibel med git ● Bedre dokumentasjon med eksempler ● Får git til å ligne mer på svn ● Finnes en rekke lignende tillegg ● http://www.gnome.org/~newren/eg/
  • 36. git-svn ● Bruk git som klient for svn repositories $ git-svn clone http://svn.url/ $ git-add Changes $ git-commit -m'Phear it' $ git-svn rebase $ git-svn dcommit
  • 37. Gitosis ● Sett opp din egen git server ● Gir tilgang over SSH uten å trenge egne brukerkontoer ● Styr tilgangskontroll ● http://eagain.net/gitweb/?p=gitosis.git ● Kombiner med GitWeb for din egen mini- github.
  • 39. Bonus: git prompt ● Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i promptet? function parse_git_dirty { [[ $(git status 2> /dev/null | tail -n1) != quot;nothing to commit (working directory clean)quot; ]] && echo quot;*quot; } function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e quot;s/* (.*)/[1$(parse_git_dirty)]/quot; } export PS1='u@h [033[1;33m]w[033[0m]$(parse_git_branch)$ ' presto: marcus@Command-Central ~/Source/mojomojo[master*]$
  • 40. Spørsmål? ● marcus@nordaaker.com ● Nordaaker leverer blant annet konsulent- tjenester ifb. med git. http://nordaaker.com/services.no.html ● Noen skisser ble hentet fra http://inso.cc/wp/2008/04/10/get-the-git-sl ● Alt slide-materialet er lisensiert under Attribution-Share Alike 2.5 Lisensen
  • 41. G(et)it nå! Marcus Ramberg Nordaaker Ltd @marcusramberg (Twitter) 1 Hvem er jeg? Erfaring med versjonkontroll - Jobb - Brukt diverse verktøy siden 1996. Tidlig, RCS & CVS. - Innført SVN i flere bedrifter - Evaluerte VCS for SO - Perforce - Open Source - Bruker av diverse tjenester fra Sourceforge til Google Code. - Satte opp opprinnelig SVN repo for Catalyst - Nylig migrert MojoMojo fra SVN til Git Mitt selskap git alle prosjekter Også dokument-storage Deployer iusethis.com direkte til produksjon via GitHub. Har også rails applikasjoner som deployer med capistrano og Git.
  • 42. I denne presentasjonen ● Hvorfor versjonskontroll? ● Et historisk perspektiv ● Viktige konsepter ● Git i daglig bruk ● Snedige 3. parts-tillegg 2
  • 43. Hvorfor versjonskontroll? ● Forutsetting for samarbeid ● Men også alene ● Undo for kodebasen din – cp Codebase Codebase.goodCopy – cp Codebase Codebase.reallyGoodCopy ● Forutsetning for kontroll ● Utvikle fere funksjoner parallelt (Grener) 3 Versionskontroll utenfor utvikling: Wiki Undo tracking i Word
  • 44. Et historisk perspektiv ● ~1960 CDC Update IBM IEB_Update, første SCM verktøyene (Kort-baserte) ● 1972 Bell Labs fnner opp diff algoritmen ● RCS (Sent på 1970-tallet – Revision Control System – Låser alle fler – Skalerer dårlig med fere utviklere. – Fortsatt nyttig for å jobbe med binærobjekter 4 Diff fortsatt viktig i dag – unified diff som ble utviklet i 1990 er dominerende stil for patchutveksling RCS er nyttig f.eks i DNS-systemer hvor du ønsker å låse en zonefil fra å bli redigert av flere samtidig.
  • 45. Et historisk perspektiv ● Patch 1985 ● CVS (1986) – Concurrent Versison System – Lar fere redigere samme fl – Defakto verktøy i UNIX miljøet 1990-tallet 5 Patch utviklet av Larry wall , forfatteren av Perl, og en deltaker på denne konferansen CVS har versjonsnummer per fil. Sentralisert låsemekanisme. Ingen sporing av kopiering/renaming . Metadata i hver katalog
  • 46. Et historisk perspektiv ● SVN ● Annonsert in 2000 som en erstatning for CVS – Atomiske commit – Lagrer fytting og kopiering av fler. Sporer hele endringer samlet, heller enn enkelt-fler. – Støtter Webdav-basert protokoll – SVK er et påbygg som gir distribuert støtte for SVN 6 Brandet som CVS done right. Samme sentraliserte modell, men sporer endringer i trær heller enn filer
  • 47. Et historisk perspektiv ● Tidlig på 2000 tallet, første distribuerte systemer som GNU arch og BitKeeper ● 2005 – Linus thorvalds starter Git prosjektet etter kontrovers rundt Bitkeeper-lisensiering. ● Ps: det fnnes fere systemer som Perforce, Rational og Microsoft Source Safe som ikke ble nevnt i denne historikken. 7 ● Merk at det også finnes andre distribuerte VCS som bazaar og hg.
  • 48. Git er: ● Distribuert ● Kjapt og skalerbart til store kodebaser ● Open Source (GPL V2) ● Basert på å lagre snapshots, ikke diffs ● Tilgjengelig i de feste unix distribusjoner. ● Tilgjengelig som installasjonspakker for Windows og OSX. 8 Eksempel på store kodebaser som bruker git: Linux, Perl, Gnome, X11 & Wine Windows-støtte var lenge et problem, og fungerte kun med hjelp av CygWin. Nå finnes msysgit, som inkluderer en installer, samt en portabel versjon som ikke trenger å installeres.
  • 49. Git er ikke: ● SVN – Git er ikke det neste logiske steget på stigen fra RCS -> CVS -> SVN ● Kjempe-enkelt – «With great power comes great reponsibility» – Git kan være litt frusterende i starten. 9 Ugyldig mental modell. Hjelper hvis du er vant med unix modellen. Så blir det skikkelig digg etterhvert
  • 50. Viktige konsepter ● Sentralisert vs Desentralisert ● .git - flstruktur ● Objektdatabase ● «Plumbing» og «Porclain» 10
  • 51. Sentralisert versjonkontroll Arbeidskopi Alice Bob Arbeidskopi Tjener Arbeidskopi Charlie Dixe Arbeidskopi 11 Dette er f.eks SVN og CVS Arbeidskopien innholder ikke historikk Kan ikke jobbe offline
  • 52. Desentralisert versjonkontroll Arbeidskopi Tjener Alice Bob Tjener Charlie's Laptop Tjener Tjener Tjener Charlie Dixe Tjener 12 Hver bruker har et fullverdig tre med historikk, og utveksler sine endringer med «upstream» og «downstream». I Charlie's eksempel utveksler laptoppen hans infomasjon kun med arbeidsstasjonen, som igjen utveksler informasjon med de andre. I praksis finnes det ofte et offentlig/sentralt repository, men dette trenger ikke være autorativt. Eks. Linux
  • 53. Offine ● Diff ● Merge branch ● Copy ● Blame ● Add ● Tag ● Commit ● Alt untatt push/pull ● Checkout branch 13 SVN var her en forbedring over CVS, som trengte online tilgang til alle operasjoner, inkludert diff.
  • 54. .git ● En katalog i roten av hvert prosjekt: |-- HEAD # peker til aktiv gren |-- config # instillinger for dette prosjektet |-- description # beskrivelse av prosjektet |-- hooks/ # automatiske handlinger |-- index # index file ( Hva er planlagt til neste commit)? |-- logs/ # Historikk over grenene dine |-- objects/ # Objektene til prosjektet (commiter, trær, blober, tagger) `-- refs/ # Pekere til grenene dine 14 Kan flyttes ut av prosjektet ved å sette en ENV variabel Hooks innholder eksempler. Kan f.eks. Brukes for å sende mail på commit eller sjekke at ting er riktig formattert. Objektdatabasen skal vi se på straks
  • 55. Informasjon lagres i objektdatabase 15 Katalogen i .git som vist i forrige slide
  • 56. id(object) = SHA1(innholdet i flen) 335e a23f 6679 601a 5592 3347 efa4 34fe cca6 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca 16 SHA1 – Populær hashing algoritme Secure Hash Algorithm SHA-1 (as well as SHA-0) produces a 160-bit digest from a message with a maximum length of (264 − 1) bits. Utfases som crypto fra 2010 til fordel for SHA-2 Mer enn bra nok for Git's formål.
  • 57. Innhold lagres i blob objekter #include <stdio.h> 335e a23f 6679 int main () { 601a 5592 printf(”Hello World”); return 0; 34fe cca6 } 3347 efa4 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca 17 binary large object (Blob) Populær term fra SQL
  • 58. Struktur lagres i tree-objekter 040000 tree fec552 src 100644 blob cdea5 hw.c 335e a23f 6679 100644 blob b45d5 INFO 601a 5592 3347 efa4 34fe cca6 dd85 57bc cc39 3e93 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca 18 Flere tre-objekter bygger en trestruktur. Filrettigheter i oktal.
  • 59. Historikk lagres i commit- objekter tree eec64... parent c9781... 335e a23f 6679 author Tom <tom@...> <tom@...> 1204666883 +0100 601a 5592 committer Max <max@...> max@...> 34fe cca6 1204666883 +0100 1204666883 3347 efa4 dd85 57bc Fixed a major bug in cc39 3e93 Hello World. 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca 19 Git skiller mellom forfatter og committer
  • 60. Referanser lagres i tag-objekter object 92e86... type commit tag v1.0.7 335e a23f 6679 tagger Jack <jack@... > 1136523576 -0800 601a 5592 GIT 1.0.7 -----BEGIN PGP SIGNATURE----- 3347 efa4 34fe cca6 Version: GnuPG v1.4.2 (GNU/Linux) dd85 57bc iD8D… -----END PGP cc39 3e93 SIGNATURE----- 2211 5390 8e9b 1798 332e 23a7 1432 1260 f943 eab4 93a4 cc5e b3ca 20 Tags kan signeres kryptografisk Kan også pushes upstream
  • 61. Peker på et grener feature-X master commit objekt 335e a23f 6679 tags 601a 5592 34fe cca6 v1.0 3347 efa4 dd85 57bc alpha-3 cc39 3e93 2211 5390 as aliases 8e9b 1798 of objects 332e 23a7 (usually 1432 1260 commits) 93a4 cc5e f943 eab4 b3ca 21 Git sporer da siste commit objekt for hver branch du tracker Git holder også styr på når du sist merget en branch. Merk at når du sletter en branch etter å ha merget den inn i head forsvinner den fra objektdatabasen, men er fortsatt tilgjengelig i logger i en periode.
  • 62. En viktig konsekvens: Git er kjapt! 22 De fleste lokale operasjoner går på under et sekund, inkludert lage ny branch og bytte branch Undersøkelse fra mozilla fra 2006 viste da at git var betraktelig raskere enn hg og bazar http://weblogs.mozillazine.org/jst/archives/2006/11/vc s_performance.html
  • 63. Git-kommandoer - UNIX-flosof 23 Små kraftige kommandoer som har et begrenset område. Alle kommandoene som heter git- kan også kalles via selve git kommandoen med kommandonavnet som parameter
  • 64. Porselenet 24 Kommandoene du bruker Resten kalles plumbing, og trengs ikke for vanlige brukere / brukes internt i porselenet
  • 65. I daglig bruk $ cd ~/Source/latest-project $ git init $ git add . $ git commit -m'First post' ● Lav kostnad for å komme igang 25 Svært kjapt å starte å versjonskontrollere en katalog Krever ikke server
  • 66. Hent info om repo $ git status $ git log $ git show e6bf359ac52200efe9e46a1 $ git diff HEAD^ $ git grep foo $ git blame lib/buildbreaker.c 26 Commitish trenger bare nok av commit-meldingen til å være unikt i dette repositoriet Postfix med ^ referrerer til parent
  • 67. Kan legge til noder etter behov. F.eks kan bob ha forket mitt repository og gjort noen endringer jeg ønsker å hente $ git add remote bob git://bob/o.git $ git pull bob 27
  • 68. Split & Hersk $ git clone git://git.no/foo.git foo $ vi foo.pl $ git rebase $ vi bar.pl $ git add foo.pl bar.pl $ git format-patch origin/master Evt. La maintainer pulle direkte fra din fork. 28
  • 69. Grener $ git checkout -b new_branch $ git branch # vis gren $ git push origin new_branch $ git checkout –track -b new_remote_branch $ git tag v1.0 29
  • 70. Pro Tip: retrack your branch # Make sure pushed remote branch is setup retrack = quot;!retrack() { git config quot;branch.$1.remotequot; $(dirname quot;$2quot;); git config quot;branch. $1.mergequot; quot;refs/heads/$ (basename quot;$2quot;)quot;; }; retrackquot; $ git retrack foo origin/foo 30 Etter en push av en ny branch Sikrer at configen blir satt opp riktig.
  • 71. Snedige 3-partstilegg ● Github ● Git-svn ● Easy git ● Gitorious ● gitk/gitx 31
  • 72. Github – Open Source hosting 32 Tilbyr Webgrensesnitt for commits Grafer Admin for bidragsytere
  • 73. Spore Forks 33 Med en distribuert VCS kan det være mange bidragsytere du ikke har kontakt med Github lar deg spore dem
  • 74. Github – Sosialt nisje-nettverk ● Click to add an outline 34 Timeline for utviklere Nye prosjekter fra folk du følger Commits fra jobb-prosjekter.
  • 75. Easy git ● Enkelt påbygg til git ● Kun sukker, fullt kompatibel med git ● Bedre dokumentasjon med eksempler ● Får git til å ligne mer på svn ● Finnes en rekke lignende tillegg ● http://www.gnome.org/~newren/eg/ 35 Jeg bruker ikke dette Kan være nyttig i en overgangsfase
  • 76. git-svn ● Bruk git som klient for svn repositories $ git-svn clone http://svn.url/ $ git-add Changes $ git-commit -m'Phear it' $ git-svn rebase $ git-svn dcommit 36 Greit hvis du vil teste ut git uten å gjøre en full migrering
  • 77. Gitosis ● Sett opp din egen git server ● Gir tilgang over SSH uten å trenge egne brukerkontoer ● Styr tilgangskontroll ● http://eagain.net/gitweb/?p=gitosis.git ● Kombiner med GitWeb for din egen mini- github. 37
  • 78. gitk/gitx 38
  • 79. Bonus: git prompt ● Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i promptet? function parse_git_dirty { [[ $(git status 2> /dev/null | tail -n1) != quot;nothing to commit (working directory clean)quot; ]] && echo quot;*quot; } function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e quot;s/* (.*)/[1$(parse_git_dirty)]/quot; } export PS1='u@h [033[1;33m]w[033[0m]$(parse_git_branch)$ ' presto: marcus@Command-Central ~/Source/mojomojo[master*]$ 39
  • 80. Spørsmål? ● marcus@nordaaker.com ● Nordaaker leverer blant annet konsulent- tjenester ifb. med git. http://nordaaker.com/services.no.html ● Noen skisser ble hentet fra http://inso.cc/wp/2008/04/10/get-the-git-slides/ ● Alt slide-materialet er lisensiert under Attribution-Share Alike 2.5 Lisensen 40