Git, GitHub og Open Source Projekter

Af Rune Madsen, underviser Jensens Kurser
De fleste grafikere eller webudviklere vil få ordene distributeret versionskontrol galt i halsen, hvis de blev sat til at forklare, hvad det betyder. Det er forståeligt. Jeg har på mit første år på New York University fået øjnene op for, hvordan de 2 værktøjer Git og Github har revolutioneret den måde, hvorpå man arbejder sammen på via internettet. Jeg vil i det følgende prøve at forklare simpelt og enkelt, hvorfor jeg mener, at Git og Github har en stor betydning for alle, som i fremtiden vil bruge internettet til samarbejde eller ideudvikling. Jeg vil også forsøge at forklare, hvorfor alle virksomheder, som arbejder med digitale filer burde bruge Git. Dette vil jeg gøre ved at forklare, hvordan vores lille skoleprojekt fra sidste år voksede til et Unicef-finansieret Open Source projekt med 47 udviklere i New York, London og San Francisco ved at bruge Github.
Git er et program til computeren, hvor man kan gemme versioner af de filer man arbejder på. Du kender måske det at arbejde på et bestemt dokument i længere tid. Efter et stykke tid vil du have dokumentet liggende i mange forskellige udgaver (mitdokument1, mitdokument2, mitdokument3, osv), og det kan meget let blive svært at sammenligne disse forskellige versioner. Hvis man f.eks. laver en hel hjemmeside, så kan det blive fuldstændigt uoverskueligt at gemme forskellige udgaver af filer.
Git holder konstant styr på de ændringer du laver i dit projekt, så du ikke behøver at gemme forskellige udgaver af dine filer. Hver gang du gemmer med Git, så gemmer den en ny version, og du kan så altid vende tilbage til tidligere versioner. Dette er hvad man bruger versionskontrol til, og der findes mange forskellige programmer udover Git (Subversion, etc) til dette. Forskellen med Git er, at der ikke er noget centralt sted, hvor alle deltagere i projektet arbejder fra. Dette betyder, at hver programmør har sit eget lager, hvor han uploader filer til. Hvis 10 webudviklere arbejder på det samme projekt, så findes der 10 forskellige lagre for dette ene projekt. Git gør det så muligt at sammenligne disse lagre og opdatere et lager med filer fra et andet lager.
Mine lagre
Github er en hjemmeside, hvor folk kan gemme og publicere alle disse Git lagre. Jeg har lige nu 18 lagre til mine forskellige projekter. Hver gang jeg opretter et lager, så skriver jeg en beskrivelse af projektet, og andre brugere kan så finde mine projekter. Hvis jeg finder et projekt som er interessant, kan jeg kopiere projektet til et nyt lager, og straks begynde at arbejde videre på det. Jeg skal ikke bruge tid på at hente tilladelse, da alle projekterne er Open Source. Når jeg har lavet de ændringer jeg vil, kan jeg lade den oprindelige ejer vide, at han kan hente de opdaterede filer fra mit lager. Dette gøres ved et enkelt klik. Man kan følge med i brugeres projekter, og hver gang du logger ind vil du kunne se, om nogen har programmeret videre på dine projekter og hvad andre udviklere har lavet. Det er ligesom Facebook for programmører.
Processen foregår i et dynamisk socialt netværk
Så hvorfor er dette så fantastisk? Git modellerer den måde, hvorpå vi deler viden til daglig. Hvis du f.eks. arbejder på et kontor og du skal vide noget, så går du altid direkte hen til den person, som er ekspert på dette område. Du får hans viden, og du starter med at bruge den med det samme. Nogen gange er du personen der vil have viden, nogen gange er du eksperten. Det vigtige er, at dette er en peer-to-peer handling. Der er intet centralt bord, hvor alt viden skal lægges, og hvor du skal have tilladelse til at lægge ny viden. Det er en process, som foregår i et dynamisk, socialt netværk, og selvom det ikke er centraliseret, så virker det. På trods af dette er der stadig mange virksomheder, som vil have et centralt sted, hvor de gemmer deres filer. Forklaringen på dette er ofte, at de vil have alting et enkelt sted. Hvis et projekt findes i 10 forskellige udgaver, hvordan ved man så hvilket et, der er det rigtige?
For de virksomheder, som bruger decentraliseret versionskontrol som Git, er dette dog aldrig rigtigt et problem. Ligesom det er naturligt på en arbejdsplads at kontakte din kollega direkte, så er det naturligt for en programmør at hente kode direkte fra en anden kollega. De forstår, at man bliver nødt til at dele filer som man deler viden.
Så hvad har dette at gøre med vores skole projekt?
Efter katastrofen i Haiti for et halvt år siden, var der massiv diskussion om, hvordan folk i fritiden kunne være med til at hjælpe ofrene for jordskælvet. I et moderne samfund handler nødhjælp nemlig om mere end uddeling af mad. Det handler om at have programmer til at registrere distribution af mad, web værktøjer hvor frivillige kan kortlægge omfanget af ødelæggelserne, og hjemmesider hvor familier kan efterlyse forsvundne familiemedlemmer. En masse designere og programmørere stod efter katastrofen klar til at udvikle disse programmer. Organisationer såsom Crisis Commons (http://crisiscommons.org/) blev dannet for at holde sådanne frivillige projekter kørende.
Dette var set før: Efter tsunamien i Thailand skrev mange bloggere, hvordan Open Source fællesskaber kunne bidrage til sådanne projekter, og hvordan organisationer som Unicef eller Red Barnet kunne få glæde af dette. Problemet dengang var, at man på ingen simpel måde kunne styre frivillige projekter uden at hyre projektledere til at stå for opsætning af en central server til kodedeling, styring af hvem der skal have adgang til at uploade kode til den centrale server, og også række ud til de eventuelt interesserede udviklere og koordinere oprettelse af disse nye medlemmer på serveren. Med en enkel forklaring: Når mange programmører og designere spredt over alle verdens lande skal arbejde sammen på et projekt, så er det meget svært at holde styr på.
Dette ændrede sig med Git og Github.
Dagen efter katastrofen i Haiti blev vi ringet op af Unicef, som havde hørt om vores ide til et program til mobiltelefoner. Programmet kan registrere børn, som er blevet væk fra deres forældre, og med tusinder af ensomme børn i Haiti havde de brug for dette program. I samme sekund startede vi et nyt projekt på Github. Først begyndte 2 udviklere fra en virksomhed i London at arbejde på projektet. Derefter kom en udvikler fra San Francisco med på vognen. Derefter udviklere i New York. Vi henter nu dagligt opdateringer til projektet fra andre udviklere, og vi er indtil videre oppe på 47 forskellige brugere, som har bidraget med kode til projektet. Det vigtige er, at Github gjorde det muligt, uden nogen projektmedarbejder eller yderligere opsætning, at dele vores projekt med verden og lade alle frivillige arbejde på det. I løbet af få dage gik projektet fra en ide til et større Open Source projekt.
Konklusion
Git og Github er fantastiske værktøjer til at dele dine filer med andre, og lade andre mennesker arbejde videre på dine filer. Github kan også bruges uden at gore filerne åbne for andre end dine medarbejdere, og dette gøres for et mindre beløb.
Hvis du vil vide mere om Git og Github, så anbefaler jeg dig at se Linus Thorvalds foredrag til Google om Git (http://www.youtube.com/watch?v=4XpnKHJAok8).
Rune Madsen, der er kreativ programmør, grafisk designer, er ved at færdiggøre sin mastergrad på New York University’s Interactive Telecommunications Program. Han skriver til os om sit studieforløb og inspirerende tanker fra New York.
