Git

Урок за Git за начинаещи

Урок за Git за начинаещи

Разработката на софтуер е съвместна работа. Като софтуерен инженер трябва да споделяте работата си с другите. Но споделянето на код и сътрудничеството могат да се усложнят. Трудно е да се проследят различни промени, които се случват по време на жизнения цикъл на софтуера. Така че екипите за разработка разчитат на инструменти за контрол на версиите, за да помогнат в процеса на сътрудничество със софтуера. Git е един от най-известните инструменти за контрол на версиите в софтуерната индустрия.

Бакшиш: В този урок ще научите как да използвате основите на Git. Всеки раздел завършва с няколко въпроса. Можете да прочетете въпросите, преди да започнете да четете раздела. Това ще ви помогне да разберете и обърнете внимание на важните моменти.

Забавлявайте се, изучавайки Git!

Git: Кратък преглед

Git е разпределена система за контрол на версиите. Той проследява всички промени, които правите във вашите файлове и папки. Улеснява запазването на незавършената работа. Ако има проблем, можете лесно да проверите по-ранна версия на файла или папката. Ако е необходимо, можете дори да върнете цялата си кодова база към по-стара версия.

Разработката на Git стартира през 2005г. Групата на ядрото на Linux, използвана за поддържане на техния код в BitKeeper, собствена разпределена система за контрол на версиите. BitKeeper обаче оттегли безплатното си използване на продукта. Така Линус Торвалдс, създателят и основен разработчик на Linux, проектира нова система за контрол на разпределените версии с отворен код, която да отговаря на изискванията на общността за разработка на Linux. И се роди Гит.

Като разпределена система за контрол на версиите, Git не изисква централизиран орган, който да следи кода. По-старите централизирани контроли за версии като CVS, SVN или Perforce изискват централни сървъри, за да поддържат историята на промените. Git може да следи всички промени локално и да работи равнопоставено. Така че е по-гъвкав от централизираните системи.

Въпроси:

Инсталиране на Git

За Linux системи инсталирането на Git е лесно. Ако използвате дистрибуция, базирана на Debian като Ubuntu, можете да използвате apt install:

$ sudo apt инсталира git-all

За Fedora, RHEL или CentOS можете да използвате:

$ sudo dnf инсталирайте git-all

Можете да проверите дали Git е инсталиран, като използвате следната команда:

$ git - версия

Той трябва да ви покаже версията на Git, която сте инсталирали, например:

git версия 2.17.0

След като инсталирате Git, е време да настроите потребителското си име и имейл:

$ git config --global потребител.име "yourusername"
$ git config --global потребител.имейл "[имейл защитен]"

Можете да проверите дали конфигурациите са зададени правилно, като използвате следната команда:

$ git config --list
потребител.name = вашето потребителско име
потребител.имейл = yourusername @ пример.com

Бакшиш: Важно е да настроите потребителя.име и потребител.имейл, защото тези конфигурации се използват за проследяване на вашите промени.

Въпроси

Концептуално разбиране на Git

За да използвате Git, първо трябва да разберете тези четири концепции:

Работната директория, променителната област и хранилището са локални за вашата машина. Отдалеченото хранилище може да бъде всеки друг компютър или сървър. Нека помислим за тези концепции като за четири кутии, които могат да съдържат стандартни документи А1.

Да предположим, че пишете документ на ръка върху хартия А1 на бюрото си. Съхранявате този документ в полето за работна директория. На определен етап от работата си решавате, че сте готови да запазите копие от работата, която вече сте свършили. Затова правите фотокопие на настоящата си хартия и я поставяте в кутията за постановка.

Постановочната кутия е временна зона. Ако решите да изхвърлите фотокопието в индексиращото поле и да го актуализирате с ново копие на работния документ на директорията, няма да има постоянен запис на този инсцениран документ.

Да предположим, че сте почти сигурни, че искате да запазите постоянния запис на документа, който имате, в индексиращото поле. След това правите фотокопие на документа за подреждане и го премествате в полето на хранилището.

Когато го преместите в полето на хранилището, се случват две неща:

  1. Снимка на документа се запазва за постоянно.
  2. Направен е запис на регистрационен файл, който да върви със снимката.

Записът в дневника ще ви помогне да намерите конкретната снимка на вашия документ, ако имате нужда от него в бъдеще.

