Git இன்கருத்தமைவுக்கள்

Git ஆனது அடுத்த தலைமுறைக்கு குறிமுறைவரிகளைச் சேமித்து கொண்டு செல்வதையே தன்னுடை இயல்பாக கொண்டுள்ளது. இன்று 93% இற்கு மேற்பட்ட மேம்படுத்துநர்கள் தங்களுடைய முதன்மை பதிப்பு கட்டுப்பாட்டு அமைப்பு எதவுவென கேட்டவுடன் Git எனதெரிவிக்கின்றனர். பதிப்புக் கட்டுப்பாட்டைப் பயன்படுத்திய எவருக்கும் git add, git commit, git push ஆகியன பற்றி நன்கு தெரிந்திருக்கும். பெரும்பாலான பயனர்கள் Git உடன் தங்களுடைய பணிகளை செய்யத் திட்டமிடுகின்றனர், மேலும் அவர்கள் அதில் வசதியாக இருப்பதாக உணருகின்றனர். Git ஆனதுஅவர்களின் தேவைக்காக மட்டுமே செயல்படுகிறது.
எது எவ்வாறு இருந்தாலும், ஏறக்குறைய நாமனைவரும் அவ்வப்போது, git rebase அல்லது git cherry-pick அல்லது ஒரு பிரிந்த தலைமையிலான நிலையில் செயல்படுவது போன்ற ஒன்றினை அல்லது இன்னும் கொஞ்சம் மேம்பட்ட ஒன்றைச் செய்ய வேண்டிய அவசியத்தை எதிர்கொள்கின்றனர். இங்குதான் பல மேம்படுத்துநகள் சற்று பதற்றமடையத் தொடங்குகிறார்கள்.Git ஐ வைத்திருக்கும் அல்லது பயன்படுத்த விரும்பும் அனைவரும் அதே பீதியை அனுபவித்திருப்பார்கள். பரவாயில்லை அவ்வாறு பதட்டமடையாதீர்கள்!

Git அருமையானதொன்றாகும், ஆனால் அதனை கற்றுக்கொள்வது என்பது மட்டும் நம்மை பயமுறுத்துகிறது, மேலும் இது சில நேரங்களில் முற்றிலும் நமக்கு குழப்பமாககூட இருக்கக்கூடும். Git என்பது கணினி அறிவியலில் உள்ள வேறு எதையும் போன்றது அன்று. பொதுவாக அதை துண்டு துண்டாக கற்றுக்கொள்ளலாம், குறிப்பாக மற்ற குறிமுறைவரிகளின் பணிகளின் சூழலில். பெரும்பாலான மேம்படுத்துநர்கள் ஒரு விரைவான பயிற்சியைத் தாண்டி Git ஐ முறையாகப் படித்ததில்லை என்பதே உண்மையான களநிலவரமாகும்.

Git என்பது ஒரு கட்டற்ற மென்பொருளாகும், அதாவது அதனுடை.ய குறிமுறைவரிகள் அனைத்து பகுதியையும் நாம் ஆய்வு செய்து அது எவ்வாறு செயல்படுகிறது என்பதைப் பார்க்க நமக்கு முழுச்சுதந்திரம் உள்ளது. முக்கியமாக இந்த பயன்பாடானது C எனும் கணினிமொழியில் எழுதப்பட்டுள்ளது, என்பதால் இது பல மேம்படுத்துநர்களுக்கும் கணினி அறிவியலைக் கற்பவர்களுக்கும் புரிந்துகொள்வதை கடினமாக்குகிறது. அதே நேரத்தில், ஆவணங்கள் செய்திகளின் அளவுருக்கள் , commit-ish போன்ற சொற்களைப் பயன்படுத்துகின்றன. இதனால் பலர் கொஞ்சம் குழப்பமாக இருப்பதாக கூடஉணரலாம். மேலும்Git ஒரு மேம்பட்ட லினக்ஸ் நிபுணருக்காக எழுதப்பட்டது போன்றுகூட உணரலாம். ஏனென்றால் அது முதலில் அவ்வாறுதான இருந்தது.

Gitஐ பற்றிய ஒரு சுருக்கமான வரலாறு

