Istället för en introduktion
Hallå! Idag ska vi prata om ett versionskontrollsystem, nämligen Git.![Komma igång med Git: en omfattande guide för nybörjare - 1](https://cdn.codegym.cc/images/article/d6ece90f-4588-42d0-9371-c41697f8201d/800.jpeg)
Grunderna i Git
Git är ett distribuerat versionskontrollsystem för vår kod. Varför behöver vi det? Distribuerade team behöver något slags system för att hantera sitt arbete. Det behövs för att spåra förändringar som sker över tid. Det vill säga att vi måste kunna se steg för steg vilka filer som har ändrats och hur. Detta är särskilt viktigt när du undersöker vad som har förändrats i samband med en enskild uppgift, vilket gör det möjligt att återställa ändringarna.Installerar Git
Låt oss installera Java på din dator.Installerar på Windows
Som vanligt måste du ladda ner och köra en exe-fil. Allt är enkelt här: klicka på den första Google-länken , utför installationen och det är allt. För att göra detta kommer vi att använda bash-konsolen som tillhandahålls av Windows. På Windows måste du köra Git Bash. Så här ser det ut i Start-menyn:![Komma igång med Git: en omfattande guide för nybörjare - 2](https://cdn.codegym.cc/images/article/7aa26c09-a314-4e83-8b06-4e886ac37a89/512.jpeg)
![Komma igång med Git: en omfattande guide för nybörjare - 3](https://cdn.codegym.cc/images/article/8bcda11a-96b8-482c-a20e-19df81d26a49/800.jpeg)
Installerar på Linux
Vanligtvis är Git en del av Linux-distributioner och är redan installerat, eftersom det är ett verktyg som ursprungligen skrevs för Linux-kärnutveckling. Men det finns situationer när det inte är det. För att kontrollera måste du öppna en terminal och skriva: git --version. Om du får ett begripligt svar behöver ingenting installeras. Öppna en terminal och installera Git på Ubuntu . Jag arbetar på Ubuntu, så jag kan berätta vad du ska skriva för det: sudo apt-get install git.Installerar på macOS
Även här måste du först kontrollera om Git redan finns där. Om du inte har det är det enklaste sättet att få det att ladda ner den senaste versionen här . Om Xcode är installerat kommer Git definitivt att installeras automatiskt.Git-inställningar
Git har användarinställningar för användaren som ska skicka in arbete. Detta är vettigt och är nödvändigt, eftersom Git tar denna information för fältet Author när en commit skapas. Ställ in ett användarnamn och lösenord för alla dina projekt genom att köra följande kommandon:
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com
Om du behöver ändra författaren för ett specifikt projekt kan du ta bort "--global". Detta kommer att ge oss följande:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
Lite teori...
För att dyka in i ämnet bör vi introducera dig för några nya ord och handlingar...- git repository
- begå
- gren
- sammanfoga
- konflikter
- dra
- skjuta på
- hur man ignorerar vissa filer (.gitignore)
Status i Git
Git har flera statyer som måste förstås och komma ihåg:- ospårad
- ändrad
- iscensatt
- engagerad
Hur ska du förstå detta?
Dessa är statusar som gäller för filerna som innehåller vår kod:- En fil som har skapats men ännu inte lagts till i förvaret har statusen "ospårad".
- När vi gör ändringar i filer som redan har lagts till i Git-förvaret, är deras status "modifierad".
- Bland filerna som vi har ändrat väljer vi de som vi behöver, och dessa klasser ändras till "stadium"-status.
- En commit skapas från förberedda filer i stegvis tillstånd och går in i Git-förvaret. Efter det finns det inga filer med statusen "iscenesatt". Men det kan fortfarande finnas filer vars status är "modifierad".
![Komma igång med Git: en omfattande guide för nybörjare - 4](https://cdn.codegym.cc/images/article/40d913be-0717-4612-9ad3-4ef73e1bb344/512.jpeg)
Vad är ett åtagande?
En commit är huvudhändelsen när det kommer till versionskontroll. Den innehåller alla ändringar som gjorts sedan commit började. Commits är länkade ihop som en enkellänkad lista. Mer specifikt: Det finns en första commit. När den andra commit skapas vet den vad som kommer efter den första. Och på detta sätt kan information spåras. En commit har också sin egen information, så kallad metadata:- commits unika identifierare, som kan användas för att hitta den
- namnet på uppdragets författare, som skapade det
- det datum då åtagandet skapades
- en kommentar som beskriver vad som gjordes under commit
![Komma igång med Git: en omfattande guide för nybörjare - 5](https://cdn.codegym.cc/images/article/4efaf389-07d9-49ac-bb68-0ceb410bc868/512.jpeg)
Vad är en gren?
En gren är en pekare till någon commit. Eftersom en commit vet vilken commit som föregår den, när en gren pekar på en commit, gäller alla de tidigare commits också för den. Följaktligen kan vi säga att du kan ha så många grenar du vill som pekar på samma commit. Arbete sker i grenar, så när en ny commit skapas, flyttar grenen sin pekare till den senaste commit.Komma igång med Git
Du kan arbeta med ett lokalt arkiv ensamt såväl som med ett fjärranslutet. För att öva de nödvändiga kommandona kan du begränsa dig till det lokala förrådet. Den lagrar bara all information om projektet lokalt i .git-mappen. Om vi pratar om fjärrförvaret, så lagras all information någonstans på fjärrservern: endast en kopia av projektet lagras lokalt. Ändringar som görs i din lokala kopia kan skickas (git push) till fjärrförvaret. I vår diskussion här och nedan pratar vi om att arbeta med Git i konsolen. Naturligtvis kan du använda någon form av GUI-baserad lösning (till exempel IntelliJ IDEA), men först bör du ta reda på vilka kommandon som körs och vad de betyder.Arbeta med Git i ett lokalt arkiv
Därefter föreslår jag att du följer med och utför alla steg som jag gjorde när du läste artikeln. Detta kommer att förbättra din förståelse och behärskning av materialet. Nåväl, god aptit! :) För att skapa ett lokalt arkiv måste du skriva:
git init
![Komma igång med Git: en omfattande guide för nybörjare - 6](https://cdn.codegym.cc/images/article/48de2e66-2655-48d9-acad-0a13de2219a7/800.jpeg)
git status
![Komma igång med Git: en omfattande guide för nybörjare - 7](https://cdn.codegym.cc/images/article/e06c3a0d-8508-45bb-8e69-9d594a0986f1/800.jpeg)
- git add -A — lägg till alla filer till statusen "stadium".
- git add . — lägg till alla filer från den här mappen och alla undermappar. I huvudsak är detta samma som den föregående
- git add <filnamn> — lägger till en specifik fil. Här kan du använda reguljära uttryck för att lägga till filer enligt något mönster. Till exempel, git add *.java: Detta betyder att du bara vill lägga till filer med java-tillägget.
git add *.txt
För att kontrollera status använder vi kommandot som vi redan känner till:
git status
![Komma igång med Git: en omfattande guide för nybörjare - 8](https://cdn.codegym.cc/images/article/2237218c-212e-420e-9310-1087eb0ffdaa/800.jpeg)
git commit -m "all txt files were added to the project"
![Komma igång med Git: en omfattande guide för nybörjare - 9](https://cdn.codegym.cc/images/article/b9b67c35-5763-459f-8981-d9a875510e4f/800.jpeg)
git log
![Komma igång med Git: en omfattande guide för nybörjare - 10](https://cdn.codegym.cc/images/article/e7306161-c798-40f2-9a5f-39aacf0b09ee/800.jpeg)
git status
![Komma igång med Git: en omfattande guide för nybörjare - 11](https://cdn.codegym.cc/images/article/bc3ca37d-7017-4416-aab7-c28afef0d729/800.jpeg)
git status
![Komma igång med Git: en omfattande guide för nybörjare - 12](https://cdn.codegym.cc/images/article/12ff5466-87cf-4132-b881-6a8f636aee5e/800.jpeg)
git diff
![Komma igång med Git: en omfattande guide för nybörjare - 13](https://cdn.codegym.cc/images/article/dd8c0ea3-99f1-491a-9f25-d9186ab057e4/800.jpeg)
git add test_resource.txt
git commit -m "added hello word! to test_resource.txt"
För att titta på alla åtaganden, skriv:
git log
![Komma igång med Git: en omfattande guide för nybörjare - 14](https://cdn.codegym.cc/images/article/2401b76c-ec69-456c-b2bb-4329ae15ae96/800.jpeg)
git add GitTest.java
git commit -m "added GitTest.java"
git status
![Komma igång med Git: en omfattande guide för nybörjare - 15](https://cdn.codegym.cc/images/article/810485d7-307e-43dc-bc7d-a86f45910cb0/800.jpeg)
Arbetar med .gitignore
Det är klart att vi bara vill behålla källkoden ensam, och inget annat, i förvaret. Så vad mer kan det finnas? Åtminstone kompilerade klasser och/eller filer genererade av utvecklingsmiljöer. För att säga åt Git att ignorera dem måste vi skapa en speciell fil. Gör så här: skapa en fil som heter .gitignore i projektets rot. Varje rad i den här filen representerar ett mönster att ignorera. I det här exemplet kommer .gitignore-filen att se ut så här:
```
*.class
target/
*.iml
.idea/
```
Låt oss ta en titt:
- Den första raden är att ignorera alla filer med tillägget .class
- Den andra raden är att ignorera mappen "mål" och allt den innehåller
- Den tredje raden är att ignorera alla filer med tillägget .iml
- Den fjärde raden är att ignorera mappen .idea
git status
![Komma igång med Git: en omfattande guide för nybörjare - 16](https://cdn.codegym.cc/images/article/57aa8dbf-e06a-491f-a9cb-cd79316eca07/800.jpeg)
![Komma igång med Git: en omfattande guide för nybörjare - 17](https://cdn.codegym.cc/images/article/8c16c33a-4f62-4886-b54b-97394ee68fd3/800.jpeg)
git add .gitignore
git commit -m "added .gitignore file"
Och nu sanningens ögonblick: vi har en kompilerad klass GitTest.class som är "untracked", som vi inte ville lägga till i Git-förvaret. Nu bör vi se effekterna av .gitignore-filen:
git status
![Komma igång med Git: en omfattande guide för nybörjare - 18](https://cdn.codegym.cc/images/article/6ac8cab7-ee6b-45cf-8840-e2614d113a76/800.jpeg)
Jobbar med grenar och så
Naturligtvis är det obekvämt att arbeta i bara en gren för ensamma utvecklare, och det är omöjligt när det finns mer än en person i ett team. Det är därför vi har filialer. Som jag sa tidigare är en gren bara en rörlig pekare till commits. I den här delen kommer vi att utforska att arbeta i olika grenar: hur man slår ihop förändringar från en gren till en annan, vilka konflikter som kan uppstå och mycket mer. För att se en lista över alla grenar i förvaret och förstå vilken du befinner dig i måste du skriva:
git branch -a
![Komma igång med Git: en omfattande guide för nybörjare - 19](https://cdn.codegym.cc/images/article/45b0a983-dbe9-4ea8-9cb7-ab51fa5fde80/800.jpeg)
- skapa en ny filial baserat på den vi är i (99% av fallen)
- skapa en filial baserat på ett specifikt åtagande (1 % av fallen)
Låt oss skapa en gren baserat på en specifik commit
Vi förlitar oss på commitens unika identifierare. För att hitta den skriver vi:
git log
![Komma igång med Git: en omfattande guide för nybörjare - 20](https://cdn.codegym.cc/images/article/7f01930c-e706-47a0-a908-d5c286925faa/800.jpeg)
git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
En gren skapas med endast de två första commits från mastergrenen. För att verifiera detta ser vi först till att byta till en annan filial och tittar på antalet commits där:
git status
git log
![Komma igång med Git: en omfattande guide för nybörjare - 21](https://cdn.codegym.cc/images/article/707b0ad4-7b1a-4c54-a3c7-5b4c5e4994ab/800.jpeg)
git branch -a
![Komma igång med Git: en omfattande guide för nybörjare - 22](https://cdn.codegym.cc/images/article/afbd0ea0-4564-48e6-afa9-ca055ce9fc61/800.jpeg)
Låt oss skapa en gren baserat på den nuvarande
Det andra sättet att skapa en gren är att skapa den från en annan. Jag vill skapa en gren baserad på mastergrenen. Först måste jag byta till det, och nästa steg är att skapa en ny. Låt oss ta en titt:- git checkout master — växla till mastergrenen
- git status — verifiera att vi faktiskt är i mastergrenen
![Komma igång med Git: en omfattande guide för nybörjare - 23](https://cdn.codegym.cc/images/article/85a8c266-4ee6-44ae-91d7-8cb43fd3aae9/800.jpeg)
git checkout -b feature/update-txt-files
![Komma igång med Git: en omfattande guide för nybörjare - 24](https://cdn.codegym.cc/images/article/0e277473-27e5-4109-96ff-4e7471c1939c/800.jpeg)
Konfliktlösning
Innan vi utforskar vad en konflikt är måste vi prata om att slå samman en gren till en annan. Den här bilden skildrar processen att slå samman en gren till en annan:![Komma igång med Git: en omfattande guide för nybörjare - 25](https://cdn.codegym.cc/images/article/1278634a-477e-4f47-ac25-5fd5dbcdd78d/512.jpeg)
![Komma igång med Git: en omfattande guide för nybörjare - 26](https://cdn.codegym.cc/images/article/2b3b68bc-98fa-426b-ba18-aeac8386dae2/800.jpeg)
git add *.txt
git commit -m "updated txt files"
git log
![Komma igång med Git: en omfattande guide för nybörjare - 27](https://cdn.codegym.cc/images/article/480108fb-4694-4bd2-bd60-249459f47342/800.jpeg)
git checkout master
git merge feature/update-txt-files
git log
![Komma igång med Git: en omfattande guide för nybörjare - 28](https://cdn.codegym.cc/images/article/51a026f9-0f3d-4d06-8b6d-411fbe7df1c1/800.jpeg)
git branch -D feature/update-txt-files
Allt är klart än så länge, eller hur? Låt oss komplicera situationen: låt oss nu säga att du måste ändra txt-filen igen. Men nu kommer den här filen att ändras i mastergrenen också. Det kommer med andra ord att förändras parallellt. Git kommer inte att kunna ta reda på vad vi ska göra när vi vill slå samman vår nya kod till mastergrenen. Nu går vi! Vi skapar en ny gren baserad på master, gör ändringar i text_resource.txt och skapar en commit för detta arbete:
git checkout -b feature/add-header
... we make changes to the file
![Komma igång med Git: en omfattande guide för nybörjare - 29](https://cdn.codegym.cc/images/article/9e25fdf0-56c1-48fa-aac4-7cb5e269476a/800.jpeg)
git add *.txt
git commit -m "added header to txt"
![Komma igång med Git: en omfattande guide för nybörjare - 30](https://cdn.codegym.cc/images/article/ad86777a-fc95-41f1-8168-9741025b35df/800.jpeg)
git checkout master
… we updated test_resource.txt
![Komma igång med Git: en omfattande guide för nybörjare - 31](https://cdn.codegym.cc/images/article/834a8af7-f699-45aa-8dce-fd2684f6843a/800.jpeg)
git add test_resource.txt
git commit -m "added master header to txt"
Och nu den mest intressanta punkten: vi måste slå samman ändringar från grenen feature/add-header till master. Vi är i mastergrenen, så vi behöver bara skriva:
git merge feature/add-header
Men resultatet kommer att bli en konflikt i filen test_resource.txt: ![Komma igång med Git: en omfattande guide för nybörjare - 32](https://cdn.codegym.cc/images/article/50de1369-6a22-48d0-979f-ad167518e177/800.jpeg)
![Komma igång med Git: en omfattande guide för nybörjare - 33](https://cdn.codegym.cc/images/article/dc31c147-205b-4103-8297-b0e7bf321301/800.jpeg)
- Ändringarna som fanns på den här raden i mastergrenen finns mellan "<<<<<<< HEAD" och "========".
- Ändringarna som fanns i grenen feature/add-header finns mellan "=======" och ">>>>>>> feature/add-header”.
![Komma igång med Git: en omfattande guide för nybörjare - 34](https://cdn.codegym.cc/images/article/0c0d2c2b-050b-4653-9b70-a12cf3d0c4a9/800.jpeg)
git status
![Komma igång med Git: en omfattande guide för nybörjare - 35](https://cdn.codegym.cc/images/article/02a316f3-d70c-4cd0-87c1-9cb8cf9afb99/800.jpeg)
git add *.txt
![Komma igång med Git: en omfattande guide för nybörjare - 36](https://cdn.codegym.cc/images/article/5a0f94d6-63a1-4a9e-8f23-0bb53c0fcb0b/800.jpeg)
git commit
![Komma igång med Git: en omfattande guide för nybörjare - 37](https://cdn.codegym.cc/images/article/7b356e97-0738-4cd7-816e-58c8ab6d753b/800.jpeg)
Arbeta med fjärrlager
Det sista steget är att ta reda på några fler kommandon som behövs för att fungera med fjärrförvaret. Som jag sa, ett fjärrlager är någon plats där förvaret lagras och från vilket du kan klona det. Vilken typ av fjärrlager finns det? Exempel:-
GitHub är den största lagringsplattformen för repositories och samarbetsutveckling. Jag har redan beskrivit det i tidigare artiklar.
Följ mig på GitHub . Jag visar ofta upp mitt arbete där inom de områden som jag studerar för arbete. -
GitLab är ett webbaserat verktyg för DevOps- livscykeln med öppen källkod . Det är ett Git -baserat system för att hantera kodlager med sin egen wiki, buggspårningssystem , CI/CD-pipeline och andra funktioner.
Efter nyheten att Microsoft köpte GitHub, duplicerade vissa utvecklare sina projekt i GitLab. -
BitBucket är en webbtjänst för projekthosting och samarbetsutveckling baserad på Mercurial och Git versionskontrollsystem. En gång hade den en stor fördel gentemot GitHub genom att den erbjöd gratis privata arkiv. Förra året introducerade GitHub också denna möjlighet för alla gratis.
-
Och så vidare…
git clone https://github.com/romankh3/git-demo
Det finns nu en komplett lokal kopia av projektet. För att vara säker på att den lokala kopian av projektet är den senaste måste du dra projektet genom att skriva:
git pull
![Komma igång med Git: en omfattande guide för nybörjare - 38](https://cdn.codegym.cc/images/article/1198a76f-4f1f-46e3-ba6f-bf86200341fa/800.jpeg)
![Komma igång med Git: en omfattande guide för nybörjare - 39](https://cdn.codegym.cc/images/article/60f8f764-79f5-4db8-8750-4da52035c0e5/800.jpeg)
git add test_resource.txt
git commit -m "prepared txt for pushing"
Kommandot för att skicka detta till fjärrförvaret är:
git push
![Komma igång med Git: en omfattande guide för nybörjare - 40](https://cdn.codegym.cc/images/article/b56fef05-fccc-4372-b4d0-f5d59fde20bd/800.jpeg)
Användbar länk
- Officiell Git-dokumentation . Jag rekommenderar det som referens.
GO TO FULL VERSION