ការគ្រប់គ្រងកំណែរ (Version Control) ដោយប្រើកម្មវិធីគ្រប់គ្រងកំណែរ Git និងសេវាកម្មគ្រប់គ្រងកំណែរ Github

តើអ្វីទៅជាការគ្រប់គ្រងកំណែរ?
ការគ្រប់គ្រងកំណែរ (Version Control) ជាវិធីមួយដែលក្រុមអ្នកសរសេរកូដអាចគ្រប់គ្រង និងកំណត់សម្គាល់រាល់កូដដែលបានកែប្រែនៅក្នុងគម្រោងរបស់ពួកគេ។ ពេលប្រើកម្មវិធីគ្រប់គ្រងកំណែរ គេអាចកំណត់សម្គាល់រាល់កំណែរប្រែទាំងអស់ មិនថាកូដ ហ្វាល់ ឫក៏អីផ្សេងៗទៀតផងដែរ។ មិនត្រឹមតែអាចកំណត់រាល់កំណែរប្រែទេ យើងអាចថែមទាំងប្ដូរពីកំណែរមួយទៅកំណែរមួយទៀតយ៉ាងងាយស្រួល។ ឧទាហរណ៍ថា យើងបានរក្សាកូដយើងជាកំណែរទី ១ កំណែរទី ២ និងកំណែរទី ៣ ហើយកំណែរទី ៣ នេះមានបញ្ហាមិនអាចដំណើរការបាន នោះយើងអាចត្រលប់ទៅកំណែរមុន កំណែរទី ១ ឫកំណែរទី ២ បានយ៉ាងងាយស្រួលដោយគ្រាន់តែប្រើ command តែមួយបានបាត់ទៅហើយ។
ជាទូទៅរាល់គម្រោង Software នីមួយៗ យើងច្រើនតែធ្វើការជាក្រុម។ ការគ្រប់គ្រងកំណែរក៏បានជួយឲ្យការធ្វើការងារជាក្រុមមានប្រសិទ្ធភាព និងដំណើរការរលូនបានផងដែរ។ កម្មវិធីគ្រប់គ្រងកំណែរដូចជា Git អនុញ្ញាត្តឲ្យយើងអាចរក្សាទុកកំណែរកូដក្នុង Repository មួយដែលអាចចែកជា Branch ផ្សេងៗបាន។ វាមានន័យថាបើសមាជិកនៃក្រុមមួយធ្វើការលើមុខងារទី ១ ហើយសមាជិកទី ២ ធ្វើការលើ Bugs គេអាចបែងចែកវាជា Branches ផ្សេងគ្នាបានដែលធ្វើឲ្យការធ្វើការមិនជាន់គ្នាបាន ហើយគេអាចច្របាច់បញ្ចូលគ្នា (Merge) វិញបានពេលធ្វើរួចរាល់។ គេដឹងយ៉ាងច្បាស់ថាមានអីត្រូវបានកែប្រែខ្លះ ហើយកែដោយសមាជិករូបណា នៅពេលណា ហើយមានកូដណាដែលជាន់គ្នាខ្លះដែលធ្វើឲ្យសមាជិកនីមួយៗក្នុងក្រុមយល់ដឹងត្រូវគ្នា។
មកស្គាល់ VCS ឫ កម្មវិធីគ្រប់គ្រងកំណែរ និង VCS Service Provider
VCS (Version Control System) ឫ កម្មវិធីគ្រប់គ្រងកំណែរ ជាកម្មវិធីសម្រាប់ធ្វើការគ្រប់គ្រងកំណែរនឹងឯង។ ខ្ញុំសុំមិននិយាយដល់កម្មវិធីគ្រប់គ្រងកំណែរផ្សេងទៀតទេដោយនិយាយតែពី Git តែម្ដង ព្រោះថាសព្វថ្ងៃនេះគ្មានអីល្អជាង Git ទេសម្រាប់កម្មវិធីគ្រប់គ្រងកំណែរ។
Git កើតចេញពីបញ្ហាដែលគេបានជួបប្រទះច្រើនសម្រាប់គម្រោង Software។ កាលនោះលោក Linus Torvalds ដែលជាស្ថាបនិក Linux ដែលគាត់បានកំពុងធ្វើការលើ Linux Kernal បានមិនពេញចិត្តនឹងកម្មវិធីគ្រប់គ្រងកំណែរដែលបានសម័យនោះ ហើយគាត់បានសម្រេចចិត្តថាគាត់ត្រូវសរសេរវាឡើងមកដោយខ្លួនឯងដើម្បីឲ្យការគ្រប់គ្រងគម្រោងសូហ្វវែរ៍មានភាពងាយស្រួល និងមានប្រសិទ្ធិភាពជាងមុន។ គាត់បានបញ្ចេញ Git ឲ្យប្រើប្រាស់ដំបូងនៅឆ្នាំ ២០០៥ ហើយចាប់តាំងពីពេលនោះមកវាពេញនិយមយ៉ាងខ្លាំងសឹងតែរាល់ថ្ងៃគ្មានអីផ្សេងល្អជាងនេះទេ។
លក្ខណៈពិសេសរបស់ Git ៖
០. ល្បឿនលឿន និងជាកម្មវិធីគ្រប់គ្រងកំណែរទំនើបចុងក្រោយ
១. កំណត់ត្រារាល់កំណែរប្រែក្នុងគម្រោង ពេលណា ដោយនណា អីខ្លះជាដើម
២. ជួយឲ្យការធ្វើការជាក្រុមមានប្រសិទ្ធភាព និងមានភាពងាយស្រួល
៣. ភាពងាយស្រួលក្នុងការតម្លើង និងក្នុងការប្រើប្រាស់ សម្រាប់អ្នកផ្សេងៗក្នុងគម្រោងដោយមានទាំង Terminal Version និង Graphical Version
៤. អាចយកមកប្រើបានមិនត្រឹមសម្រាប់តែគម្រោងសហ្វវែរ៍ទេ គម្រោងអីផ្សេងទៀតក៏អាចប្រើផងដែរ។
រាល់គម្រោងដែលបានប្រើ Git មិនទាមទារឲ្យយើងប្រើ Server អីទេគឺយើងអាចប្រើបែប Local Repository បាន។ តែបើយើងត្រូវធ្វើការជាក្រុម និងចែករំលេកកូដជាមួយសមាជិកក្រុមផ្សេងទៀត យើងអាចប្រើ Remote Repository បានដោយប្រើសេវាដោយពពួក VCS Service Providers បានដូចជា Github និង Gitlab ជាដើមដែលភាគច្រើនឥតគិតថ្លៃ អាចដាក់ជាគម្រោង Private បាន និងមានភាពងាយស្រួលមែនទែន។
សូមកុំច្រឡំគ្នារវាង Version Control System (ដូចជា Git) និងពួក Version Control System Service Providers (ដូចជា Github និង Gitlab)។ ពីរនេះជារឿងផ្សេងគ្នាទេ។
តម្លើង Git និងការប្រើ Git ក្នុង Terminal/Bash
តំបូងយើងទៅដោនឡូដ Git ពី https://git-scm.com/downloads ទៅតាមប្រព័ន្ធប្រតិបត្តិការរបស់យើង ហើយចុចតម្លើងដូចកម្មវិធីផ្សេងៗទៀតដែរតាមធម្មតា។ បើសិនជាយើងតម្លើងបានត្រឹមត្រូវហើយ យើងនឹងអាចដំណើរការបញ្ជារខាងក្រោមនេះបាន ហើយយើងនឹងឃើញជំនាន់របស់ Git ដែលយើងបានបញ្ចូល។
git --version
បន្ទាប់ពីនេះខ្ញុំតែងតែកំណត់ Git Auto-Completion និងកំណត់រូបរាងរបស់ Terminal ឲ្យមាន Color Highlight និងស្គាល់រាល់ពាក្យបញ្ជាររបស់ Git ដូចវីដេអូខាងក្រោម៖
ការប្រើ Git កម្មវិធីគ្រប់គ្រងកំណែរជាមួយនឹង Github
សម្រាប់ការប្រើបាស់ Git យើងត្រូវដឹងពីចំនុចគន្លឹះរបស់ Git ដូចខាងក្រោម៖
0. Init Project ដំឡើង Git ក្នុងគម្រោង
យើងចូលទៅកាន់ Directory ដែលផ្ទុកគម្រោងរបស់យើង យើងដំណើរការបញ្ជារខាងក្រោមនេះដើម្បីបើកប្រើ Git ក្នុងគម្រោងរបស់យើង៖
git init
បន្ទាប់ពីដំណើរការបញ្ជារនេះហើយ យើងនឹងមាន Directory មួយឈ្មោះថា .git ដែលផ្ទុកទិន្នន័យរបស់ Git ក្នុងគម្រោងដែលយើងបានដំឡើង។