துவக்கத்தில் ஒட்டுகளை( patches) நிர்வகிப்பதற்கு லினஸ் டொர்வால்ட்ஸ என்பவருக்கான ஒரு குறிப்பிட்ட உரைநிரல் தொகுப்பாக Git என்பது துவங்கப்பட்டது.
லினக்ஸின் உருவாக்கமைய அஞ்சல் பட்டியலில் Git ஆக மாறுவதை அவர் எவ்வாறு அறிமுகப்படுத்தினார் என்பதைகூட அதன் வரலாற்றில் காணலாம்:
எனவே செய்திகளை விரைவாகக் கண்காணிக்க சில உரைநிரல்களை எழுதப்படுகின்றன. ஆரம்ப அறிகுறிகள் என்னவென்றால், ஒரு ஒட்டினை ( patche) எவ்வளவு விரைவாகப் பயன்படுத்த முடியுமோ அவ்வளவு விரைவாக அதைச் செயற்படுத்திட முடியும், ஆனால் வெளிப்படையாக கூறுவதெனில், பாதியிலேயே கூடமுடித்துவிடலாம் மேலும் ஒரு சிக்கலைத் தாக்கினால், அது உண்மையானதன்று. எப்படியிருந்தாலும்,அதை விரைவாகச் செய்யக் காரணம் என்னவென்றால், உரைநிரலகள் ஒரு SCM ஆக இருக்காது என்பதால்தான், அவை மிகவும் குறிப்பிட்ட “log Linus’ state” வகையாக இருக்கும். இது நேர்கோட்டு (linear) போன்ற ஒருஒட்டினை( patche) அதிக நேரத்தினை மிச்சபடுத்திடுவதற்காக ஒன்றிணைப்பதால், இதனால் சாத்தியமாகின்றது.
Git எவ்வாறு இயங்குகிறது என்பதைப் பற்றி குழப்பமடைபவர்களில் செய்யும் செயல்களில் முதலாவது ஒட்டுகளை( patches) நிர்வகிப்பதற்கு Linus அதை ஏன் பயன்படுத்தினார் அதை எவ்வாறு பயன்படுத்திஇருப்பார் எனக்கற்பனை செய்வதாகும். ஆனால் இன்று அதை விட பலவற்றைக் கையாளும் அளவிற்கு இது வளர்ந்துள்ளது உண்மையில் இது ஒரு முழு SCM ஆகும், ஆனால் முதல் பயன்பாட்டு வழக்கையை நினைவில் கொள்வது என்பது சில நேரங்களில் “ஏன்” என்பதைப் புரிந்துகொள்வதற்கு உதவியாக இருக்கும்.

Git commit
Git இல் பணியின் முக்கிய கருத்தியல் அலகு அர்ப்பணிப்பு ஆகும். இவை செயல்திட்டக் கோப்புறையில் (.git கோப்புறை இருக்கும் இடத்தில்) கண்காணிக்கப்படும் கோப்புகளின் படகாட்சிகளாகும்.

1
கோப்பு முறைமையின் சுருக்கப்பட்ட படகாட்சிகளை Git சேமிக்கிறது, வேறுபாடுகளை அல்ல என்பதை கண்டிப்பாக நினைவில் கொள்க. எந்த நேரத்திலும் ஒரு கோப்பை மாற்றினால், அந்தக் கோப்பின் முழுப்பதிப்பும் சுருக்கப்பட்ட புதிய பதிப்பாக உருவாக்கப்பட்டு இந்தக் commit இல் சேமிக்கப்படும். கோப்பிற்கு வெளியே ஒரு முதன்மையானசுருக்கமாக செய்யப்பட்ட இரும (Binary )பேரளவு பொருளை(blob) உருவாக்கி, SHA இன் hashing தருக்கங்களின் அடிப்படையில் ஒரு checksum உருவாக்குவதன் வாயிலாக அதைக் கண்காணிப்பதன் மூலம் இதைச் செய்கிறது. இது Git வரலாற்றின் நிரந்தரமானது, Git செயல்திட்டப்பணிகளில் உணர்திறன் தரவைச் சேமித்து வைப்பதோ அல்லது hardcode செய்வதோ இன்றியமையாத ஒரு காரணமாகும். clone the repo செய்யக்கூடிய எவருக்கும் கோப்புகளின் அனைத்து பதிப்புகளுக்கும் முழு அணுகல் உள்ளது.
Git உண்மையில் திறமையானது. ஒரு கோப்பு commits களுக்கு இடையில் மாறவில்லை எனில், சேமிப்பிற்காக Git ஒரு புதிய சுருக்கப்பட்ட பதிப்பை உருவாக்காது. அதற்கு பதிலாக, இது முந்தைய உறுதிப்பாட்டைக் குறிக்கிறது. எல்லா commits களும் அதற்கு முன் நேரடியாக என்ன வந்தது என்பதை காண அதன் முந்தைய செயல் அழைக்கின்றன. git log ஐ இயக்கும் போது, இந்த சங்கிலித் தொடர்களை எளிதாகக் காணலாம்.

