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-ті өшірсеңіз — файлдардың соңғы нұсқасы бар кәдімгі қалта қалады, тарих жоғалады.
Репозиторийді жобаға бір рет ашады. Әр сабақтың қалтасына бөлек емес, бүкіл курсқа біреуін — сонда жұмысыңыздың қалай өсіп келе жатқанын көресіз.
Үш орын: қалта, индекс, тарих
Бәрі осы жерде сүрінеді, сондықтан бірден есте сақтаған жөн.
- Жұмыс қалтасы — сіз түзетіп жатқан файлдар. Git оларды көреді, бірақ ештеңе істемейді.
- Индекс — келесі жазбаға өзіңіз таңдағаны. Оған
git addсалады. - Тарих — жазылып қойған күйлер. Оған
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. Абайлаңыз: сақталмағаны жоғалады.
Бүкіл курсқа арналған бір ереже
Сабақты аяқтағанда жазба жасаңыз. Терминалдағы бір жол, үш секунд.
Бір айдан кейін сізде отыз қадамнан тұратын, қалай оқығаныңыз көрінетін тарих болады. Жұмыс берушіге көрсететін де осы — «курстан өттім» емес, түсінікті хабарлары бар қырық жазба.
Сабақ картасы
Өз сөзіңізбен айтыңыз
Қарамай, дауыстап немесе қағазға жазып жауап беріңіз. Жауаптары — сабақтың соңында.
- Неге қадам біреу емес, екеу —
addпенcommit? - Тарихқа не түспеуі керек және неге?
- Файлды бүлдіріп алдыңыз да, кешегі нұсқасын қайтарғыңыз келеді. Қай екі пәрмен көмектеседі?
Тапсырма
Міндетті. Барлық сабағыңызға репозиторий ашыңыз: курстың ортақ қалтасында 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-қа көшеді: дәл сол нәрсе, бірақ басқа адамдарға көрінеді — жұмыс берушіге де.
Жауаптар
Жауаптарды көрсету
- Себебі жазу керегі — қолыңызбен ұстағанның бәрі емес, бітіп қалғаны.
addтаңдайды,commitтаңдалғанды жазады. Бес файлды түзетіп, үшеуін жазып, қалғанын келесіге қалдыруға болады. - Қолыңызбен жазылмағанның бәрі: жиналған бағдарлама, уақытша файлдар, ең бастысы — құпиясөздер мен кілттер. Жиналғанды
go buildпәрменімен әрқашан қайта алуға болады, ал тарихқа түскен құпиясөз файл өшірілгеннен кейін де сонда қалады. - Жазбаларды көріп, керегін таңдау үшін
git log --oneline, ал алдыңғы жазбадан файлды алу үшінgit restore --source=HEAD~1 main.go.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.