JavaRush /Блоги Java /Random-TG /Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон
Roman Beekeeper
Сатҳи

Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон

Дар гурӯҳ нашр шудааст

Ба ҷои муқаддима

Салом муҳандиси калони нармафзори оянда. Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 1Имрӯз мо дар бораи системаи идоракунии version, яъне Git сӯҳбат хоҳем кард (чун GIT хонед, на JIT, чунон ки аз грамматикаи англисӣ ба назар мерасад). Бале, бале, ман медонам, ки Mercurial, SVN низ вуҷуд дорад ... Аммо биёед ростқавл гӯем: вақти онҳо аллакай гузаштааст ва ман вақти гаронбаҳои шуморо ба онҳо сарф намекунам. Барои он ки шумо аҳамияти донистани Git-ро дар замони мо дарк кунед, ман инро мегӯям: бе дониш/фаҳмиши ин, шумо дар барномасозӣ коре надоред. Аммо зебоӣ дар он аст, ки барои пайваста кор кардан ба шумо лозим нест, ки ҳама фармонҳо ва имкониятҳоро дар сари худ нигоҳ доред. Шумо бояд маҷмӯи фармонҳоро донед, ки ба шумо дар фаҳмидани ҳама воқеаҳои рӯйдода кӯмак мекунанд.

Асосҳои Git

Git як системаи идоракунии versionи тақсимшудаи codeи мо мебошад. Чаро мо ба он ниёз дорем? Гурӯҳҳои тақсимшуда ба як намуди идоракунии кор ниёз доранд. Барои пайгирии тағиротҳое, ки бо мурури замон рух медиҳанд, лозим аст. Яъне зина ба зина мо мебинем, ки кадом файлҳо ва чӣ гуна тағйир ёфтаанд. Ин махсусан муҳим аст, вақте ки шумо он чизеро, ки дар як вазифа анҷом дода шудааст, таҳлил кунед: ин имкон медиҳад, ки баргардед. Биёед вазъро тасаввур кунем: як рамзи корӣ вуҷуд дошт, дар он ҳама чиз хуб буд, аммо мо тасмим гирифтем, ки чизеро такмил диҳем, дар ин ҷо таҳрик диҳем, онро дар он ҷо ислоҳ кунем. Ҳама чиз хуб буд, аммо ин такмил нисфи функсияҳоро вайрон кард ва кор карданро ғайриимкон сохт. Пас, оянда чӣ аст? Бе Гита, кас бояд соатҳо нишинад ва дар хотир дошт, ки ҳама чиз дар ибтидо чӣ гуна буд. Ва аз ин рӯ, мо танҳо ба ӯҳдадорӣ бармегардем ва ҳамин тавр. Ё чӣ мешавад, агар ду таҳиягар дар як вақт codeи худро тағир диҳанд? Бе Git чунин ба назар мерасад: онҳо codeро аз асл нусхабардорӣ карданд ва он чизеро, ки ба онҳо лозим буд, анҷом доданд. Лаҳзае фаро мерасад ва ҳарду мехоҳанд тағиротҳои худро ба ҷузвдони асосӣ илова кунанд. Ва дар ин ҳолат чӣ бояд кард?.. Ман ҳатто ҷуръат надорам, ки вақти иҷрои ин корро ҳисоб кунам. Агар шумо Git-ро истифода баред, ҳеҷ гуна мушкилот вуҷуд надорад.

Насб кардани Git

Биёед Git-ро дар компютери шумо насб кунем. Ман мефаҳмам, ки ҳама дорои OS гуногун мебошанд, бинобар ин ман кӯшиш мекунам, ки барои якчанд ҳолатҳо тавсиф кунам.

Насб барои Windows