2
இந்தக் commits களின் மீது நமக்கு முழுக் கட்டுப்பாடு உள்ளது அவற்றைக் கொண்டு சில அழகான செயல்களைச் செய்யலாம். பொருத்தமாக அவற்றை உருவாக்கலாம், நீக்கலாம், ஒன்றிணைக்கலாம் மறுவரிசைப்படுத்தலாம். பல்வேறு காலங்களில் திறம்பட பயணிக்கலாம், ஆய்வுசெய்திடலாம் உறுதிமொழிகளை எழுதலாம். ஆனால் இவை அனைத்தும் பொதுவாக கிளைகள் என குறிப்பிடப்படும் commits களின் சங்கிலிகளை Git எவ்வாறு காண்கிறது என்பதைப் புரிந்துகொள்வதில்தான்உள்ளது.

Git branches
ஒரு செயல்திட்டத்திற்குள் பல சங்கிலித் தொடர்களுடன் பணிபுரிய கிளைகள் உதவுகின்றன. பல கிளைகளுடன் பணிபுரிவது (குறிப்பாக rebase பணிபுரியும் போது) பல பயனர்கள் பயப்பட ஆரம்பிக்கிறார்கள். கிளைகள் என்ன என்பது பற்றிய பொதுவான நம்முடைய மன மாதிரியானது குழப்பத்தை அதிகரிக்கிறது.

கிளைகளைப் பற்றி சிந்திக்கும்போது, பெரும்பாலான மக்கள் நீச்சல் பாதைகள்(swim lanes) , திசைதிருப்பல் , வெட்டும் புள்ளிகளின் படங்களை கற்பனை செய்கிறார்கள். குறிப்பிட்ட கிளை உத்திகளை பணிப்பாய்வுகளைப் புரிந்துகொள்வதில் அந்த மாதிரிகள் உதவியாக இருக்கும் அதே வேளையில், Git ஒரு வரைபடத்தில் எண்ணிடப்பட்ட புள்ளிகளின் வரிசையாக Git ஐ நினைப்பது, Git அதை எவ்வாறு செய்கிறது என்பதைப் பற்றி சிந்திக்க முயலும் போது தண்ணீரில் சேறும் சகதியும் கலந்தது போன்றதாகும்.

ஒரு பெரிய விரிதாளில் இருக்கும் கிளைகளைப் பற்றி யோசிப்பது உதவியாக இருக்கும் ஒரு மாற்று மன மாதிரியின். முதல் நெடுவரிசையில் பெற்றோர் commit ID, இரண்டாவதில் புதிய commit ID, அதன்பின்னர் மீப்பெரும்தரவிற்கான நெடுவரிசைகள் உள்ளன, இதில் அனைத்து சுட்டிகளும் உள்ளடங்கும்.

3
சுட்டிகள் நாம் எங்கிருக்கின்றோம், எந்தக் கிளை என்ன என்பதைக் கண்காணிக்கின்றன. இங்கு சுட்டிகள் (Pointers) என்பது குறிப்பிட்ட commitகளுக்கு மனிதர்கள் படிக்கக்கூடிய வசதியான குறிப்புகளாகும். ஒரு குறிப்பிட்ட உறுதிப்பாட்டிற்கு வழிவகுக்கும் எந்தவொரு குறிப்பும் commit-ish என குறிப்பிடப்படுகிறது.

