Git har blivit det mest använda systemet för versionskontroll och delningskod. Om du vill hjälpa till att bygga open source-programvara, eller om du vill arbeta på ett professionellt team, är förståelsen Git ett måste.
I en serie Git-kurser på Envato Tuts + förklarade jag några av de centrala Git-koncepten, alla illustrerade med hjälpsamma animationer.
I den här videon lär du dig information om de tre träden: HEAD, indexet och arbetskatalogen. Titta när jag förklarar rollen för varje och hur de interagerar när du uppdaterar och begår kod.
För att bättre förstå hur Git fungerar, kan vi använda metaforen för de tre träden. Dessa träd är olika samlingar av filer.
För arbetsflödet för tillägg och hämtning förbinder Git tre olika versioner av filer:
Var och en av dessa träd har ett annat jobb: ett träd att skriva ändringar, ett träd för att styra dem och en för att peka på ditt senaste engagemang på en gren i din Git repo.
Filer vars innehåll kan ändras finns i din arbetsregister. Filer som placeras i ditt index blir förberedda för att bli förpackade i ett commitobjekt. Dessa fördrag sparas i ditt Git-arkiv.
Filer som redan har begåtts är komprimerade filer. De har hashed genom en SHA-1, en kryptografisk hash funktion. Båda filversionerna i indexet och förplikta sig sparas i Git repo, vilket helt enkelt är en .git prästgård på ruttnivån på din wrap.
Arbetskatalogen representerar de faktiska filerna i datorns filsystem som är tillgängliga för kodredigeraren för att tillämpa ändringar. Arbetskatalogen är en version av ett visst åtagande, en viss ögonblicksbild av ett projekt som du checkat ut. Det är den version av din Git-historia som HEAD pekar på, när som helst.
"Checked out" betyder att du har de dekomprimerade versionerna av filer som drogs ur ditt Git-arkiv, tillgängligt för redigering. Indexet representerar vad som spåras. Du kan också säga att det är en lista över alla filer som är relevanta för ditt Git-arkiv.
Indexet går med ett par namn. När folk pratar om uppställningsområdet, iscensatte filer, cache eller katalogcache, pratar de alla om indexet. Du kan se indexet som utkastszonen för ditt nästa åtagande, ett tillfälligt område för att förbereda nästa åtagande.
HEAD är den del av git som pekar på dina grenar, som huvudgrenen som standard. Det är en referens, och det har ett ganska enkelt men väldigt viktigt jobb. HEAD pekar på den för närvarande utcheckade filialen, och som i sin tur pekar tillbaka till den sista förpliktelsen från den filialen. HEAD kan flytta inte bara i tid (när du checkar ut tidigare förpliktelser), men det rör sig också när du skapar nya grenar eller helt enkelt byter till andra grenar.
Det är också poängen i din Git-historia att du kan placera ditt nästa åtagande, föräldern för ditt nästa engagemang. Med varje nytt engagemang ersätter den dess referens till den gren som för närvarande kontrolleras, som standard, huvudgrenen, förstås.
Så i själva verket är HEAD en referens som ofta ändras och pekar på två saker: själva filialen, och genom den, förbinder sig den sistnämnda förgreningen.
Låt oss titta närmare på arbetsflödet för hantering av filer i Git. Det är viktigt att förstå hur alla dessa delar passar ihop. Du får en mycket lättare tid att känna av mer avancerade funktioner och koncept i Git efter det.
Här är ett exempel:
I det här exemplet har vi begått två versioner av vår fil. Och du kan se att versionerna i repo, index och arbetsmapp är en och samma. Eftersom dessa filer redan spåras kommer Git att märka några skillnader när du ändrar någon av dessa spårade filer i arbetsmappen.
När du kör git status
Kommando, du kommer att se en lista över filer som har ändrats, färgade i rött. Detta indikerar att du har skillnader mellan din arbetsregister - representerad av koden i kodredigeraren - och ditt index, som representerar versioner av filer från ett visst åtagande, oftast det senaste åtagandet.
Du kan nu köra git lägg till
Kommandot att lägga dessa ändringar från arbetskatalogen till indexet där du spelade in filerna. git status
Då visas filerna som läggs till i det gröna indexet. Det innebär att dina ändringar är klara för att bli förpackade till ett nytt engagemang, vilket HEAD kan peka på och bygga på.
En grön lista över filer betyder helt enkelt att versionerna av de iscensatte filerna i indexet skiljer sig från de versioner av filer som redan gjorts tidigare. När du kör git commit
, Dessa iscensatte filer kommer att läggas i ett nytt commit-objekt. De git commit
kommando kommer att spara de faktiska filnamnen, innehållet i varje fil, författarinformation, metadata och liknande i ett nytt objekt.
Detta begår objekt, som nu lever i en .git
katalog i din repo, kommer att vara den nya referensen som HEAD pekar på. Det pekar tillbaka på tidigare förpliktelser, vilket är toppen av isberget på ett sätt. När vi har skapat vårt åtagobjekt är vi tillbaka i början av cykeln.
Det åtagande som HEAD pekar på i repo matchar återigen versionerna i indexet och arbetskatalogen, som är redo för nya förändringar som ska arrangeras och begås. Slutet av berättelsen.
Om du tyckte det var bra, varför inte kolla in några fler Git-kurser?
Du kan titta på vår introduktion till Git och GitHub eller prova de andra kaffepauserna i denna serie: