Разработката на софтуер е съвместна работа. Като софтуерен инженер трябва да споделяте работата си с другите. Но споделянето на код и сътрудничеството могат да се усложнят. Трудно е да се проследят различни промени, които се случват по време на жизнения цикъл на софтуера. Така че екипите за разработка разчитат на инструменти за контрол на версиите, за да помогнат в процеса на сътрудничество със софтуера. Git е един от най-известните инструменти за контрол на версиите в софтуерната индустрия.
Бакшиш: В този урок ще научите как да използвате основите на Git. Всеки раздел завършва с няколко въпроса. Можете да прочетете въпросите, преди да започнете да четете раздела. Това ще ви помогне да разберете и обърнете внимание на важните моменти.
Забавлявайте се, изучавайки Git!
Git: Кратък преглед
Git е разпределена система за контрол на версиите. Той проследява всички промени, които правите във вашите файлове и папки. Улеснява запазването на незавършената работа. Ако има проблем, можете лесно да проверите по-ранна версия на файла или папката. Ако е необходимо, можете дори да върнете цялата си кодова база към по-стара версия.
Разработката на Git стартира през 2005г. Групата на ядрото на Linux, използвана за поддържане на техния код в BitKeeper, собствена разпределена система за контрол на версиите. BitKeeper обаче оттегли безплатното си използване на продукта. Така Линус Торвалдс, създателят и основен разработчик на Linux, проектира нова система за контрол на разпределените версии с отворен код, която да отговаря на изискванията на общността за разработка на Linux. И се роди Гит.
Като разпределена система за контрол на версиите, Git не изисква централизиран орган, който да следи кода. По-старите централизирани контроли за версии като CVS, SVN или Perforce изискват централни сървъри, за да поддържат историята на промените. Git може да следи всички промени локално и да работи равнопоставено. Така че е по-гъвкав от централизираните системи.
Въпроси:
- Защо трябва да използвате 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 на вашата Linux система?
- Защо трябва да настроите потребител.име и потребител.имейл конфигурация? Как ги настройвате?
Концептуално разбиране на Git
За да използвате Git, първо трябва да разберете тези четири концепции:
- Работна директория
- Постановка
- Хранилище
- Отдалечено хранилище
Работната директория, променителната област и хранилището са локални за вашата машина. Отдалеченото хранилище може да бъде всеки друг компютър или сървър. Нека помислим за тези концепции като за четири кутии, които могат да съдържат стандартни документи А1.
Да предположим, че пишете документ на ръка върху хартия А1 на бюрото си. Съхранявате този документ в полето за работна директория. На определен етап от работата си решавате, че сте готови да запазите копие от работата, която вече сте свършили. Затова правите фотокопие на настоящата си хартия и я поставяте в кутията за постановка.
Постановочната кутия е временна зона. Ако решите да изхвърлите фотокопието в индексиращото поле и да го актуализирате с ново копие на работния документ на директорията, няма да има постоянен запис на този инсцениран документ.
Да предположим, че сте почти сигурни, че искате да запазите постоянния запис на документа, който имате, в индексиращото поле. След това правите фотокопие на документа за подреждане и го премествате в полето на хранилището.
Когато го преместите в полето на хранилището, се случват две неща:
- Снимка на документа се запазва за постоянно.
- Направен е запис на регистрационен файл, който да върви със снимката.
Записът в дневника ще ви помогне да намерите конкретната снимка на вашия документ, ако имате нужда от него в бъдеще.
Сега в полето за локално хранилище имате моментна снимка на вашата работа и запис в дневника. Но това е достъпно само за вас. Така че правите копие на вашия документ за локално хранилище заедно с регистрационния файл и го поставяте в кутия в стаята за доставки на компанията. Сега всеки от вашата компания може да дойде и да направи копие на вашия документ и да го занесе на бюрото си. Кутията в стаята за доставка ще бъде отдалеченото хранилище.
Отдалеченото хранилище е нещо като споделяне на вашия документ чрез 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?
Основни 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 --onelinef136d22 Индекс за ангажиране.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 --oneline0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html
В този раздел сте се научили да използвате команди за състояние, регистриране, добавяне и ангажиране, за да следите вашите документи в Git.
Въпроси:
- Какво прави git status?
- Какво прави git log?
- Какво прави git add?
- Какво прави git commit?
Връщане към по-стари файлове с помощта на Checkout
Когато фиксирате файл в Git, той създава уникален хеш за всяко фиксиране. Можете да ги използвате като идентификатори, за да се върнете към по-стара версия.
Да предположим, че искате да се върнете към по-ранната си версия на индекса.html. Първо, нека разгледаме индекса.html в текущото състояние:
индекс $ cat.htmlЗдравей свят! Аз съм!
Можете да видите, че имате по-новата версия („Здравей, свят! Аз съм!”). Нека проверим дневника:
$ git log --oneline0586662 Модифициран индекс.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 --oneline345c0f4 Променен уебсайт за Дейвид
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 --oneline345c0f4 Променен уебсайт за Дейвид
0586662 Модифициран индекс.html към по-щастливо съобщение
f136d22 Индекс за ангажиране.html
Успешно сте обединили клона на david_website в master. И вашият индекс.html за главния клон изглежда идентичен с клона на david_website:
индекс $ cat.htmlЗдравей свят! Дейвид е!
Можете да запазите клона david_website:
$ git клон --listdavid_website
* майстор
Или можете да го изтриете:
$ git клон -d david_websiteИзтрит клон david_website (беше 345c0f4).
След изтриването вече не трябва да виждате клона на david_website:
$ git клон - списък* майстор
Бакшиш: По време на сливане, ако Git не може да се обедини автоматично, това ще ви даде конфликтни грешки при сливане. В този случай трябва ръчно да разрешите проблемите на сливането.
Въпроси:
- Защо се нуждаете от разклоняване?
- Как разклонявате и обединявате файлове и папки?
Отдалечено хранилище
Досега цялата ви работа беше местна. Записвате промените си в локално хранилище. Но е време да споделите работата си със света.
Git отдалечено хранилище е основно друго копие на вашето локално хранилище, което може да бъде достъпно от други. Можете да настроите сървър и да го направите отдалечено хранилище. Но повечето хора използват GitHub или Bitbucket за тази цел. Там можете да създавате безплатни публични хранилища, до които всеки може да има достъп.
Нека създадем отдалечено хранилище на GitHub.
Първо, трябва да създадете акаунт в GitHub []. След като имате акаунта, създайте ново хранилище, като използвате бутона „Ново хранилище“. Използвайте “project_website” като име на хранилището (можете да изберете нещо друго, ако искате).
Трябва да видите раздел Код с инструкции като тези:
... или създайте ново хранилище в командния ред
echo "# project_website" >> README.mdgit 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 / видеоклипове