ஒரு கிளைக்கு பெயரிட பயன்படுத்தப்படும் சிறப்பு சுட்டி எப்போதும் சங்கிலியின் புதிய உறுதிப்பாட்டைக் குறிக்கிறது. அசையாத git tagஐ கொண்ட எந்தவொரு உறுதிப்பாட்டிற்கும் நாம் தன்னிச்சையாக ஒரு சுட்டியை ஒதுக்கலாம். checkout அல்லது அதன் கிளைகளுக்கு இடையில் Git மாறிடும்போது, Git இன் குறிப்பு புள்ளியை மாற்ற விரும்புகின்றோம் என்றாலும் ஒவ்வொரு .git கோப்புறையிலும் HEAD எனப்படும் ஒரு சிறப்பு சுட்டியை நகர்த்த வேண்டும் என்றாலும்நாம் உண்மையில் Git க்கு சொல்ல வேண்டும்.

git folder
Git உடன் என்ன நடக்கிறது என்பதைப் புரிந்துகொள்வதற்கான சிறந்த வழிகளில் ஒன்று .git கோப்புறையை(git folder) தோண்டி எடுக்க வேண்டும். இதற்கு முன் இந்தக் கோப்பைத் திறக்கவில்லை எனில், அதைத் திறந்து அதில் என்ன இருக்கிறது என்பதைப் பார்க்க மிகவும் ஊக்குவிக்கிப்படுகின்றது. மிகவும் பதட்டமாக இருந்தால், எதையாவது உடைக்கலாம், சொந்த செயல்திட்ட களஞ்சியங்களைப் பார்க்க நம்பிக்கையுடன் இருக்கும் வரை விளையாடுவதற்கு ஒரு தன்னிச்சையான திறமூல செயல்திட்டத்தை clone செய்க.

4
கோப்புகள் எவ்வளவு சிறியவை என்பதை நாம் கவனிக்கும் முதல் செய்திகளில் ஒன்றாகும். பெரிய அளவில் பைட்டுகள் அல்லது கிகாபைட்டுகளின் அடிப்படையில் செய்திகள் அளவிடப்படுகின்றன. அவைகளை கையாளுவதில்Git மிகவும் திறமையானது!

HEAD
இங்கே .git கோப்புறையில், சிறப்பு கோப்பின் HEAD ஐக் காணலாம். இது மிகவும் சிறிய கோப்பு, ஒரு சில பைட்டுகள் மட்டுமே கொண்டு அதைத் திறந்தால், அதில் ஒரே ஒரு கட்டளைவரி மட்டுமே இருப்பதை காணலாம்.

5
Git பற்றி படிக்கும் போது அடிக்கடி சந்திக்கும் சொற்றொடர்களில் ஒன்று “everything is local.”என்பதாகும் Git இன் கண்ணோட்டத்தில், HEAD சுட்டிக்காட்டும் இடமெல்லாம் “here .”எனஇருக்கும் HEAD என்பது மற்ற கிளைகள், பிற குறிப்புகள் அதன் பிற நகல்களுடன் Git எவ்வாறு தொடர்பு கொள்கிறது என்பதற்கான குறிப்புப் புள்ளியாகும்.

இந்த எடுத்துக்காட்டில், ref: மற்றொரு சுட்டியை சுட்டிக்காட்டுகிறது, ஒரு கிளையின் பெயர் சுட்டியாகும். அந்தப் பாதையைப் பின்பற்றி, முந்தைய விரிதாளைப் போலவே இருக்கும் கோப்பைக் காணலாம். கோப்பிலிருந்து சமீபத்திய commit ID ஐ Git எடுத்துக்கொள்கிறது , அதுதான் commitஇன் HEAD என்பதைக் குறிக்கிறது.

HEAD என்பது வேறு எந்த சுட்டியும் இணைக்கப்படாத ஒரு குறிப்பிட்ட உறுதிப்பாட்டைக் குறிக்கிறது எனில், HEAD என்பது “detached” என்று குறிப்பிடுகிறது. பிரிக்கப்பட்ட HEAD இன்நிலையில் பணிபுரிவது முற்றிலும் பாதுகாப்பானது, ஆனால்இது நாம் என்ன செய்ய முடியும் என்பதைக் கட்டுப்படுத்துகிறது. பிரிக்கப்பட்ட HEADஇன்ந நிலையில் இருந்து வெளியேற, கிளையின் பெயரைப் போன்ற மற்றொரு சுட்டியைச் சரிபார்த்திடுக, எடுத்துக்காட்டாக, git Checkout main.