Мисли маъмулӣ, шумо бояд файли exe-ро зеркашӣ кунед ва онро иҷро кунед. Дар ин ҷо ҳама чиз оддӣ аст: ба истиноди аввалини Google клик кунед , насб кунед ва ҳамин тавр. Барои кор мо консоли bash-ро, ки онҳо пешниҳод мекунанд, истифода хоҳем кард. Барои кор дар Windows, шумо бояд Git Bash -ро иҷро кунед. Ин аст он чизе ки дар менюи оғоз ба назар мерасад: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 2Ва ин аллакай консолест, ки дар он шумо метавонед кор кунед. Барои он ки ҳар дафъа барои кушодани git ба ҷузвдони лоиҳа наравед, шумо метавонед дар папка бо тугмаи рости муш клик кунед, то консолро бо роҳе, ки ба мо лозим аст, кушоед: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 3

Насб барои Linux

Одатан git аллакай насб карда шудааст ва ба тақсимоти Linux дохил карда мешавад, зеро он асбобест, ки дар ибтидо барои таҳияи ядрои Linux навишта шудааст. Аммо ҳолатҳое ҳастанд, ки он вуҷуд надорад. Барои санҷидани ин, шумо бояд терминалро кушоед ва нависед: git --version. Агар ҷавоби равшан бошад, ҳеҷ чиз насб кардан лозим нест. Терминалро кушоед ва насб кунед. Ман дар Ubuntu кор мекунам, бинобар ин ба шумо гуфта метавонам, ки барои он чӣ нависам: sudo apt-get install git. Ва ин аст: акнун шумо метавонед Git-ро дар ҳама гуна терминал истифода баред.

Насбкунӣ дар macOS

Дар ин ҷо низ, аввал шумо бояд тафтиш кунед, ки Git аллакай вуҷуд дорад (нигаред ба боло, мисли Linux). Дар акси ҳол, роҳи осонтарини зеркашӣ кардани versionи охирин аст. Агар XCode насб карда шуда бошад, Git бешубҳа ба таври худкор насб карда мешавад.

Танзимоти Git

Гит як танзимоти корбар дорад, ки аз он кор анҷом дода мешавад. Ин як чизи оқилона ва зарурист, зеро вақте ки ӯҳдадорӣ эҷод мешавад, Git маҳз ҳамин маълумотро барои майдони Муаллиф мегирад. Барои насб кардани номи корбар ва парол барои ҳамаи лоиҳаҳо, шумо бояд фармонҳои зеринро ворид кунед:

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ал;
  • якҷоя кардан;
  • муноқишаҳо;
  • Кашидан;
  • Тела;
  • чӣ тавр нодида гирифтани баъзе файлҳо (.gitignore).
Ва ғайра.

Давлатҳо дар Гит

Гита дорои якчанд ҳолатест, ки бояд дарк ва дар хотир дошта бошанд:
  • бетаъсир;
  • дигаргун карда шудааст;
  • омода (марҳила);
  • содир карда шудааст.

Ин чӣ маъно дорад?

Инҳо иёлатҳое мебошанд, ки файлҳои codeи мо дар онҳо ҷойгиранд. Яъне, роҳи зиндагии онҳо одатан чунин аст:
  1. Файле, ки сохта шудааст ва ба анбор илова нашудааст, дар ҳолати назоратнашаванда хоҳад буд.
  2. Мо ба файлҳое, ки аллакай ба анбори Git илова карда шудаанд, тағирот ворид мекунем - онҳо дар ҳолати тағирёфта ҳастанд.
  3. Аз файлҳое, ки мо тағир додаем, мо танҳо он (ё ҳама)-ро интихоб мекунем, ки ба мо лозиманд (масалан, ба мо синфҳои тартибдодашуда лозим нест) ва ин синфҳо бо тағирот ба ҳолати марҳилавӣ меафтанд.
  4. Аз файлҳои омодашуда аз ҳолати марҳилавӣ супориш сохта мешавад ва ба анбори Git мегузарад. Пас аз ин, ҳолати марҳилавӣ холӣ аст. Аммо таҳриршуда то ҳол метавонад чизе дошта бошад.
Чунин ба назар мерасад (тасвир аз ҳуҷҷати расмӣ, бинобар ин шумо метавонед ба он бовар кунед)): Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 4

Уҳдадорӣ чист

