Ачааллж байна...
Өмнөх хичээлд бид Python мэддэг байх, хөгжүүлэгч шиг ажиллах хоёрын хоорондын зайн тухай ярьсан. Тэр зайг хаах эхний бөгөөд хамгийн чухал хэрэгсэл бол Git юм. Энэ хичээлд бид ганц ч command бичихгүй. Учир нь Git-ийн command-ууд өөрсдөө хэцүү биш, харин тэдгээрийн цаадах санааг ойлгоогүй үед утгагүй тарни мэт санагддаг. Санааг нь эхлээд бүрэн ойлговол дараагийн хичээлүүдийн command бүр яг юу хийж байгаагаа өөрөө тайлбарлах болно. Тиймээс өнөөдөр бид Git гэж юу вэ, ямар асуудлыг шийддэг вэ, яагаад бараг бүх хөгжүүлэгч түүнийг ашигладаг вэ гэдгийг тайван, бүрэн ойлгоно.
Git бол version control систем юм. Version control гэдэг нь файлуудын өөрчлөлтийг цаг хугацааны дагуу бүртгэж хадгалдаг арга буюу хувилбарын хяналт гэсэн утгатай. Энгийнээр хэлбэл Git таны төслийн түүхийг хадгалдаг. Тэр түүхэнд хэзээ, юу, яагаад өөрчлөгдсөнийг бүртгэнэ. Шаардлагатай үед аль ч өмнөх агшин руу эргэж харах, буцах боломж олгоно. Git үнэ төлбөргүй, нээлттэй эх кодтой хэрэгсэл бөгөөд таны өөрийн компьютер дээр, интернэтгүй ч бүрэн ажилладаг.
Git-ийг ойлгох хамгийн сайн арга бол түүнийг гэрэл зургийн цомог гэж төсөөлөх явдал. Таны төсөл бол байнга өөрчлөгдөж, томорч буй нэгэн амьд зүйл гэж бодоорой. Яг л хүүхэд өсөхтэй адил өдөр бүр бага багаар өөрчлөгдөнө. Эцэг эхчүүд хүүхдийнхээ өсөлтийг гэрэл зургаар бичиж үлдээдэг шиг та ч төслийнхөө чухал агшнуудын зургийг авна. Git-ийн хэлээр тэр зургийг commit гэж нэрлэдэг. Commit бол тухайн мөчид таны төслийн бүх файл яг ямар байсны бүрэн агшин зуурын зураг юм. Англиар үүнийг snapshot гэдэг.
Цомгийн зураг бүрийн доор жижиг тайлбар бичдэг заншил бий: "Анхны алхам, 2026 оны хавар" гэх мэт. Git-ийн commit бүр ч яг ийм тайлбартай байдаг бөгөөд үүнийг commit message гэнэ. Жишээ нь "Зарлагыг ангиллаар шүүх боломж нэмсэн" гэсэн тайлбар. Мөн зураг бүр хэзээ авагдсан, хэн авсныг Git автоматаар тэмдэглэнэ. Иймээс хэдэн сарын дараа цомгоо нээхэд тухайн зураг хэзээ, ямар шалтгаанаар авагдсаныг шууд мэднэ. Энэ бол санах ойд бус, бүртгэлд тулгуурласан түүх юм.
Зүйрлэлийн хамгийн чухал хэсэг нь энэ: зураг авах нь зургийн обьектыг өөрчилдөггүй. Та цомогт зураг нэмсэн ч таны төсөл яг хэвээрээ үлдэж, та түүн дээрээ ажилласаар байна. Харин ямар нэг юм буруудвал цомгоо нээгээд "Өнгөрсөн мягмар гарагт бүх зүйл яг зөв ажиллаж байсан, тэр үеийн байдлыг харъя" гэж хэлж болно. Бодит амьдрал дээр хүүхэд өнгөрсөн насандаа буцаж чадахгүй. Харин таны код Git-ийн цомгийн аль ч зураг дээрх байдалдаа буцаж чадна. Энэ нь Git-ийн хамгийн хүчтэй чанар юм.
Нэг зүйлийг анхааралдаа аваарай: Git зургийг өөрөө, автоматаар авдаггүй. Хэзээ зураг авахыг та өөрөө шийднэ. Энэ нь сул тал мэт санагдаж болох ч үнэн хэрэгтээ давуу тал юм. Учир нь цомог тань хагас бичигдсэн, эвдэрсэн мөчүүдээр бус, утга бүхий, бүрэн алхмуудаар дүүрнэ. Сайн гэрэл зурагчин мөч бүрийг биш, чухал мөчүүдийг сонгож авдагтай адил.
Git юуг шийддэгийг ойлгохын тулд эхлээд Git-гүй ертөнцийг харъя. Таныг зарлагын бүртгэлийн программ дээрээ ажиллаж байна гэж төсөөлье. Программ сайн ажиллаж байгаа бөгөөд та ангиллаар шүүх шинэ боломж нэмэхээр шийдлээ. Гэхдээ одоо ажиллаж буй кодоо эвдчих вий гэж айгаад фолдероо бүхэлд нь хуулбарлаж, expense_tracker_backup гэж нэрлэв. Хоёр өдрийн дараа шүүлтүүр бараг бэлэн болсон ч өөр нэг алдаа гарсан тул дахиад хуулбарлаж, expense_tracker_final гэж нэрлэв. Түүнийг засах явцад дахин нэг хуулбар expense_tracker_final2 үүсч, эцэст нь expense_tracker_REAL_final гарч ирэв.
Нэг сарын дараа тэр фолдер руугаа харахад ямар асуултууд гарч ирэхийг бодоорой. Аль нь хамгийн сүүлийн, зөв ажилладаг хувилбар вэ? final болон final2-ын хооронд яг юу өөрчлөгдсөн бэ? backup дотор ямар нэг чухал зүйл үлдсэн, гэхдээ одоо мартагдсан байж болох уу? Нэрнүүд нь юу ч хэлэхгүй, учир нь “final” гэдэг үг агуулгын тухай бус, тухайн мөчийн итгэл найдварын тухай өгүүлж байна. Энэ бол нэг хүний залхуурал биш, дэлхий нийтийн хүн бүрийн туулдаг асуудал юм. Ажлын баримт бичиг, дипломын ажил, хуулийн бичиг баримтад ч яг ийм “final_v3” файлууд бий.
Одоо яг ижил нөхцөл байдлыг Git-тэй ертөнцөд харъя. Танд ганцхан фолдер байна, нэр нь зүгээр л expense_tracker. Харин түүний ард дараах цомог хадгалагдана:
"Анхны хувилбар: зарлага нэмэх, жагсаах"
"Зарлагыг JSON файлд хадгалдаг болгосон"
"Ангиллаар шүүх функц нэмсэн"
"Шүүлтүүрт хоосон ангилал орж ирэх алдааг зассан"
Тэр дөрвөн зураг бүр хэзээ авагдсан, яг ямар файлд, яг аль мөрөнд юу өөрчлөгдсөн бэ гэдэг нь бүрэн бүртгэлтэй. Та фолдероо хэзээ ч хуулбарлах шаардлагагүй, файлын нэрэнд “final” гэж бичих шаардлагагүй. Хүссэн үедээ аль ч зураг руу эргэж харна. Аль ч хоёр зургийн хооронд яг юу өөрчлөгдсөнийг Git танд мөр мөрөөр нь харуулна. Хэрэгтэй бол аль ч зургийн үеийн байдал руу буцаж болно.
Туршилт хийх айдас арилна. Таныг зарлагын бүртгэлийн кодоо бүхэлд нь шинээр зохион байгуулах санаа төрлөө гэж бодъё. Git-гүй бол ийм том өөрчлөлт аймшигтай санагдана, учир нь буцах зам тодорхойгүй. Харин Git-тэй бол та өөрчлөлтийн өмнө нэг зураг аваад зоригтойгоор туршина. Туршилт амжилттай болбол шинэ зураг авна. Амжилтгүй болбол өмнөх зураг дээрх байдал руугаа буцна. Энэ мэдрэмж таны програм бичих арга барилыг бүхэлд нь өөрчилдөг, учир нь та эвдэхээс айхаа больж, сурахын тулд туршдаг болно.
Алдаа хэзээ үүссэнийг олно. Зарлагын нийлбэр буруу гарч байгааг та гэнэт анзаарлаа гэж бодъё. Энэ алдаа хэзээ орж ирснийг та санахгүй, магадгүй гурван долоо хоногийн өмнө байж болно. Git-тэй бол цомгоо ухраан харж, нийлбэр зөв гарч байсан сүүлийн зургийг олно. Тэр зураг болон дараагийнх нь хооронд юу өөрчлөгдсөнийг харахад алдааны шалтгаан ихэнхдээ хэдхэн мөрөнд л байдаг. Олон цаг хайх ажил хэдхэн минутын ажил болно.
Яагаад гэдгийг санана. Хэдэн сарын дараа өөрийнхөө бичсэн кодыг хараад "Би яагаад үүнийг ийм хачин аргаар бичсэн юм бол?" гэж гайхах нь хөгжүүлэгч бүрийн туулдаг зүйл. Commit message энэ асуултад хариулдаг. Тухайн мөрийг аль зураг дээр нэмсэн бэ, тэр зургийн тайлбар юу гэж хэлж байна вэ гэдгийг харахад ихэнхдээ шалтгаан нь тодорхой болно. Жишээ нь “Windows дээр файлын замын алдаа гардаг тул ингэж өөрчилсөн” гэх мэт тайлбар. Иймээс сайн commit message бичих нь ирээдүйн өөртөө бичиж буй захидал юм.
Хоёр санаан дээр зэрэг ажиллана. Заримдаа та нэг шинэ боломж дээр ажиллаж байхдаа хуучин кодонд яаралтай алдаа засах шаардлагатай болно. Git-д branch буюу салаа зам гэдэг ойлголт бий. Түүгээр нэг цомгоос хоёр зэрэгцээ түүх салгаж, нэгийгээ нөгөөд нь саад болгохгүйгээр ажиллаж болно. Энэ сэдвийг бид Бүлэг 3-т бүрэн үзнэ. Одоохондоо Git-ийн цомог нэг шулуун шугам биш, хүсвэл салаалж бас нийлдэг гэдгийг л мэдэхэд хангалттай.
Компьютер эвдэрсэн ч код амьд үлдэнэ. Git-ийн цомог анх таны компьютер дээр л хадгалагдана. Харин Түвшин 2-т бид түүнийг GitHub гэдэг үйлчилгээн дээр, өөрөөр хэлбэл үүлэн дэх толь хувилбартаа хуулбарлаж сурна. Тэгвэл компьютер тань эвдэрсэн, алдагдсан ч таны төсөл түүх бүхэлдээ аюулгүй үлдэнэ. Шинэ компьютер дээр хэдхэн минутын дотор бүх түүхтэй нь эргүүлэн авна.
Git-ийг 2005 онд Linux үйлдлийн системийн үндсэн хөгжүүлэгч Linus Torvalds бүтээжээ. Түүний зорилго нь дэлхийн өнцөг булан бүрт тархсан мянга мянган хөгжүүлэгч нэг том төсөл дээр найдвартай хамтран ажиллах хэрэгсэл бий болгох байв. Тэр цагаас хойш Git аажмаар бусад бүх хувилбарын хяналтын системийг орлож, өнөөдөр салбарын стандарт болжээ. Таны ашигладаг Python хэл өөрөө ч Git ашиглан хөгжүүлэгддэг. Таны суулгадаг package-ууд, VS Code, мөн интернэтэд байгаа нээлттэй эх кодтой төслүүдийн дийлэнх нь Git-ээр удирдагддаг.
Энэ нь танд практик утгатай. Ажилд орохдоо Git мэдэх нь нэмэлт давуу тал биш, анхнаасаа хүлээгддэг суурь ур чадвар байдаг. Ажлын байрны зарын ихэнх нь Git-ийг нэрлэж бичдэг, нэрлээгүй ч мэддэг гэж үздэг. Мөн таны GitHub дээрх төслүүдийн түүх бол таны ажлын бодит нотолгоо болно. "Би Python мэднэ" гэж хэлэхээс "Миний бичсэн код, түүний хөгжлийн түүх энд байна" гэж үзүүлэх нь хавьгүй хүчтэй. Энэ сэдвийг бид Бүлэг 5-д эргэж ярина.
Хамгийн чухал нь Git нэг удаа сураад насан туршдаа хэрэглэдэг хэрэгсэл юм. Програмчлалын хэл, framework-ууд өөрчлөгдсөөр байх ч Git-ийн үндсэн санаа арван жилээс илүү хугацаанд бараг өөрчлөгдөөгүй. Өнөөдөр сурсан add, commit, branch, merge гэсэн ойлголтууд таны ирээдүйн аль ч төсөл, аль ч хэл дээр яг адилхан ажиллана. Энэ бол таны цагийн хамгийн үр ашигтай хөрөнгө оруулалтуудын нэг юм.
Хүсвэл өнгөрсөн хичээлд ажигласан хуучин төслийн фолдер руугаа дахин хараарай. Хэрвээ тэнд хэд хэдэн хуулбар байгаа бол тэдгээрийг Git-ийн цомгийн зургууд гэж төсөөлөөд, зураг бүрт ямар тайлбар бичих байсныг бодоод үзээрэй. Жишээ нь “final2” гэсэн нэрийн оронд "Нийлбэр тооцоолох алдааг зассан" гэх мэт. Хэрвээ аль хуулбарт юу өөрчлөгдсөнийг санахгүй байвал энэ нь Git яг юуны төлөө байдгийг харуулж байна. Энэ бол зөвхөн бодох дасгал бөгөөд юу ч өөрчлөх шаардлагагүй.
Git ба GitHub бол нэг зүйл. Энэ бол хамгийн түгээмэл төөрөгдөл. Git бол таны компьютер дээр ажилладаг хэрэгсэл, цомгийг хөтөлдөг программ юм. GitHub бол Git-ийн цомгуудыг интернэтэд хадгалж, бусадтай хуваалцах боломж олгодог вэб үйлчилгээ. Цомог ба цомгийг хадгалдаг номын сан хоёрын ялгаатай адил. Та GitHub-гүйгээр Git-ийг бүрэн ашиглаж болно, харин эсрэгээрээ боломжгүй.
Git бүх зүйлийг автоматаар хадгалдаг. Үгүй. Зүйрлэлд дурдсанчлан Git зөвхөн таны авахаар шийдсэн зургийг л хадгална. Хэрвээ та өдөржин ажиллаад нэг ч commit хийгээгүй бол тэр өдрийн ажил Git-ийн түүхэнд байхгүй. Тиймээс цаашид бид хэзээ, хэр давтамжтай commit хийх вэ гэдэг дадлын тухай ярина. Энэ нь Бүлэг 2-ын гол сэдвүүдийн нэг.
Git бол зөвхөн кодонд зориулагдсан. Git ямар ч текст файлтай сайн ажилладаг. Тэмдэглэл, баримт бичиг, тохиргооны файл ч Git-д хадгалж болно. Харин том зураг, видео зэрэг файлуудын хувьд Git тийм ч үр ашигтай биш бөгөөд энэ сургалтад бид голчлон Python код болон түүнтэй холбоотой текст файлуудтай ажиллана.
Git нь фолдерыг дахин дахин хуулбарлаж байгаа юм. Commit бүр төслийн бүрэн зураг мөн боловч Git өөрчлөгдөөгүй файлуудыг дахин хадгалдаггүй. Тэр өмнөх зураг дээрх яг тэр файлыг дахин ашиглана. Иймээс олон зуун commit-тэй төсөл ч таны компьютерт бага зай эзэлдэг. Энэ нь гараар хуулбар хийх аргаас хавьгүй хэмнэлттэй.
Git бол version control систем буюу таны төслийн түүхийг бүртгэж хадгалдаг хэрэгсэл юм. Үүнийг гэрэл зургийн цомог гэж төсөөлж болно. Commit бол тухайн мөч дэх бүх файлын агшин зуурын зураг бөгөөд commit message нь түүний тайлбар. Зургийг хэзээ авахыг Git биш, та өөрөө шийднэ. Git нь “final_v2_REAL” хуулбаруудын эмх замбараагүй байдлыг арилгаж, туршилт хийх айдсыг алга болгож, алдаа хэзээ үүссэнийг олоход тусалдаг. Git ба GitHub хоёр өөр зүйл: эхнийх нь цомог, хоёр дахь нь түүнийг интернэтэд хадгалах газар. Git бол салбарын стандарт бөгөөд нэг удаа сурч, насан туршдаа хэрэглэх ур чадвар.
Дараагийн хичээлд бид онолоос практик руу шилжинэ. Windows компьютер дээрээ Git-ийг алхам алхмаар суулгаж, зөв суусныг шалгаж, Git-д өөрийгөө танилцуулна. Тэр танилцуулга нь таны авах зураг бүрийн доор "хэн авсан" гэдгийг бичих нэр, имэйлийг тохируулах явдал юм.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.