Сега в полето за локално хранилище имате моментна снимка на вашата работа и запис в дневника. Но това е достъпно само за вас. Така че правите копие на вашия документ за локално хранилище заедно с регистрационния файл и го поставяте в кутия в стаята за доставки на компанията. Сега всеки от вашата компания може да дойде и да направи копие на вашия документ и да го занесе на бюрото си. Кутията в стаята за доставка ще бъде отдалеченото хранилище.

Отдалеченото хранилище е нещо като споделяне на вашия документ чрез Google Docs или Dropbox.

Въпроси:

Вашето първо Git хранилище

След като инсталирате Git, можете да започнете да създавате свои собствени хранилища на Git. В този раздел ще инициализирате вашето Git хранилище.

Да предположим, че работите по проект за уеб разработка. Нека създадем папка, наречена project_helloworld, и променим в директорията:

$ mkdir project_helloworld
$ cd project_helloworld

Можете да кажете на Git да следи тази директория със следната команда:

$ git init

Трябва да видите изход като този:

Инициализирано празно хранилище на Git в / Users / zakh / _work / LearnGIT / git_tutorial /
project_helloworld /.git

Сега всички файлове и папки в project_helloworld ще бъдат проследявани от Git.

Въпроси:

Основни Git команди: състояние, регистрация, добавяне и ангажиране

Командата за състояние показва текущото състояние на вашата работна директория, а командата log показва историята. Нека опитаме командата за състояние:

$ git статус
На клона майстор
Първоначален ангажимент
нищо за ангажиране (създаване / копиране на файлове и използване на "git add" за проследяване)

Резултатът от командата git status казва, че сте в главния клон. Това е клонът по подразбиране, който Git инициализира. (Можете да създадете свои собствени клонове. Повече за клоновете по-късно). Освен това изходът казва, че няма какво да се ангажира.

Нека опитаме командата log:

$ git log
фатално: текущият ви клон 'master' все още няма ангажименти

И така, време е да създадете код. Нека създадем файл, наречен индекс.html:


Моята уеб страница


Здравей свят

Можете да използвате текстовия редактор, за да създадете файла. След като запазите файла, проверете състоянието отново:

$ git статус
На клона майстор
Първоначален ангажимент
Непроследени файлове:
(използвайте "git add ... "да се включи в това, което ще бъде извършено
индекс.html
нищо не е добавено за фиксиране, но не са проследени файлове (използвайте "git add" за проследяване)

Git ви казва, че имате файл, наречен index.html във вашата работна директория, която не е проследена.

Нека се уверим, че индексираме.html се проследява. Ще трябва да използвате командата add:

$ git добавяне на индекс.html

Като алтернатива можете да използвате „.”Възможност за добавяне на всичко в директорията:

$ git add .

Сега нека проверим отново състоянието:

$ git статус
На клона майстор
Първоначален ангажимент
Промени, които трябва да бъдат извършени:
(използвайте "git rm --cached ... "за дезактивиране)
нов файл: индекс.html

Зеленото показва, че индексът.html файл се проследява от Git.

Бакшиш: Както е споменато в инструкциите по-горе, ако използвате командата:

$ git rm --cached индекс.html

Вашият индекс.html ще се върне към непроследен статус. Ще трябва да го добавите отново, за да го върнете към постановка.]

Нека проверим дневника отново:

$ git log
фатално: текущият ви клон 'master' все още няма ангажименти

Така че, въпреки че Git проследява индекса.html, все още няма нищо в хранилището на Git за файла. Нека извършим нашите промени:

$ git commit -m "Индекс за ангажиране.html "
Резултатът трябва да изглежда по следния начин:
[master (root-commit) f136d22] Индекс за ангажиране.html
1 файл е променен, 6 вмъквания (+)
създаване на режим 100644 индекс.html

Текстът в кавичките след „-m“ е коментар, който ще влезе в регистрационния файл. Можете да използвате git commit без “-m”, но след това Git ще отвори текстов редактор с молба да напишете коментарите. По-лесно е просто да поставите коментарите директно в командния ред.

Сега нека проверим нашия регистрационен файл:

$ git log
ангажиране f136d22040ba81686c9522f4ff94961a68751af7
Автор: Zak H
Дата: Пон Юни 4 16:53:42 2018 -0700
Индекс за ангажиране.html