Уҳдадорӣ an objectи асосӣ дар идоракунии version мебошад. Он ҳама тағиротҳоро пас аз ин ӯҳдадорӣ дар бар мегирад. Уҳдадориҳо бо ҳам мисли рӯйхати ягона алоқаманданд. Яъне: Уҳдадории аввал вуҷуд дорад. Вақте ки ӯҳдадории дуюм сохта мешавад, он (дуюм) медонад, ки он пас аз якум меояд. Ва бо ин роҳ шумо метавонед маълумотро пайгирӣ кунед. Уҳдадорӣ инчунин дорои иттилооти ба истилоҳ метадата мебошад:
  • идентификатори беназире, ки тавассути он шумо метавонед онро пайдо кунед;
  • номи муаллифи супориш, ки онро офаридааст;
  • санаи таъсис;
  • шарҳе, ки дар давоми ин ӯҳдадорӣ чӣ кор карда шуд, тасвир мекунад.
Чунин ба назар мерасад: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 5

Фorал чист

Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 6Фorал нишондиҳандаи ӯҳдадорӣ мебошад. Азбаски ӯҳдадор медонад, ки кадом ӯҳдадорӣ пеш аз он омадааст, вақте ки фorал ба ӯҳдадорӣ ишора мекунад, ҳамаи он ӯҳдадориҳои қаблӣ низ ба он ишора мекунанд. Дар асоси ин, мо метавонем бигӯем, ки шумораи зиёди фorалҳо ба як ӯҳдадорӣ ишора мекунанд. Кор дар фorалҳо сурат мегирад, аз ин рӯ, вақте ки ӯҳдадории нав сохта мешавад, фorал нишоннамои худро ба ӯҳдадории навтар мегузаронад.

Оғози кор бо Git

Шумо метавонед танҳо бо анбори маҳаллӣ ё дурдаст кор кунед. Барои кор кардани фармонҳои зарурӣ, шумо метавонед танҳо репозиторийҳои маҳаллиро истифода баред. Он ҳама маълумотро танҳо ба таври маҳаллӣ дар лоиҳа дар папкаи .git нигоҳ медорад. Агар мо дар бораи дурдаст сухан ронем, он гоҳ ҳама маълумот дар ягон serverи дурдаст нигоҳ дошта мешавад: танҳо як нусхаи лоиҳа ба таври маҳаллӣ нигоҳ дошта мешавад, ки тағиротро ба он интиқол додан мумкин аст (git push) ба анбори дурдаст. Дар ин ҷо ва минбаъд мо дар бораи кор бо git дар консол муҳокима хоҳем кард. Албатта, шумо метавонед якчанд ҳалли графикиро истифода баред (масалан, дар Intellij IDEA), аммо аввал шумо бояд фаҳмед, ки кадом фармонҳо рух медиҳанд ва чӣ маъно доранд.

Кор бо Git дар анбори маҳаллӣ

Баъдан, ман тавсия медиҳам, ки ҳамаи қадамҳоеро, ки ҳангоми хондани мақола анҷом додаам, иҷро кунед. Ин фаҳмиш ва нигоҳ доштани маводро беҳтар мекунад. Пас, бон иштиҳо :) Барои сохтани як анбори маҳаллӣ, шумо бояд нависед:

git init
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 7Ин дар маконе, ки консол ҷойгир аст, папкаи .git эҷод мекунад. .git ҷузвдонест, ки тамоми маълумотро дар бораи анбори Git нигоҳ медорад. Онро нест кардан лозим нест;) Баъдан, файлҳо ба ин лоиҳа илова карда мешаванд ва ҳолати онҳо Untracked мешавад. Барои дидани вазъияти кори кунунӣ, нависед:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 8Мо дар фorали усто ҳастем ва то ба дигараш нагузарем, ҳама чиз ҳамин тавр боқӣ мемонад. Бо ин роҳ шумо метавонед бубинед, ки кадом файлҳо тағир дода шудаанд, аммо ҳанӯз ба ҳолати марҳилавӣ илова карда нашудаанд. Барои илова кардани онҳо ба ҳолати марҳилавӣ, шумо бояд git add нависед. Дар ин ҷо метавонад якчанд вариант вуҷуд дошта бошад, масалан:
  • git add -A - ҳама файлҳоро аз ҳолати марҳилавӣ илова кунед;
  • git илова кунед. — ҳамаи файлҳои ин ҷузвдон ва ҳамаи файлҳои дохorро илова кунед. Аслан ҳамон тавре ки қаблӣ аст;
  • git add <name> - танҳо файли мушаххасро илова мекунад. Дар ин ҷо шумо метавонед ибораҳои муқаррариро истифода баред, то мувофиқи ягон намуна илова кунед. Масалан, git add *.java: ин маънои онро дорад, ки шумо танҳо файлҳоро бо васеъшавии java илова кардан лозим аст.
