Hvis du er blandt de millioner i udviklerfællesskabet, er det mest sandsynligt, at du allerede har hørt om begrebet versionskontrol. Det er et kraftfuldt værktøj eller system, der hjælper dig med at tage sig af dit arbejde, så du hurtigt kan bevæge dig rundt i dine filer, dokumenter og anden indsamling af information relateret til dit projekt. Og der er adskillige værktøjer til sådan slags job på markedet, både proprietær og open source. Git er et af de mest populære og mest anvendte versionskontrolsystemer i verden i dag, og et svimlende antal projekter er afhængige af Git til versionskontrol. Git er et gratis og open source distribueret version kontrolsystem designet til at spore ændringer i kildekoden under softwareudvikling.
Et Git-projekt er repræsenteret af en datastruktur, der kaldes et lager, hvor alle oplysninger, der er relateret til projektet, gemmes inklusive projektets komplette historie siden starten. Det sporer alle de ændringer, der er foretaget i filerne over tid, og bygger en tidslinje, når du fortsætter med projektet. Et arkiv består på sin side af et sæt individuelle snapshots af projektindhold - samling af filer og arkiver - kaldet forpligtelser. Når du vil dele udviklingen af dit projekt med verden, er du nødt til at skubbe det op til en fjernbetjening, som du har skriveadgang til. Dine lokale filialer synkroniseres ikke automatisk med fjernlagrene - du skal eksplicit skubbe de grene, du vil dele.
Git betragter sine data mere som et sæt snapshots, som et mini-filsystem eller versioner af et projekt, der kaldes forpligter. Hver gang du begår eller gemmer status for dit projekt til enhver tid, tager Git dybest set et øjebliksbillede af, hvordan dine filer ser ud i øjeblikket og gemmer en henvisning til det snapshot. Et engagementsobjekt indeholder metadata for hver ændring, der udføres i depotet, inklusive forfatter, committer, engagementsdato og logmeddelelse. Hver engagement peger på et træobjekt, der fanger status på depotet i det øjeblik, begivenheden blev udført, alt sammen i et komplet snapshot. Når du foretager ændringer af koden undervejs, opretter du en håndfuld forpligtelser - en separat forpligtelse for hver ændring, du foretager. Git tildeler hver begår en unik ID, der sporer hvad, hvornår og hvem af de ændringer, du har foretaget.
Hver udvikler har deres eget private arkiv til at spore deres ændringer i. Du foretager dine ændringer lokalt, og når du er klar til at dele dem med andre udviklere, skubber du dem tilbage til det depot, som du alle deler. Forpligtelse gemmer de ændringer, du kun har foretaget i det lokale arkiv, men ikke i fjernlageret. Dine forpligtelser synkroniseres ikke automatisk med fjernlageret - du skal eksplicit presse de forpligtelser, du vil dele. Når du bruger push-kommandoen, anvender du dine ændringer på opstrøms-arkivet. Hvert open source-projekt har sin egen måde at acceptere ændringer på. Nogle projekter bruger et fuldt distribueret versionskontrolsystem, hvor kun en person kan skubbe ændringer til hovedlageret, mens der er en delt repository-model, hvor alle udviklere kan skubbe til et delt repository.
- Tryk kommer efter forpligtelse. Git commit-poster og sporer ændringer til depotet med hvert engagementspunkter til et træobjekt, der fanger status for depotet på det øjeblik, engagementet blev udført, alt sammen i et komplet snapshot. Men forpligtelser gemmer ændringerne kun i det lokale arkiv, men ikke i fjernlageret. Git push opdaterer dine forpligtede ændringer og giver dig mulighed for at sende dem til fjernlageret, hvor alle udviklerne kan få adgang til dem. Når du bruger push-kommandoen, opdaterer den simpelthen dine ændringer til opstrømsdatabasen.
- Git-forpligtelser er lokal, hvilket betyder, at de kun registreres på den maskine, som forpligtelserne faktisk finder sted på. "Git commit" -kommandoen bruges til at fortælle Git om at gemme dine ændringer i det lokale arkiv, og du skal specifikt fortælle Git, hvilke ændringer du ønsker at inkludere i en commit, før du bruger kommandoen "git commit". Du kan bruge "git push" -kommandoen til at skubbe forpligtelserne på det lokale arkiv til et fjernlager. “Push” -kommandoen opdaterer nye lokale forpligtelser på en ekstern server. Trykket tager to argumenter: fjernnavnet (oprindelsen) og filialnavnet (master).
Kort sagt er engagement den grundlæggende enhed til ændring i Git. I modsætning til andre centraliserede versionskontrolmodeller betragter Git sine data mere som et sæt snapshots, der kaldes forpligtelser. De er som et øjebliksbillede af hele arkivindholdet sammen med alle oplysninger relateret til projektet og forholdet mellem denne depotstatus og andre registrerede tilstande, efterhånden som indholdet har udviklet sig over tid. Et engagementsobjekt indeholder metadata for hver ændring, der udføres i depotet, inklusive forfatter, committer, engagementsdato og logmeddelelse. Men commit gemmer ændringerne kun til det lokale arkiv, men ikke i fjernlageret. Git push opdaterer dine forpligtede ændringer og giver dig mulighed for at sende dem til fjernlageret, hvor alle udviklerne kan få adgang til dem.