Вместо въведение
Здравейте! Днес ще говорим за система за контрол на версиите, а именно Git.![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 1](https://cdn.codegym.cc/images/article/d6ece90f-4588-42d0-9371-c41697f8201d/800.jpeg)
Основи на Git
Git е разпределена система за контрол на версиите за нашия code. Защо ни трябва? Разпределените екипи се нуждаят от няHowва система за управление на тяхната работа. Необходимо е да се проследят промените, които настъпват във времето. Тоест трябва да можем да видим стъпка по стъпка кои файлове са се променor и How. Това е особено важно, когато проучвате Howво се е променило в контекста на една задача, което прави възможно отмяната на промените.Инсталиране на Git
Нека инсталираме Java на вашия компютър.Инсталиране на Windows
Както обикновено, трябва да изтеглите и стартирате exe файл. Тук всичко е просто: кликнете върху първата връзка в Google , изпълнете инсталацията и това е всичко. За да направим това, ще използваме bash конзолата, предоставена от Windows. В Windows трябва да стартирате Git Bash. Ето How изглежда в менюто "Старт":![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 2](https://cdn.codegym.cc/images/article/7aa26c09-a314-4e83-8b06-4e886ac37a89/512.jpeg)
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 3](https://cdn.codegym.cc/images/article/8bcda11a-96b8-482c-a20e-19df81d26a49/800.jpeg)
Инсталиране на Linux
Обикновено Git е част от Linux дистрибуции и вече е инсталиран, тъй като това е инструмент, който първоначално е написан за разработка на Linux ядро. Но има ситуации, когато не е така. За да проверите, трябва да отворите терминал и да напишете: git --version. Ако получите разбираем отговор, тогава нищо не трябва да се инсталира. Отворете терминал и инсталирайте Git на Ubuntu . Работя върху Ubuntu, така че мога да ви кажа Howво да напишете за него: sudo apt-get install git.Инсталиране на macOS
Тук също първо трябва да проверите дали Git вече е там. Ако го нямате, тогава най-лесният начин да го получите е да изтеглите най-новата version тук . Ако Xcode е инсталиран, тогава Git определено ще се инсталира автоматично.Настройки на Git
Git има потребителски настройки за потребителя, който ще изпрати работа. Това има смисъл и е необходимо, защото Git взема тази информация за полето Author, когато се създава ангажимент. Настройте потребителско име и парола за всички ваши проекти, като изпълните следните команди:
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com
Ако трябва да промените автора за конкретен проект, можете да премахнете "--global". Това ще ни даде следното:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
Малко теория...
За да се потопим в темата, трябва да ви запознаем с няколко нови думи и действия...- git хранorще
- ангажирам
- клон
- сливане
- конфликти
- дръпнете
- тласък
- How да игнорирате някои файлове (.gitignore)
Статуси в Git
Git има няколко статуи, които трябва да бъдат разбрани и запомнени:- непроследен
- модифициран
- инсцениран
- ангажирани
Как трябва да разбирате това?
Това са статуси, които се прилагат към файловете, съдържащи нашия code:- Файл, който е създаден, но все още не е добавен към хранorщето, има статус „непроследен“.
- Когато правим промени във файлове, които вече са добавени към хранorщето на Git, тогава техният статус е „променен“.
- Сред файловете, които сме променor, ние избираме тези, от които се нуждаем, и тези класове се променят в състояние "поетапно".
- Създава се ангажимент от подготвени файлове в етапно състояние и отива в хранorщето на Git. След това няма файлове със статус "поетапно". Но все още може да има файлове, чийто статус е "променен".
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 4](https://cdn.codegym.cc/images/article/40d913be-0717-4612-9ad3-4ef73e1bb344/512.jpeg)
Какво е ангажимент?
Комитът е основното събитие, когато става дума за контрол на версиите. Той съдържа всички промени, напequalsи от началото на ангажимента. Ангажиментите са свързани заедно като единично свързан списък. По-конкретно: има първи ангажимент. Когато се създаде вторият комит, той знае Howво идва след първия. И по този начин информацията може да бъде проследена. Комитът също има своя собствена информация, така наречените метаданни:- уникалният идентификатор на комита, който може да се използва за намирането му
- името на автора на комита, който го е създал
- датата, на която е създаден ангажиментът
- коментар, който описва Howво е напequalsо по време на ангажимента
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 5](https://cdn.codegym.cc/images/article/4efaf389-07d9-49ac-bb68-0ceb410bc868/512.jpeg)
Какво е клон?
Клонът е указател към няHowъв ангажимент. Тъй като един комит знае кой комит го предхожда, когато клон сочи към комит, всички тези предишни ангажименти също се прилагат към него. Съответно бихме могли да кажем, че можете да имате колкото искате разклонения, сочещи към един и същи ангажимент. Работата се извършва в клонове, така че когато се създаде нов комит, клонът премества показалеца си към по-новия комит.Първи стъпки с Git
Можете да работите Howто с локално хранorще, така и с отдалечено. За да практикувате необходимите команди, можете да се ограничите до локалното хранorще. Той само съхранява цялата информация за проекта локално в папката .git. Ако говорим за отдалеченото хранorще, тогава цялата информация се съхранява някъде на отдалечения сървър: само копие на проекта се съхранява локално. Промените, напequalsи във вашето локално копие, могат да бъдат изпратени (git push) към отдалеченото хранorще. В нашата дискусия тук и по-долу говорим за работа с Git в конзолата. Разбира се, можете да използвате няHowво решение, базирано на GUI (например IntelliJ IDEA), но първо трябва да разберете Howви команди се изпълняват и Howво означават.Работа с Git в локално хранorще
След това ви предлагам да следвате и да изпълните всички стъпки, които направих, докато четехте статията. Това ще подобри вашето разбиране и усвояване на материала. Е, приятен апетит! :) За да създадете локално хранorще, трябва да напишете:
git init
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 6](https://cdn.codegym.cc/images/article/48de2e66-2655-48d9-acad-0a13de2219a7/800.jpeg)
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 7](https://cdn.codegym.cc/images/article/e06c3a0d-8508-45bb-8e69-9d594a0986f1/800.jpeg)
- git add -A — добавяне на всички файлове към статус „поетапно“.
- git add. — добавете всички файлове от тази папка и всички подпапки. По същество това е същото като предишното
- git add <име на файл> — добавя конкретен файл. Тук можете да използвате регулярни изрази, за да добавяте файлове според няHowъв модел. Например git add *.java: Това означава, че искате да добавяте само файлове с разширение java.
git add *.txt
За да проверим състоянието, използваме вече известната ни команда:
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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"
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 9](https://cdn.codegym.cc/images/article/b9b67c35-5763-459f-8981-d9a875510e4f/800.jpeg)
git log
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 10](https://cdn.codegym.cc/images/article/e7306161-c798-40f2-9a5f-39aacf0b09ee/800.jpeg)
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 11](https://cdn.codegym.cc/images/article/bc3ca37d-7017-4416-aab7-c28afef0d729/800.jpeg)
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 12](https://cdn.codegym.cc/images/article/12ff5466-87cf-4132-b881-6a8f636aee5e/800.jpeg)
git diff
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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"
За да видите всички ангажименти, напишете:
git log
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 15](https://cdn.codegym.cc/images/article/810485d7-307e-43dc-bc7d-a86f45910cb0/800.jpeg)
Работа с .gitignore
Ясно е, че искаме да запазим само изходния code и нищо друго в хранorщето. И така, Howво друго може да има? Като минимум компorрани класове и/or файлове, генерирани от среди за разработка. За да кажем на Git да ги игнорира, трябва да създадем специален файл. Направете следното: създайте файл с име .gitignore в корена на проекта. Всеки ред в този файл представлява модел, който трябва да се игнорира. В този пример файлът .gitignore ще изглежда така:
```
*.class
target/
*.iml
.idea/
```
Нека да разгледаме:
- Първият ред е да игнорирате всички файлове с разширение .class
- Вторият ред е да игнорирате папката "target" и всичко, което съдържа
- Третият ред е да игнорирате всички файлове с разширение .iml
- Четвъртият ред е да игнорирате папката .idea
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 16](https://cdn.codegym.cc/images/article/57aa8dbf-e06a-491f-a9cb-cd79316eca07/800.jpeg)
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 17](https://cdn.codegym.cc/images/article/8c16c33a-4f62-4886-b54b-97394ee68fd3/800.jpeg)
git add .gitignore
git commit -m "added .gitignore file"
И сега моментът на истината: имаме компorран клас GitTest.class, който е "непроследен", който не искахме да добавим към хранorщето на Git. Сега трябва да видим ефектите от file .gitignore:
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 18](https://cdn.codegym.cc/images/article/6ac8cab7-ee6b-45cf-8840-e2614d113a76/800.jpeg)
Работа с клонове и други подобни
Естествено, работата само в един клон е неудобна за самотни разработчици и е невъзможна, когато има повече от един човек в екип. Ето защо имаме клонове. Както казах по-рано, клонът е просто подвижен указател към ангажименти. В тази част ще разгледаме работата в различни клонове: How да обединим промените от един клон в друг, Howви конфликти могат да възникнат и много повече. За да видите списък с всички клонове в хранorщето и да разберете в кой се намирате, трябва да напишете:
git branch -a
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 19](https://cdn.codegym.cc/images/article/45b0a983-dbe9-4ea8-9cb7-ab51fa5fde80/800.jpeg)
- създайте нов клон въз основа на този, в който се намираме (99% от случаите)
- създаване на клон въз основа на конкретен ангажимент (1% от случаите)
Нека създадем клон въз основа на конкретен ангажимент
Ще разчитаме на уникалния идентификатор на ангажимента. За да го намерим, пишем:
git log
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 20](https://cdn.codegym.cc/images/article/7f01930c-e706-47a0-a908-d5c286925faa/800.jpeg)
git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
Създава се клон само с първите два комита от главния клон. За да проверим това, първо се уверяваме, че сме превключor към друг клон и гледаме броя на ангажиментите там:
git status
git log
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 21](https://cdn.codegym.cc/images/article/707b0ad4-7b1a-4c54-a3c7-5b4c5e4994ab/800.jpeg)
git branch -a
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 22](https://cdn.codegym.cc/images/article/afbd0ea0-4564-48e6-afa9-ca055ce9fc61/800.jpeg)
Нека създадем клон на базата на текущия
Вторият начин за създаване на клон е да го създадете от друг. Искам да създам клон на базата на главния клон. Първо трябва да премина към него и следващата стъпка е да създам нов. Нека да разгледаме:- git checkout master — превключване към главния клон
- git status — проверете дали наистина сме в главния клон
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 23](https://cdn.codegym.cc/images/article/85a8c266-4ee6-44ae-91d7-8cb43fd3aae9/800.jpeg)
git checkout -b feature/update-txt-files
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 24](https://cdn.codegym.cc/images/article/0e277473-27e5-4109-96ff-4e7471c1939c/800.jpeg)
Разрешаване на конфликти
Преди да проучим Howво е конфликт, трябва да поговорим за сливането на един клон в друг. Тази картина изобразява процеса на сливане на един клон в друг:![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 25](https://cdn.codegym.cc/images/article/1278634a-477e-4f47-ac25-5fd5dbcdd78d/512.jpeg)
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 28](https://cdn.codegym.cc/images/article/51a026f9-0f3d-4d06-8b6d-411fbe7df1c1/800.jpeg)
git branch -D feature/update-txt-files
Дотук всичко е ясно, нали? Нека усложним ситуацията: сега да кажем, че трябва да промените txt file отново. Но сега този файл ще бъде променен и в главния клон. С други думи, ще се променя паралелно. Git няма да може да разбере Howво да прави, когато искаме да обединим нашия нов code в главния клон. Да тръгваме! Ще създадем нов клон на базата на master, ще направим промени в text_resource.txt и ще създадем ангажимент за тази работа:
git checkout -b feature/add-header
... we make changes to the file
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 29](https://cdn.codegym.cc/images/article/9e25fdf0-56c1-48fa-aac4-7cb5e269476a/800.jpeg)
git add *.txt
git commit -m "added header to txt"
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 30](https://cdn.codegym.cc/images/article/ad86777a-fc95-41f1-8168-9741025b35df/800.jpeg)
git checkout master
… we updated test_resource.txt
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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"
И сега най-интересният момент: трябва да обединим промените от клона за функция/добавяне на заглавка към master. Ние сме в главния клон, така че трябва само да напишем:
git merge feature/add-header
Но резултатът ще бъде конфликт във file test_resource.txt: ![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 32](https://cdn.codegym.cc/images/article/50de1369-6a22-48d0-979f-ad167518e177/800.jpeg)
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 33](https://cdn.codegym.cc/images/article/dc31c147-205b-4103-8297-b0e7bf321301/800.jpeg)
- Промените, които бяха на този ред в главния клон, се намират между "<<<<<<< HEAD" и "=======".
- Промените, които бяха в клона за функция/добавяне на заглавка, се намират между "=======" и ">>>>>>> функция/добавяне на заглавка".
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 34](https://cdn.codegym.cc/images/article/0c0d2c2b-050b-4653-9b70-a12cf3d0c4a9/800.jpeg)
git status
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 35](https://cdn.codegym.cc/images/article/02a316f3-d70c-4cd0-87c1-9cb8cf9afb99/800.jpeg)
git add *.txt
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 36](https://cdn.codegym.cc/images/article/5a0f94d6-63a1-4a9e-8f23-0bb53c0fcb0b/800.jpeg)
git commit
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 37](https://cdn.codegym.cc/images/article/7b356e97-0738-4cd7-816e-58c8ab6d753b/800.jpeg)
Работа с отдалечени хранorща
Последната стъпка е да разберете още няколко команди, които са необходими за работа с отдалеченото хранorще. Както казах, отдалеченото хранorще е място, където се съхранява хранorщето и от което можете да го клонирате. Какъв вид отдалечени хранorща има? Примери:-
GitHub е най-голямата платформа за съхранение на хранorща и съвместна разработка. Вече го описах в предишни статии.
Последвайте ме в GitHub . Често показвам работата си там в онези области, които уча за работа. -
GitLab е уеб базиран инструмент за жизнения цикъл на DevOps с отворен code . Това е Git -базирана система за управление на codeови хранorща със собствена wiki, система за проследяване на грешки , CI/CD конвейер и други функции.
След новината, че Microsoft купи GitHub, някои разработчици дублираха проектите си в GitLab. -
BitBucket е уеб услуга за хостинг на проекти и съвместна разработка, базирана на системите за контрол на версиите Mercurial и Git. По едно време имаше голямо предимство пред GitHub, тъй като предлагаше безплатни частни хранorща. Миналата година GitHub също представи тази възможност за всички безплатно.
-
И така нататък…
git clone https://github.com/romankh3/git-demo
Вече има пълно локално копие на проекта. За да сте сигурни, че локалното копие на проекта е най-новото, трябва да изтеглите проекта, като напишете:
git pull
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 38](https://cdn.codegym.cc/images/article/1198a76f-4f1f-46e3-ba6f-bf86200341fa/800.jpeg)
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 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"
Командата за изпращане на това към отдалеченото хранorще е:
git push
![Първи стъпки с Git: изчерпателно ръководство за начинаещи - 40](https://cdn.codegym.cc/images/article/b56fef05-fccc-4372-b4d0-f5d59fde20bd/800.jpeg)
Полезен линк
- Официална Git documentация . Препоръчвам го като ориентир.
GO TO FULL VERSION