கட்டமைப்பு(Config)
Git செயல்களைக் கண்காணிக்க உதவும் மற்றொரு முக்கியமான கோப்பு .git/config கோப்பு ஆகும். Git leads ,stores உள்ளமைவுகளில் இதுவும் ஒன்று. நாம் நம்முடைய .gitconfig கோப்பில் நம்முடைய முதன்மை கோப்புறையில் சேமிக்கப் பட்டுள்ள Git config இன் –global level-ஐ ஏற்கனவே அறிந்திருக்கலாம். Git loads config இல் உண்மையில் ஐந்து இடங்கள் உள்ளன, ஒவ்வொன்றும் முந்தைய உள்ளமைவை மீறுகிறது. Git loads config இன் வரிசை பின்வருமாறு:
–system இது இயங்குதளத்திற்கு குறிப்பிட்ட கட்டமைப்பை ஏற்றுகிறது
-global இங்கே நம்மை பாதிக்கின்ற பயனர், பயனர்.பெயர் பயனர் மின்னஞ்சல் என சேமிக்கப்படுக்கிறது
–local இது remotes and hooksPath போன்ற repoஇன் குறிப்பிட்ட தகவலை அமைக்கிறது
–worktree என்பது ஒரு தனி நபர் உறுதிமொழியாக சுருக்கப்பட்டுள்ளது
–blob இது தனிப்பட்ட சுருக்கப்பட்ட கோப்புகள் அவற்றின் சொந்த அமைப்புகளைக் கொண்டுள்ளது
git config –list –show-origin ஐ இயக்குவதன் மூலம் repo இற்கான அனைத்து கட்டமைப்புகளையும் காணலாம்.
பல Git ஆளுமைகளைப் பயன்படுத்த உள்ளூர் கட்டமைப்பைப் பயன்படுத்தலாம். .gitconfig இல் user.name , user.email ஆகியவற்றினை மேலெழுதிடுக. பணித் திட்டங்கள், தனிப்பட்ட களஞ்சியங்கள் , திறமூல பங்களிப்புகளுக்கு இடையில் நம்முடைய பணி நேரத்தைப் பிரிக்கும்போது உள்ளூர் கட்டமைப்பை மேம்படுத்துவது மிகவும் பயனுள்ளதாக இருக்கும்.

Git hooks
இது உள்ளமைக்கப்பட்ட மிகவும்சக்திவாய்ந்த தானியங்கி தளத்தைக் கொண்டுள்ளது. இவை Git இல் சில நிகழ்வுகள் நிகழும்போது இயங்கும் உரைநிரல் இயக்க நம்மை அனுமதிக்கின்றன. நம்முடைய சூழலுக்குக் கிடைக்கும் எந்தவொரு உரைநிரல் மொழியிலும்உரைநிரல்களை எழுதலாம். இதற்காக17 hooks உள்ளன.
எந்த repos இன் .git/hooks கோப்புறையில் பார்த்தாலும், .மாதிரி கோப்புகளின் தொகுப்பைக் காணலாம். இவை நாம்தொடங்குவதற்கு முன்பே எழுதப்பட்ட மாதிரிகள். அவற்றில் சில ஒற்றைப்படை தோற்றமுடைய குறிமுறைவரிகளை கொண்டுள்ளன. ஒருவேளை,இவை விந்தையாக கூட தோன்றலாம், ஆயினி் இவை முக்கியமாக லினக்ஸ் உருவாக்க மையத்தின் பணிகளுக்கான அசல் பயன்பாட்டு வழக்கை வழங்குவதற்காக சேர்க்கப்பட்டன, Perl , Bash ஆகிய உரைநிரல்களின் குழுவினரால் எழுதப்பட்டவை என்பதை நினைவில் வைத்திருக்கும் வரை. உரைநிரல்களை நாம் விரும்பும் எதையும் செய்யலாம்

6
ஒவ்வொரு முறையும் git commit இயக்கப்படுகின்றது, ஆனால் commit செய்தியானது git வரலாற்றில் உறுதி செய்யப்படுவதற்கு முன்பு, git உரைநிரலை இயக்குகிறது. கண்டிப்பாக, உறுதிமொழி எடுப்பதற்கு முன்  குறியிடப்பட்ட இரகசியங்களைச் சரிபார்ப்பது போன்ற நடைமுறைச் செயல்களையும் செய்யலாம்.

%d bloggers like this: