Shanraq.org Shanraq.org
Git: кодыңыздың тарихы және кері жол
IT

Go тілі: нөлден өз блогыңызға дейін 16-сабақ (барлығы 50)

Git: кодыңыздың тарихы және кері жол

Go курсының он алтыншы сабағы. Git файлдың соңғы нұсқасын емес, қайта оралуға болатын барлық күйді сақтайды. git init, үш орын — жұмыс қалтасы, индекс және тарих, — ең жиі қолданылатын пәрмен git status, жазба хабарына не жазады, .gitignore не үшін керек және кешегі файлды кері қалай алады.

Не үшін керек

Жұмыс істеп тұрған бағдарламаны түзетесіз, ол істемей қалады, ал бұрынғысын қайтару мүмкін емес: ескі мәтін өшіп кеткен. Бұл бәріне таныс, әркім main_eski.go, main_jumys2.go сияқты файлдардан өтеді.

Git мұны біржола шешеді. Ол соңғы нұсқаны емес, өзіңіз белгілеп қойған барлық күйді сақтайды, әрі кез келгенін қайтаруға болады.

Екінші себебі, біріншісінен де тура: Git-сіз сізді жұмысқа алмайды. Сәнді болғаны үшін емес, әлемдегі кодтың бәрі сонда жатқандықтан, ал Git-ті білмейтін әзірлеуші бөтен жұмысты да ала алмайды, өзінікін де бере алмайды.

Елестетіп көріңіз. Соңғы бір бет емес, бетбелгілері бар дәптер. Кәдімгі сақтау тек қазір жазғаныңызды қалдырады. Git белгіленген әр бетті қалдырады — кез келген сәтте керегін ашасыз.

Бірден тұтас

Git Go-дан бөлек орнатылады: git-scm.com — әдеттегі орнату. Тексеріңіз:

git --version

Компьютерде бір рет өзіңізді атаңыз — жазбаларыңыз осымен қол қойылады:

git config --global user.name "Атыңыз"
git config --global user.email "pochta@example.com"

Енді кез келген сабақтың қалтасын алып, онда ретімен орындаңыз:

git init
git add .
git commit -m "Алғашқы бағдарлама"

main.go-ны түзетіңіз — тағы бір шығыс жолын қосыңыз — де, Git-тен не өзгергенін сұраңыз:

git status
## main
 M main.go

M — modified, өзгертілген деген сөз. Дәл нені өзгерткеніңізді қараңыз:

git diff
--- a/main.go
+++ b/main.go
@@ -4,4 +4,5 @@ import "fmt"
 
 func main() {
 	fmt.Println("Сәлем, әлем!")
+	fmt.Println("Бұл менің блогым.")
 }

Осы күйді сақтап, тарихты қараңыз:

git add main.go
git commit -m "Блог туралы жол қосылды"
git log --oneline
1a2b3c4 Блог туралы жол қосылды
1a2b3c4 Алғашқы бағдарлама

Үзінділердегі хештер — үлгі: сіздің репозиторийіңізде олар басқаша болады.

Сол жақта — жазбалардың қысқа аттары. Сізде олар басқаша болады: олар мазмұннан есептеледі, бірдей екеуі болмайды.

Талдау

git init — қалта тарихқа айналады

Бір пәрмен кәдімгі қалтаны репозиторийге айналдырады: қасында жасырын .git қалтасы пайда болады, Git барлық күйді соның ішінде сақтайды. .git-ті өшірсеңіз — файлдардың соңғы нұсқасы бар кәдімгі қалта қалады, тарих жоғалады.

Репозиторийді жобаға бір рет ашады. Әр сабақтың қалтасына бөлек емес, бүкіл курсқа біреуін — сонда жұмысыңыздың қалай өсіп келе жатқанын көресіз.

Үш орын: қалта, индекс, тарих

Бәрі осы жерде сүрінеді, сондықтан бірден есте сақтаған жөн.

  1. Жұмыс қалтасы — сіз түзетіп жатқан файлдар. Git оларды көреді, бірақ ештеңе істемейді.
  2. Индекс — келесі жазбаға өзіңіз таңдағаны. Оған git add салады.
  3. Тарих — жазылып қойған күйлер. Оған git commit көшіреді.

Сондықтан қадам біреу емес, екеу: add таңдайды, commit жазып қояды. Бес файлды түзетіп, үшеуін жазуға болады — қалғаны келесі жазбаны күтеді.

Елестетіп көріңіз. Кассаның алдындағы науа. Дүкенде сөрелердің арасында жүресіз (қалта), алатыныңызды науаға саласыз (add), ал түбіртекті тек кассада аласыз (commit). Түбіртекке науадағысы түседі, қолыңызбен ұстағанның бәрі емес.

git add . өзгергеннің бәрін бірден салады — көбіне солай істейді, бірақ «бәрі» деген шынымен бәрі екенін ұмытпаңыз.

git status — ең жиі қолданылатын пәрмен

Оны күніне ондаған рет тереді, бұл қалыпты жағдай. Ол жалғыз сұраққа жауап береді: қазір не қай орында тұр.

Не болып жатқаны түсініксіз болса — git status теріңіз. Ол келесі пәрменді де айтып береді.