Можете да видите, че показва ангажимент. Успешно сте извършили промените си в локалното хранилище. Ако искате да видите същия дневник по кратък начин, можете да използвате следната команда:

$ git log --oneline
f136d22 Индекс за ангажиране.html

Придвижвайки се напред, ще използваме тази форма на командата log, защото улеснява разбирането на случващото се.

Нека започнем да редактираме индекса.html. Отворете индекса.html файл в редактор и променете реда „Hello world“ на „Hello world! Аз съм!И го запазете. Ако проверите състоянието отново, ще видите, че Git е забелязал, че редактирате файла:

$ git статус
На клона майстор
Непроведени промени за фиксиране:
(използвайте "git add ... "за актуализиране на това, което ще бъде извършено)
(използвайте "git checkout -- ... "за отхвърляне на промените в работната директория)
модифициран: индекс.html
не са добавени промени за фиксиране (използвайте "git add" и / или "git commit -a")

Промяната все още е във вашата работна директория. Трябва да го избутате до мястото на поставяне. Използвайте командата за добавяне, която сте използвали преди:

$ git add .

Проверете състоянието отново:

$ git статус
На клона майстор
Промени, които трябва да бъдат извършени:
(използвайте "git reset HEAD ... "за дезактивиране)
модифициран: индекс.html

Сега промените ви са в зоната за подреждане. Можете да го предадете на хранилището за постоянно съхранение:

$ git commit -m "Модифициран индекс.html към по-щастливо съобщение "
[master 0586662] Модифициран индекс.html към по-щастливо съобщение
1 файл е променен, 1 вмъкване (+), 1 изтриване (-)

Можете да проверите дневника за постоянните си промени:

$ git log --oneline
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html

В този раздел сте се научили да използвате команди за състояние, регистриране, добавяне и ангажиране, за да следите вашите документи в Git.

Въпроси:

  • Какво прави git status?
  • Какво прави git log?
  • Какво прави git add?
  • Какво прави git commit?

Връщане към по-стари файлове с помощта на Checkout

Когато фиксирате файл в Git, той създава уникален хеш за всяко фиксиране. Можете да ги използвате като идентификатори, за да се върнете към по-стара версия.

Да предположим, че искате да се върнете към по-ранната си версия на индекса.html. Първо, нека разгледаме индекса.html в текущото състояние:

индекс $ cat.html

Моята уеб страница


Здравей свят! Аз съм!

Можете да видите, че имате по-новата версия („Здравей, свят! Аз съм!”). Нека проверим дневника:

$ git log --oneline
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html

Хешът за предишната версия беше f136d22 („Здравей, свят“).  Можете да използвате командата за плащане, за да стигнете до тази версия:

$ git checkout f136d22
Забележка: проверете „f136d22“.
Вие сте в състояние на „откъснат HEAD“. Можете да се огледате, да направите експериментални промени
и ги ангажирате и можете да отхвърлите всички ангажименти, които сте направили в това състояние
без да повлияете на клонове, като извършите друга проверка.
Ако искате да създадете нов клон, за да запазите създадените от вас ангажименти, можете
направете го (сега или по-късно), като използвате -b с командата за плащане отново. Пример:
git checkout -b
HEAD вече е на f136d22 ... Индекс за извършване.html

Ако погледнете съдържанието на индекса.html, ще видите:

индекс $ cat.html

Моята уеб страница


Здравей свят

Има само „Здравей, свят“. Така че вашият индекс.html се промени на по-старата версия. Ако проверите състоянието:

$ git статус
ГЛАВА отделена при f136d22
няма нищо за ангажиране, работната директория е чиста

Git основно ви казва, че HEAD не е в най-скорошния коммит. Можете да се върнете към най-новия коммит, като проверите главния клон, като използвате следната команда:

$ git checkout master
Предишната позиция на HEAD беше f136d22 ... Индекс за ангажиране.html
Превключено към клон „master“

Сега, ако проверите състоянието:

$ git статус
На клона майстор
няма нищо за ангажиране, работната директория е чиста

Червеното предупреждение е изчезнало. Също така, ако проверите индекса си.html, трябва да се върнете към последната версия:

индекс $ cat.html

Моята уеб страница