១. ត្រៀម Commit (Stage Files) និង Commit
ការ Commit ជាការកត់ត្រាប្រវត្តិរបស់ File ដែលមាននៅក្នុងគម្រោងយើង។ រាល់ការ Commit ម្ដងៗ យើងត្រូវជ្រើសរើស File ដែលយើងចង់ Commit (Add to Stage) ជាមុនសិន ហើយនិងចុងក្រោយ Commit។
git status //មើលថាយើងមាន File ដែលបានកែប្រែអីខ្លះ
git add <filename> // ជ្រើសរើស File ដែលចង់ Commit ឫគ៏ដាក់បញ្ចូលទៅ Stage
git add . // ជ្រើសរើស File ទាំងអស់ដែលប្រែប្រួល
git commit -m "Note" // Commit ជាមួយនឹងសេចក្ដីអធិប្បាយពី Commit នោះ
git log // មើលថាយើងបាន Commit តាំងពីពេលណា និងដោយនណា
ឧទាហរណ៍ដូចខាងក្រោម៖


២. បង្កើត Repository លើ Github
យើងចូលទៅកាន់ https://github.com ហើយបើមិនទាន់មាន Account យើងអាចបង្កើត Account មកហើយចូល នោះយើងនឹងឃើញទំព័រដូចខាងក្រោមដែលយើងអាចបង្កើត Repository សម្រាប់គម្រោងរបស់យើងបានដោយចុច New នៅផ្នែក Repository ខាងឆ្វេងដៃ។