Хабарға не жазу керек

Хабар нені емес, не үшін істегеніңізді түсіндіреді. «main.go өзгертілді» пайдасыз: main.go өзгергені жазбадан онсыз да көрініп тұр. «Карточкаға оқу уақыты қосылды» — пайдалы.

Қысқа, бір жолмен жазыңыз. Жарты жылдан кейін керек сәтті табу үшін осы жолдарды оқисыз да, бүгінгі өзіңізге рақмет айтасыз.

.gitignore — тарихта болмауға тиіс нәрселер

Жиналған бағдарлама, уақытша файлдар, құпиясөздер — олардың тарихта орны жоқ. .gitignore файлын жасап, тізіп жазыңыз:

blog
*.exe
.env

Git оларды байқамайтын болады. Ережесі қарапайым: тарихқа тек қолыңызбен жазғаныңыз түседі. go build пәрменімен алуға болатынның бәрін go build пәрменімен алады.

Құпиясөздер — бөлек әрі ерекшеліксіз. Тарихқа түскен құпиясөз файл өшірілгеннен кейін де сонда қала береді, ал оны сол жерден тазалау қиын.

Елестетіп көріңіз. Мұрағатқа тапсырылмайтын нәрсе. Жобалар, басып шығарылған қағаздар мен кофе стақаны үстелде қалады. Мұрағатқа құжаттар барады.

Кері оралу

Бәрі осы үшін басталған:

git log --oneline
git restore --source=HEAD~1 main.go

HEAD — қазіргі күй, HEAD~1 — алдыңғысы. Пәрмен файлды сол кездегі күйінде алып, қалтаға салады. Ештеңе жоғалмайды: соңғы жазба орнында, сіз одан көрші нұсқаны алдыңыз.

Кері жағдай да бар: шатастырып жіберіп, түзетулерді ұмытып, файлды соңғы жазбаға қайтарғыңыз келсе — git restore main.go. Абайлаңыз: сақталмағаны жоғалады.

Бүкіл курсқа арналған бір ереже

Сабақты аяқтағанда жазба жасаңыз. Терминалдағы бір жол, үш секунд.

Бір айдан кейін сізде отыз қадамнан тұратын, қалай оқығаныңыз көрінетін тарих болады. Жұмыс берушіге көрсететін де осы — «курстан өттім» емес, түсінікті хабарлары бар қырық жазба.

Сабақ картасы

Сабақ картасы: екі қадам — git add таңдайды, git commit жазып қояды

Өз сөзіңізбен айтыңыз

Қарамай, дауыстап немесе қағазға жазып жауап беріңіз. Жауаптары — сабақтың соңында.

  1. Неге қадам біреу емес, екеу — add пен commit?
  2. Тарихқа не түспеуі керек және неге?
  3. Файлды бүлдіріп алдыңыз да, кешегі нұсқасын қайтарғыңыз келеді. Қай екі пәрмен көмектеседі?

Тапсырма

Міндетті. Барлық сабағыңызға репозиторий ашыңыз: курстың ортақ қалтасында git init, жиналған бағдарламалары бар .gitignore, жазылып қойғанның бәрін қамтитын бірінші жазба. Содан кейін кез келген файлды түзетіп, git status пен git diff қараңыз, екінші жазба жасаңыз да, git log --oneline екеуін де көрсететініне көз жеткізіңіз.

Қалауыңызша.

  • git restore --source=HEAD~1 арқылы бірінші жазбадан файлды алып, мазмұны қайтқанына көз жеткізіңіз.
  • .gitignore ішіне *.log жолын қосып, test.log файлын жасаңыз да, git status оны байқамайтынын тексеріңіз.
  • git show HEAD орындап, Git бір жазбада нені сақтайтынын оқыңыз: кім, қашан, нақты нені.

Блогта қайда тұрады

Сіз оқып отырған курс Git ішінде тұрады: сабақтар да, карталар да, қадамдап жазылған блог та. Әр түзету — хабары бар жазба, кез келгенін қарауға болады.

Келесі сабақта тарих GitHub-қа көшеді: дәл сол нәрсе, бірақ басқа адамдарға көрінеді — жұмыс берушіге де.

Жауаптар

Жауаптарды көрсету
  1. Себебі жазу керегі — қолыңызбен ұстағанның бәрі емес, бітіп қалғаны. add таңдайды, commit таңдалғанды жазады. Бес файлды түзетіп, үшеуін жазып, қалғанын келесіге қалдыруға болады.
  2. Қолыңызбен жазылмағанның бәрі: жиналған бағдарлама, уақытша файлдар, ең бастысы — құпиясөздер мен кілттер. Жиналғанды go build пәрменімен әрқашан қайта алуға болады, ал тарихқа түскен құпиясөз файл өшірілгеннен кейін де сонда қалады.
  3. Жазбаларды көріп, керегін таңдау үшін git log --oneline, ал алдыңғы жазбадан файлды алу үшін git restore --source=HEAD~1 main.go.

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Тапсырманы тексеру

Алдымен VS Code-та шешіп, іске қосыңыз — редактор қатені сол жерде көрсетеді. Дайын шешімді осында қойыңыз. Тексеретін — модель: ол қатені атап көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.