Здравей свят! Аз съм!

Командата за плащане ви отвежда до различни състояния. Ще научим повече за плащане в следващия раздел.

Въпроси:

  • Как използвате командата git checkout, за да отидете на по-стара версия на файл?
  • Как използвате git checkout, за да се върнете към последната версия на файла?

Плащане, разклоняване и обединяване

Разклоняването е една от най-добрите характеристики на Git. Помага ви да разделите работата си и да експериментирате повече. В други системи за контрол на версиите разклоняването отнема много време и е трудно. Git улесни разклоняването и сливането.

Както забелязахте в командата за състояние, когато създавате ново хранилище на Git, вие сте в главния клон.

$ git статус
На клона майстор
няма нищо за ангажиране, работната директория е чиста

Да предположим, че правите уебсайт за приятеля си Дейвид. Искате да използвате повторно кода на собствения си уебсайт. Разклоняването е чудесно решение. Нека извикаме клона david_website.

Можете да издадете следната команда:

$ git клон david_website

Можете да използвате следната команда, за да видите всички клонове:

$ git клон - списък
david_website
* майстор

Звездата (*) до главния означава, че все още сте в главния клон. Можете да проверите клона на david_website със следната команда:

$ git checkout david_website
Превключено към клон „david_website“

Сега, ако отново проверите списъка с клонове, ще видите:

$ git клон - списък
* david_website
майстор

Така че сте в клона на david_website.

Нека променим индекса.html от „Hello world! Аз съм!”До„ Здравей, свят! Дейвид е!”И след това инсценирайте и го ангажирайте:

$ git add .
$ git commit -m "Променен уебсайт за Дейвид"

Ако проверите дневниците, трябва да видите:

$ git log --oneline
345c0f4 Променен уебсайт за Дейвид
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html

И вашият индексен файл трябва да изглежда така:

индекс $ cat.html

Моята уеб страница


Здравей свят! Дейвид е!

Сега нека проверим главния клон отново:

$ git checkout master
Превключено към клон „master“

Ако проверите състоянието и регистрацията:

$ git статус
На клона майстор
няма нищо за ангажиране, работната директория е чиста
$ git log --oneline
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html

Забележете, че нямате третия си ангажимент в мастър. Тъй като този ангажимент се поддържа само в клона david_website.

Това се случи

Да предположим, че на този етап решите, че не искате да продължите уебсайта си. Просто ще бъдеш разработчикът на Дейвид. Така че искате да обедините промените в клона david_website с главния. От главния клон просто трябва да подадете следните команди (командата за състояние се използва, за да проверите дали сте на правилното място):

$ git статус
На клона майстор
няма нищо за ангажиране, работната директория е чиста
 
$ git merge david_website
Актуализиране на 0586662… 345c0f4
Превъртане напред
индекс.html | 2 +-
1 файл е променен, 1 вмъкване (+), 1 изтриване (-)

Бакшиш: Извличате промени от david_website към master. За да постигнете това, трябва да сте на майстора.

Сега, ако проверите регистрационния файл на главното устройство, виждате, че третата фиксация е там:

$ git log --oneline
345c0f4 Променен уебсайт за Дейвид
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html

Успешно сте обединили клона на david_website в master. И вашият индекс.html за главния клон изглежда идентичен с клона на david_website:

индекс $ cat.html

Моята уеб страница


Здравей свят! Дейвид е!

Можете да запазите клона david_website:

$ git клон --list
david_website
* майстор

Или можете да го изтриете:

$ git клон -d david_website
Изтрит клон david_website (беше 345c0f4).

След изтриването вече не трябва да виждате клона на david_website:

$ git клон - списък
* майстор

Бакшиш: По време на сливане, ако Git не може да се обедини автоматично, това ще ви даде конфликтни грешки при сливане. В този случай трябва ръчно да разрешите проблемите на сливането.

Въпроси:

  • Защо се нуждаете от разклоняване?
  • Как разклонявате и обединявате файлове и папки?

Отдалечено хранилище

Досега цялата ви работа беше местна. Записвате промените си в локално хранилище. Но е време да споделите работата си със света.

Git отдалечено хранилище е основно друго копие на вашето локално хранилище, което може да бъде достъпно от други. Можете да настроите сървър и да го направите отдалечено хранилище. Но повечето хора използват GitHub или Bitbucket за тази цел. Там можете да създавате безплатни публични хранилища, до които всеки може да има достъп.