រួចបំពេញព័ត៌មានរបស់ Repository របស់យើង ដែលមានឈ្មោះ កំណត់ថាវាជាគម្រោងជាបើកចំហរ ឫជា Private ដូចរូបខាងក្រោមនេះ។

ពេលដែលយើងចុច Create repository ហើយ យើងនឹងបាន Repository មួយដូចខាងក្រោមនេះដែលយើងអាចភ្ជាប់ទៅនឹង Local Repository ដែលយើងបានបង្កើតពីខាងលើមក។

៣. ភ្ជាប់ Repository លើ Github ទៅ Local Repository យើង
បន្ទាប់ពីមាន Remote Repository នៅលើ Github ហើយយើងអាចភ្ជាប់វាទៅនឹង Local Repository ដែលយើងបានបង្កើតនៅជំហ៊ានទី ០ និង ១ បានដែលវាអាចឲ្យយើងរក្សាទុកវានៅ Online ងាយស្រួលក្នុងការចែករំលេកជាមួយសមាជិកក្រុមផ្សេងទៀត។

យើងត្រលប់មកក្នុង Terminal យើងវិញ ហើយយើងដំណើរការបញ្ជារដូចខាងក្រោម៖
git remote add origin <repository url> // ភ្ជាប់ Remote Repository
git push -u origin master // បង្ហោះ Git ឡើង Github យើង

បើសិនជាយើងមិនទាន់បាន login ទេ នោះវានឹងទារឲ្យ login សិនដើម្បីបញ្ជាក់ថាយើងមានសិទ្ធក្នុងការ push កូដចូលក្នុង repository បាន ហើយបើយើងមកមើលក្នុង Repository យើងនឹងទទួលបានដូចក្នុងរូបខាងក្រោមនូវរាល់កូដដែលយើងបាន Commit កន្លងមក។

មកដល់ត្រឹមនេះ យើងបានប្រើ Git បែបមូលដ្ឋានគ្រឹះបានហើយ ហើយខ្ញុំសុំសរសេរត្រឹមនេះសិនក្នុងអត្ថបទនេះ នឹងប្រហែលជាមានអត្ថបទបន្ថែមទៀតនិយាយឲ្យបានជ្រៅជាងនេះ។
ចូលចិត្តប្រើបែប UI ជាង? Github Desktop និង SourceTree
ជាទូទៅសម្រាប់ខ្ញុំផ្ទាល់ ខ្ញុំចូលចិត្តប្រើ Git នៅលើ Terminal ជាងប្រើ GUI។ តែបើយើងមិនចូលចិត្តប្រើ Terminal ទេ យើងក៏អាចប្រើ GUI បានដែរ ហើយវាក៏មានភាពងាយស្រួលដែរ។ GUI ដែលខ្ញុំធ្លាប់បានសាកហើយងាយស្រួលប្រើមាន Github Desktop និងមួយទៀត SourceTree។ សូមមើលវីដេអូខាងក្រោមសម្រាប់ការណែនាំពីវិធីប្រើវា៖
សរុបសេចក្ដី
ក្នុងអត្ថបទនេះយើងបានស្គាល់ពីអីទៅជាការគ្រប់គ្រងកំណែរ កម្មវិធីគ្រប់គ្រងកំណែរ និងសេវាកម្មកម្មវិធីគ្រប់គ្រងកំណែរ។ ហើយយើងក៏បានសាកល្បងប្រើវាបានបន្តិចដែរដោយបង្កើតជា Local Repository និង Remote Repository។ ខ្ញុំសង្ឃឹមថាអត្ថបទនេះអាចជួយសម្រួលការយល់ពីការគ្រប់គ្រងកំណែរនេះបានខ្លះ។ ខ្ញុំនឹងសរសេរបន្តទៀតដោយនិយាយដល់ការប្រើប្រាស់ស៊ីជម្រៅជាងនេះនៅអត្ថបទក្រោយៗទៀត។ ជួបគ្នាលើកក្រោយ!
Reference:
0. https://git-scm.com
1. https://medium.com/gradeup/version-control-system-get-up-to-speed-with-git-ea25b5cb7329
2. https://github.com
3. https://en.wikipedia.org/wiki/Git
4. https://git-scm.com/book/en/v2
5. http://www.intelliware.com/wp-content/uploads/Source-Control-Best-Practices-Web.pdf
6. https://www.atlassian.com/git/tutorials/what-is-version-control
7. https://vimeo.com/41027679