Reklame
Som webudviklere er det meget af tiden, vi har tendens til at arbejde på lokale udviklingswebsteder, og bare uploade alt, når vi er færdige. Dette er fint, når det bare er dig, og ændringerne er små, men når du har at gøre med mere end én person, der arbejder på noget, eller på et stort projekt med masser af komplicerede komponenter, det er simpelthen ikke gennemførlig. Det er, når vi vender os til noget, der kaldes versionskontrol.
I dag vil jeg tale om en open source-versionskontrol-software kaldet Git. Dette gør det muligt for mere end én person sikkert at arbejde på det samme projekt uden at forstyrre hinanden, men det er så meget mere end det også.
Hvorfor bruge versionskontrol-software?
Først og fremmest skal navnet give det væk. Versionskontrol software giver dig mulighed for at have "versioner" af et projekt, der viser de ændringer, der blev foretaget i koden over tid, og giver dig mulighed for at backtrack om nødvendigt og fortryde disse ændringer. Denne mulighed alene - ved at kunne sammenligne to versioner eller vende ændringer, gør det ret uvurderligt, når man arbejder på større projekter.
Du har sandsynligvis endda gjort dette selv på et tidspunkt og gemt kopier af et projekt på forskellige punkter, så du har en sikkerhedskopi. I et versionskontrolsystem gemmes bare ændringerne - en patch-fil, der kunne anvendes på en version, for at gøre den den samme som den næste version. Med en udvikler er dette tilstrækkeligt.
Men hvad nu hvis du har mere end en udvikler, der arbejder på et projekt? Det er når ideen om en centraliseret versionskontrolserver kommer ind. Disse har været standarden i lang tid, hvor alle versioner gemmes på en central server, og de enkelte udviklere tjekker og uploader ændringer tilbage til denne server. Hvis du nogensinde har kigget på redigeringshistorikken på en Wikipedia-side, har du en god idé om, hvordan dette fungerer i et ægte verdensscenarie:
Fordelene ved et system som dette er, at flere udviklere kan foretage ændringer, og hver ændring kan derefter tilskrives en bestemt udvikler. På den nederste side betyder det faktum, at alt er gemt i en ekstern database, ingen ændringer, når denne server går ned; og hvis den centrale database går tabt, har hver klient kun den aktuelle version af hvad de arbejdede på.
Det fører os videre til Git og andre såkaldte distribuerede versionskontrolsystemer. I disse systemer tjekker klienter ikke bare den aktuelle version af filerne og arbejder fra dem - de spejler hele versionens historie. Hver udvikler har altid en komplet kopi af alt. En central server bruges stadig, men skulle det værste ske, kan alt stadig gendannes fra nogen af de klienter, der har de nyeste versioner.
Git fungerer specifikt ved at tage “snapshots” af filer; Hvis filer forbliver uændrede i en bestemt version, linker de blot til de forrige filer - dette holder alt hurtigt og magert.
Det kan også interessere dig at lære, at Git bruges til at styre og udvikle kerne linux kerne - den grundlæggende byggesten, hvorpå alle linux-distros er bygget.
Hvad er Github?
Selvom du kan køre din egen Git-server lokalt, Github er både en ekstern server, et community med udviklere og en grafisk webgrænseflade til styring af dit Git-projekt. Det er gratis at bruge til op til 5 offentlige oplagringssteder - det vil sige, når nogen kan se eller forpakke din kode - med lave omkostningsplaner til private projekter. Jeg anbefaler på det kraftigste, at du tilmelder dig en gratis konto, så du kan begynde at lege med dine egne projekter eller forfalse nogen andre.
Forking & forgrening
Dette er kernekoncepter for Git-oplevelsen, så lad os tage et øjeblik at forklare forskellen.
Du har sandsynligvis hørt værket "gaffel", når du beskæftiger dig med linux-distros. Hvis du er bekendt med mediecenter-appen Plex, ved du, at det oprindeligt var en gaffel af den lignende open source Xbox Media Center Aeon Nox 3.5: Smukt og tilpasseligt tema til XBMCIndstil dit mediecenter nøjagtigt som du vil have det. Aeon Nox 3.5 er den seneste version af hvad der måske er det bedste tema for XBMC, og det er en sjælden kombination: smuk ... Læs mere . Dette betyder ganske enkelt, at på et tidspunkt i fortiden tog nogle udviklere XBMC-koden og besluttede at gå deres egen vej med det; det blev Plex.
Dette er naturligvis fuldstændigt tilladt, når projektet er open source - du kan tage koden, gøre hvad du vil med den. Med Git, hvis du føler, at dine ændringer er gode nok til at blive rullet tilbage til "master" -projektet, du kan fremsætte en "pull-anmodning" til forfatteren og bede dem om at trække dine ændringer tilbage til deres originale projekt. Dette giver dig mulighed for at have hundretusinder af udviklere, der arbejder på et projekt på ethvert tidspunkt, hvoraf ingen skal godkendes nødvendigt til kodeadgang - de kopierer bare koden, foretager ændringer og anmoder om at blive rullet tilbage til mestre. Det er selvfølgelig op til ejeren af det originale projekt, hvis de beslutter at acceptere dine ændringer eller ej.
Filialering er noget, der udføres internt på et projekt af de autoriserede udviklere. Det giver dig mulighed for let at adskille specifikke problemer eller funktioner og arbejde på dem uden at ødelægge masterfilerne. Når du er tilfreds med, at din filial har behandlet problemet, fletter du det tilbage til masteren. På ethvert tidspunkt kan der være så mange grene, som du vil; de forstyrrer ikke hinanden. Du kan også flette ændringer mellem grene uden at røre ved masteren.
Her er et fantastisk diagram over et eksempel på en arbejdsgang fra Vincent Driessen:
Næste gang skal vi se, hvordan man opretter et fungerende Git-eksempel og foretager kodeændringer inden for grene. Versionskontrol er et kæmpe emne. Jeg har kun givet den korteste oversigt her, men som en udvikler, der er vant til bare at foretage ændringer og fortryde dem, hvis de ikke fungerer, har hele konceptet sprængt mig - jeg håber, at det også gør dit.
Er du en erfaren udvikler med erfaring i Git? Kommer du bare i gang og tror du gerne vil gå? Lyd fra i kommentarerne!
James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.