Маълум аст, ки ду варианти аввал соддаанд, аммо бо илова он ҷолибтар хоҳад буд, бинобар ин мо менависем:

git add *.txt
Барои санҷидани вазъият, мо фармонеро истифода мебарем, ки аллакай медонем:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 9Аз ин мо мебинем, ки ифодаи муқаррарӣ дуруст кор кардааст ва ҳоло test_resource.txt дар ҳолати марҳилавӣ қарор дорад. Ва ниҳоят, марҳилаи охирин (бо анбори маҳаллӣ, бо як дурдаст боз як хоҳад буд ;)) - ӯҳдадорӣ ва эҷоди ӯҳдадории нав:

git commit -m “all txt files were added to the project”
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 10Баъдан, як фармони олие ҳаст, ки ба таърихи содироти фorал нигаред. Биёед онро истифода барем:

git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 11Дар ин ҷо шумо аллакай мебинед, ки ӯҳдадории аввалини мо бо матне, ки мо интиқол додем, пайдо шудааст. Фаҳмидани он хеле муҳим аст, ки матне, ки мо мегузарем, бояд то ҳадди имкон дақиқ муайян кунад, ки дар давоми ин ӯҳдадорӣ чӣ анҷом дода шудааст. Ин дар оянда чандин маротиба ёрй мерасонад. Хонандаи кунҷков, ки ҳанӯз хобаш набурдааст, метавонад бигӯяд: бо файли GitTest.java чӣ шуд? Акнун мо мефаҳмем, барои ин истифода баред:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 12Чунон ки мебинем, он дар холати пайгирона мемонад ва дар бол интизор аст. Ё шояд мо онро умуман ба лоиҳа илова кардан намехоҳем? Баъзан чунин мешавад. Минбаъд, барои ҷолибтар кардани он, биёед кӯшиш кунем, ки файли матнии test_resource.txt-ро тағир диҳем. Биёед ба он ҷо матн илова кунем ва вазъиятро тафтиш кунем:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 13Дар ин ҷо шумо метавонед фарқи байни ин ду ҳолатро равшан бубинед - пайгирӣнашуда ва тағирёфта. GitTest.java дар ҳолати назоратнашуда ва test_resource.txt дар ҳолати тағирёбанда аст. Акнун, ки аллакай файлҳо дар ҳолати тағирёфта мавҷуданд, мо метавонем тағиротҳои ба онҳо воридшударо бубинем. Инро бо истифода аз фармон иҷро кардан мумкин аст:

git diff
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 14Яъне, шумо дар ин ҷо равшан мебинед, ки ман ба файли матнии мо салом ҷаҳон! Ба файли матнӣ тағирот илова кунед ва иҷро кунед:

git add test_resource.txt
git commit -m “added hello word! to test_resource.txt”
Барои дидани ҳамаи ӯҳдадориҳо, нависед:

git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 15Тавре ки шумо мебинед, аллакай ду супориш вуҷуд дорад. Ҳамин тариқ, мо GitTest.java -ро илова мекунем. Ҳоло шарҳ нест, танҳо фармонҳо:

git add GitTest.java
git commit -m “added GitTest.java”
git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 16

Кор бо .gitignore