Нека създадем отдалечено хранилище на GitHub.

Първо, трябва да създадете акаунт в GitHub []. След като имате акаунта, създайте ново хранилище, като използвате бутона „Ново хранилище“. Използвайте “project_website” като име на хранилището (можете да изберете нещо друго, ако искате).

Трябва да видите раздел Код с инструкции като тези:

... или създайте ново хранилище в командния ред

echo "# project_website" >> README.md
git init
git добави README.md
git commit -m "първи ангажимент"
git отдалечено добавяне на произход git @ github.com: yourusername / project_website.git
git push -u master master

Копирайте следната команда „git remote add origin“ и я стартирайте във вашата работна директория:

$ git отдалечено добавяне на произход git @ github.com: yourusername / project_website.git

Забележка: Във вашия случай вашето потребителско име трябва да бъде това, което сте използвали за създаването на вашия акаунт в GitHub.

В горната команда сте инструктирали Git местоположението на отдалеченото хранилище. Командата казва на Git, че „произходът“ за вашата работна директория project_helloworld ще бъде „[имейл защитен]: yourusername / project_website.git ”.

Сега натиснете кода си от главния клон към източника (отдалечено хранилище):

$ git push master master
Преброяване на обекти: 9, готово.
Делта компресия с използване на до 4 нишки.
Компресиране на обекти: 100% (6/6), готово.
Писане на обекти: 100% (9/9), 803 байта | 0 байта / s, готово.
Общо 9 (делта 2), повторно използвана 0 (делта 0)
дистанционно: Разрешаване на делти: 100% (2/2), готово.
За да git @ github.com: yourusername / project_website.git
* [нов клон] master -> master

Ако опресните браузъра си в GitHub, трябва да видите, че индексът.html файлът е там горе. Така вашият код е публичен и други разработчици могат да проверят и модифицират кода в отдалеченото хранилище.

Като разработчик ще работите с код на други хора. Така че си струва да опитате да проверите кода от GitHub.

Да отидем в нова директория, където нямате нищо. От дясната страна на хранилището на GitHub ще забележите бутона „Клониране или изтегляне“. Ако кликнете върху него, той трябва да ви даде SSH адрес. Изпълнете следната команда с SSH адрес:

$ git clone git @ github.com: yourusername / project_website.git

Резултатът трябва да изглежда така:

$ git clone git @ github.com: yourusername / project_website.git
Клониране в 'project_website' ..
дистанционно: Преброяване на обекти: 9, готово.
дистанционно: Компресиране на обекти: 100% (4/4), готово.
дистанционно: Общо 9 (делта 2), повторно използвано 9 (делта 2), пакет повторно използван 0
Получаване на обекти: 100% (9/9), готово.
Разрешаване на делти: 100% (2/2), готово.
Проверка на свързаността ... готово.

Той ще създаде project_website във вашата чиста папка. Ако влезете вътре, трябва да видите индекса.html от вашия project_helloworld.

Така че постигнахте следното:

  • Създадени и направени промени в project_helloworld
  • Качих кода в GitHub в project_website
  • Изтегли кода от GitHub

Нека още един файл от новата работна директория project_website:

$ touch ReadMe.md
$ git add .
$ git commit -m "Добавен ReadMe.md "
$ git push master master

Ако опресните страницата на GitHub project_website, трябва да видите ReadMe.md файл там.

Забележка: Когато изтегляте код от GitHub, работната директория автоматично знае произхода. Не е нужно да го дефинирате с командата “git remote add origin”.

Въпроси:

  • Защо трябва да използвате отдалечени хранилища?
  • Как да настроите текущото си локално хранилище за свързване с отдалеченото хранилище?
  • Как клонирате отдалечени хранилища на вашия локален компютър?

Заключение

Можете да намерите повече информация за всички команди в Git docs []. Въпреки че има налични инструменти на Git UI, командният ред е най-добрият начин за овладяване на Git. Това ще ви даде по-здрава основа за вашата разработка.

Допълнително проучване:
  • https: // git-scm.com / docs
  • https: // git-scm.com / book / en / v2
  • https: // git-scm.com / видеоклипове
Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...
Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...
Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...