Равшан аст, ки мо танҳо мехоҳем рамзи сарчашмаро нигоҳ дорем, на чизи дигаре дар анбор. Дигар чӣ буда метавонад? Ҳадди ақал дарсҳо ва/ё файлҳои тартибдодашуда, ки муҳити рушдро эҷод мекунанд. Барои он ки Git онҳоро нодида гирад, файли махсусе вуҷуд дорад, ки бояд эҷод карда шавад. Мо ин корро мекунем: мо дар решаи лоиҳа файлеро эҷод мекунем, ки .gitignore ном дорад ва дар ин файл ҳар як сатр намунаи нодида гирифта мешавад. Дар ин мисол, git ignore чунин хоҳад буд:

```
*.class
target/
*.iml
.idea/
```
Биёед ҳоло бубинем:
  • сатри аввал нодида гирифтани ҳамаи файлҳо бо тамдиди .class;
  • сатри дуюм ин аст, ки папкаи мақсаднок ва ҳама чизеро, ки дар он дорад, нодида гиред;
  • сатри сеюм ин нодида гирифтани ҳамаи файлҳои дорои тамдиди .iml;
  • Сатри чорум ин нодида гирифтани папкаи .idea мебошад.
Биёед бо як мисол кӯшиш кунем. Барои дидани он ки ин чӣ гуна кор мекунад, синфи тартибдодашудаи GitTest.class-ро ба лоиҳа илова кунед ва ҳолати лоиҳаро бубинед:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 17Равшан аст, ки мо намехоҳем, ки тасодуфан (агар мо git add -A -ро истифода барем) ба лоиҳа синфи тартибдодашударо илова кунем. Барои ин, файли .gitignore эҷод кунед ва ҳама чизеро, ки қаблан тавсиф шуда буд, илова кунед: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 18Акнун биёед git ignore -ро ба лоиҳа бо ӯҳдадории нав илова кунем:

git add .gitignore
git commit -m “added .gitignore file”
Ва ҳоло лаҳзаи ҳақиқат: мо синфи тартибдодашудаи GitTest.class дорем, ки дар ҳолати пайгирӣнашуда, ки мо намехостем, ки онро ба анбори Git илова кунем. Дар ин ҷо git ignore бояд кор кунад:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 19Ҳама чиз равшан аст) Git ignore +1)

Кор бо фorалҳо ва ғайра

Албатта, дар як соха кор кардан барои як кас нокулай аст ва дар сурате ки дар коллектив зиёда аз як кас мавчуд бошад, имконнопазир аст. Барои ин фorал вуҷуд дорад. Тавре ки ман қаблан гуфтам, фorал танҳо як нишондиҳандаи ҳаракаткунанда барои ӯҳдадориҳост. Дар ин қисм, мо дар бораи кор дар соҳаҳои гуногун дида мебароем: чӣ гуна бояд тағиротро аз як шоха ба дигараш муттаҳид кард, кадом ихтилофҳо ба вуҷуд омада метавонанд ва ғайра. Барои дидани рӯйхати ҳамаи фorалҳо дар анбор ва фаҳмидани он, ки шумо дар он ҳастед, шумо бояд нависед:

git branch -a
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 20Шумо мебинед, ки мо танҳо як шохаи усто дорем ва ситорача дар пеши он мегӯяд, ки мо дар он ҳастем. Дар омади гап, барои фаҳмидани он ки мо дар кадом фorал ҳастем, мо инчунин метавонем санҷиши статусро (git status) истифода барем. Минбаъд, якчанд вариантҳо барои сохтани фorалҳо мавҷуданд (шояд бештар бошанд, ман инҳоро истифода мебарам):
  • дар асоси фorале, ки мо дар он ҳастем, фorали нав эҷод кунед (99% ҳолатҳо);
  • дар асоси ӯҳдадории мушаххас фorал таъсис диҳед (1%).

Дар асоси ӯҳдадории мушаххас фorал эҷод кунед

Мо ба идентификатори ягонаи ӯҳдадорӣ такя хоҳем кард. Барои пайдо кардани он, мо менависем:

git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 21Ман ӯҳдадориро бо шарҳи "илова ба ҷаҳон салом ..." таъкид кардам. Он дорои идентификатори беназир - "6c44e53d06228f888f2f454d3cb8c1c976dd73f8". Ман мехоҳам як фorали рушдро аз ин ӯҳдадорӣ таъсис диҳам. Барои ин ман менависам:

git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
Фorал таъсис дода мешавад, ки танҳо ду супориши аввалро аз фorали асосӣ дар бар мегирад. Барои санҷидани ин, мо аввал боварӣ ҳосил мекунем, ки мо ба фorали дигар кӯчидем ва ба шумораи ӯҳдадориҳо дар он назар андозем:

git status
git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 22Ва ин дуруст аст: маълум шуд, ки мо ду ухдадорй дорем. Дар омади гап, як нуктаи ҷолиб: дар ин шоха то ҳол файли .gitignore вуҷуд надорад, бинобар ин файли тартибдодаи мо (GitTest.class) ҳоло дар ҳолати пайгиринашуда таъкид шудааст. Акнун мо метавонем фorалҳои худро аз нав дида бароем:

git branch -a
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 23Мумкин аст, ки ду шоха – усто ва рушд вуҷуд дорад ва ҳоло мо дар пешрафт ҳастем.

Дар асоси фorали ҷорӣ фorал эҷод кунед

Роҳи дуюми эҷоди фorал ин бунёди дигар аст. Ман мехоҳам, ки дар асоси фorали асосӣ фorал эҷод кунам, бинобар ин ман бояд аввал ба он гузарам ва қадами оянда сохтани фorали нав аст. Биёед бубинем:
  • git checkout master - ба фorали усто гузаред;
  • ҳолати git - санҷед, ки оё он дар усто аст.
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 24Дар ин ҷо шумо мебинед, ки мо ба фorали асосӣ кӯчидем, git ignore аллакай дар ин ҷо кор мекунад ва синфи тартибдодашуда дигар ҳамчун пайгирӣнашуда ба назар намерасад. Ҳоло мо дар асоси фorали асосӣ фorали нав эҷод мекунем:

git checkout -b feature/update-txt-files
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 25Агар шумо шубҳа дошта бошед, ки ин фorал бо устод якхела нахоҳад буд, шумо метавонед инро бо навиштани git log ва дидани ҳамаи ӯҳдадориҳо ба осонӣ тафтиш кунед. Онҳо бояд чор нафар бошанд.

Ҳалли муноқишаҳо

Пеш аз он ки мо фаҳмем, ки конфликт чӣ гуна аст, мо бояд дар бораи якҷоя кардани як шоха ба дигараш сӯҳбат кунем. Ин расм метавонад равандеро нишон диҳад, ки як шоха ба дигараш пайваст мешавад: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 26Яъне шохаи асосӣ вуҷуд дорад. Дар баъзе мавридҳо аз он дуюмдараҷа ба вуҷуд меояд, ки дар он тағйирот ба амал меояд. Пас аз анҷоми кор, шумо бояд як шохаро ба дигараш якҷоя кунед. Ман хусусиятҳои гуногунро тавсиф намекунам: ман мехоҳам танҳо фаҳмишро дар доираи ин мақола расонам ва агар лозим бошад, шумо тафсилотро худатон хоҳед ёфт. Ҳамин тавр, дар мисоли мо, мо шохаи feature/update-txt-files офаридем. Тавре ки дар номи фorал навишта шудааст, мо матнро нав мекунем. Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 27Ҳоло шумо бояд барои ин масъала ӯҳдадории нав эҷод кунед:

git add *.txt 
git commit -m “updated txt files”
git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 28Ҳоло, агар мо хоҳем, ки фorали feature/update-txt-files-ро ба устод муттаҳид кунем, мо бояд ба устод равем ва git merge feature/update-txt-files нависем:

git checkout master
git merge feature/update-txt-files
git log
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 29Дар натиҷа, ҳоло фorали асосӣ инчунин ӯҳдадорие дорад, ки ба хусусият/update-txt-файлҳо илова карда шудааст. Ин функсия илова карда шудааст, то шумо метавонед шохаи хусусиятро нест кунед. Барои ин мо менависем:

git branch -D feature/update-txt-files
То ҳол равшан аст, дуруст? Биёед вазъиятро мураккаб кунем: акнун бигӯем, ки мо бояд файли txt-ро дубора иваз кунем. Аммо ҳоло ин файл дар устод иваз карда мешавад. Яъне, он мувозӣ тағир меёбад ва Git наметавонад дарк кунад, ки дар вазъияте, ки мо мехоҳем codeи навро ба шохаи асосӣ якҷоя кунем, чӣ кор кардан лозим аст. Бирав! Мо фorали навро дар асоси мастер эҷод мекунем, ба text_resource.txt тағирот ворид мекунем ва барои ин масъала ӯҳдадор эҷод мекунем:

git checkout -b feature/add-header
... делаем изменения в файле
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 30

git add *.txt
git commit -m “added header to txt”
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 31Ба фorали асосӣ равед ва инчунин ин файли матниро дар ҳамон сатр бо шохаи хусусият навсозӣ кунед:

git checkout master
… обновor test_resource.txt
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 32

git add test_resource.txt
git commit -m “added master header to txt”
Ва ҳоло лаҳзаи ҷолибтарин: шумо бояд тағиротро аз шохаи хусусият/сарлавҳаи изофӣ ба устод якҷоя кунед. Мо дар фorали усто ҳастем, аз ин рӯ танҳо бояд нависем:

git merge feature/add-header
Аммо мо бо конфликт дар файли test_resource.txt натиҷа мегирем: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 33Ва дар ин ҷо мо мебинем, ки Git наметавонад мустақилона тасмим бигирад, ки чӣ гуна ин codeро муттаҳид кунад ва мегӯяд, ки мо аввал бояд ихтилофро ҳал кунем ва танҳо баъд ӯҳдадор шавем. Хуб, биёед файли дорои ихтилофро дар муҳаррири матн кушоем ва бубинем: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 34Барои фаҳмидани он ки git дар ин ҷо чӣ кор кардааст, шумо бояд дар хотир доред, ки мо дар куҷо навиштаем ва муқоиса кунем:
  1. байни "<<<<<<< HEAD" ва "=======" тағйироти асосӣ, ки дар ин сатр дар шохаи асосӣ буданд.
  2. байни "=======" ва ">>>>>>>> хусусият/add-сарлавҳа" тағиротҳое мавҷуданд, ки дар шохаи хусусият/add-сарлавҳа буданд.
Ҳамин тариқ, Гит нишон медиҳад, ки дар ин лаҳза ӯ намефаҳмад, ки чӣ гуна ин файлро якҷоя кардан мумкин аст, ин қисмро аз шохаҳои гуногун ба ду қисм тақсим кард ва пешниҳод кард, ки мо худамон тасмим гирем. Хуб, бо иродаи қавӣ ман тасмим гирифтам, ки ҳама чизро нест кунам, танҳо сарлавҳаи калимаро гузорам: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 35Биёед ба ҳолати тағирот назар андозем, тавсиф каме фарқ мекунад. Ҳолати тағирёфта вуҷуд нахоҳад дошт, аммо Unmerged. Пас, мо метавонем бехатарии ҳолати панҷумро илова кунем ... Аммо ман фикр мекунам, ки ин нолозим аст, биёед бубинем:

git status
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 36Мо боварӣ доштем, ки ин як ҳодисаи дигар ва ғайриоддӣ аст. Биёед идома диҳем:

git add *.txt
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 37Дар тавсиф шумо хоҳед дид, ки онҳо танҳо навиштани git commit-ро пешниҳод мекунанд. Мо гӯш мекунем ва менависем:

git commit
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 38Ва ин ҳама аст: мо ин корро кардем - мо низоъро дар консол ҳал кардем. Албатта, дар муҳитҳои рушд шумо метавонед ин корро каме осонтар кунед, масалан, дар Intellij IDEA ҳама чиз чунон хуб танзим шудааст, ки шумо метавонед дар он ҳама амалҳои заруриро иҷро кунед. Аммо муҳити рушд бисёр чизҳоро дар зери пӯшиш иҷро мекунад ва мо аксар вақт намефаҳмем, ки дар он ҷо маҳз чӣ ҳодиса рух додааст. Ва ҳангоме ки фаҳмиш вуҷуд надорад, мушкилот метавонад ба миён ояд.

Кор бо анборҳои дурдаст

Қадами охирин фаҳмидани чанд фармони дигар аст, ки барои кор бо анбори дурдаст лозиманд. Тавре ки ман аллакай гуфтам, анбори дурдаст ин ҷойест, ки дар он анбор нигоҳ дошта мешавад ва аз он ҷо шумо метавонед онро клон кунед. Кадом намудҳои анборҳои дурдаст вуҷуд доранд? Мисолҳо зиёданд:
  • GitHub бузургтарин анбори анборҳо ва рушди муштарак мебошад. Ман онро аллакай дар мақолаҳои қаблӣ тавсиф карда будам.
    Ба ҳисоби ман Github обуна шавед . Ман дар он ҷо аксар вақт корҳои худро дар соҳаҳое, ки дар давоми корам таҳсил мекунам, намоиш медиҳам.

  • GitLab як асбоби кушодаи DevOps дар асоси веб мебошад, ки системаи идоракунии анбори codeҳоро барои Git бо викии худ, системаи пайгирии масъалаҳо , лӯлаи CI/CD ва дигар хусусиятҳо таъмин мекунад. Пас аз хабаре, ки Microsoft GitHub-ро харидааст, баъзе таҳиягарон кори худро дар GitLab такрор карданд.

  • BitBucket як хидмати веб барои хостинги лоиҳа ва таҳияи муштарак аст, ки ба системаҳои идоракунии versionи Mercurial ва Git асос ёфтааст. Дар як вақт он нисбат ба GitHub бартарии калон дошт, зеро он анборҳои хусусии ройгон дошт. Соли гузашта GitHub низ ин хусусиятро барои ҳама ройгон дастрас кард.

  • Ва ғайра…

Аввалин чизе, ки шумо бояд ҳангоми кор бо анбори дурдаст анҷом диҳед, ин клон кардани лоиҳа ба лоиҳаи маҳаллии шумост. Барои ин ман лоиҳаеро, ки дар дохor маҳаллӣ сохтаем, содир кардам ва акнун ҳама метавонанд онро бо навиштан худ клон кунанд:
git clone https://github.com/romankh3/git-demo
Холо дар махалхо нусхаи пурраи лоиха мавчуд аст. Барои боварӣ ҳосил кардани он, ки нусхаи охирини лоиҳа дар маҳал ҷойгир аст, шумо бояд, тавре ки мегӯянд, маълумотро бо навиштан партов кунед:

git pull
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 39Дар ҳолати мо, ҳоло ҳеҷ чиз аз фосилаи дур тағйир наёфтааст, бинобар ин ҷавоб ин аст: Аллакай навсозӣ шудааст. Аммо агар ман дар анбори дурдаст баъзе тағирот ворид кунам, пас аз он ки мо онҳоро кашем, анбори маҳаллӣ нав карда мешавад. Ва ниҳоят, фармони охирин ин тела додани маълумот ба анбори дурдаст аст. Вақте ки мо кореро ба таври маҳаллӣ анҷом додем ва мехоҳем онро ба анбори дурдаст интиқол диҳем, мо бояд аввал як ӯҳдадории навро дар маҳал эҷод кунем. Барои ин, биёед ба файли матнии худ чизи дигаре илова кунем: Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 40Ҳоло ин барои мо як чизи маъмул аст - мо барои ин масъала ӯҳдадор мекунем:

git add test_resource.txt
git commit -m “prepated txt for pushing”
Ва ҳоло фармон барои тела додани ин ба анбори дурдаст:

git push
Оғози кор бо Git: дастури муфассал барои шурӯъкунандагон - 41Ин ҳама чизест, ки ман ба шумо гуфтан мехостам. Ба диққататон ташаккур. Ба ҳисоби GitHub-и ман обуна шавед , ки дар он ман лоиҳаҳои гуногуни намунавии олиро аз он чизе, ки меомӯзам ва дар кор истифода мебарам, интишор мекунам.

истинодҳои муфид

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION