Git ni nini na kwa nini msanidi programu anahitaji Git
Git ni mfumo wa udhibiti wa matoleo uliosambazwa: huhifadhi picha za hali ya mradi (commits), hukuruhusu kurudi kwenye toleo lolote, kufanya kazi sambamba katika matawi (branches) na kuunganisha mabadiliko ya watu kadhaa. Linus Torvalds aliunda Git mwaka 2005 kwa ajili ya kukuza kernel ya Linux, na leo ni kiwango cha sekta.
Git ni mfumo wa udhibiti wa matoleo
Git ni programu inayokumbuka historia ya mabadiliko ya faili za mradi. Kila mara unapohifadhi hali ya msimbo, Git huhifadhi picha (commit) pamoja na mwandishi, tarehe na maelezo. Unaweza kurudi kwenye picha yoyote, kuilinganisha na ya sasa, au kujua nani alibadilisha mstari fulani na kwa sababu gani.
Ikiwa umewahi kuhifadhi folda zinazoitwa «mradi_v2», «mradi_mwisho» na «mradi_mwisho_KWELI_MWISHO», tayari ulikuwa unadhibiti matoleo, ila kwa mkono. Git hufanya jambo lile lile kiotomatiki, kwa ufanisi, na bila hofu ya kupoteza kitu. Ndiyo maana msanidi programu anaposema «git ni nini», anamaanisha zana ya msingi ya kazi, muhimu kama kihariri cha msimbo.
Git inatofautianaje na «folda ya nakala» au hifadhi ya wingu
Hifadhi ya wingu huhifadhi toleo la mwisho la faili na, kwa bahati nzuri, nakala chache za kiotomatiki. Git huhifadhi historia yenye maana: wewe mwenyewe unaamua ni lini uhifadhi mabadiliko, na unaandika kilichofanyika. Zaidi ya hayo, Git inaweza mambo ambayo hifadhi yoyote ya diski haiwezi:
- kuendesha mistari kadhaa ya maendeleo kwa wakati mmoja (matawi) na kuyaunganisha;
- kuonyesha tofauti ya mstari kwa mstari kati ya matoleo (
git diff); - kuunganisha mabadiliko ya watu tofauti katika faili zilezile;
- kutafuta commit ambayo baada yake kosa lilionekana (
git bisect); - kufanya kazi bila intaneti — historia yote imehifadhiwa kwenye kompyuta yako.
Kufafanua jina Git na tafsiri yake
Git haina ufupisho rasmi — si kifupi cha maneno. Linus Torvalds aliipa programu jina kwa mtindo wake: katika slang ya Kiingereza cha Uingereza, «git» ina maana ya «mtu mgumu na asiyevumilika». Torvalds mwenyewe alitania kwamba huita miradi yake yote kwa jina lake. Tafsiri ya neno «git» kwa Kiingereza ni karibu «mjinga» au «mshenzi».
Katika README ya kwanza ya mradi, mwandishi alipendekeza tafsiri kadhaa za kuchekesha: kwa mfano, «global information tracker» — wakati kila kitu kinafanya kazi — na tafsiri ya kukasirisha — wakati kinavunjika. Kwa hiyo, ukiulizwa kwenye mahojiano «jina git linatafsiriwa vipi», jibu sahihi ni: halitafsiriwi, ni neno, si kifupisho.
Kwa Kiswahili watu husema tu «Git», kwa matamshi «git» yenye silabi moja. Jina hili halibadiliki kwenye tafsiri za lugha nyingi.
Git ilitoka wapi
Hadi mwaka 2005, wasanidi wa kernel ya Linux walitumia mfumo wa umiliki BitKeeper. Leseni ya bure kwa jumuiya ilipofutwa, Torvalds aliandika mfumo wake mwenyewe ndani ya wiki chache. Mahitaji yalikuwa magumu: kasi kwenye mradi mkubwa sana, kazi iliyosambazwa kikamilifu, ulinzi wa kuaminika wa historia dhidi ya uharibifu, na urahisi wa kufanya kazi na maelfu ya matawi sambamba.
Baadaye, uongozi wa mradi ulichukuliwa na Junio Hamano, ambaye bado ndiye msimamizi (maintainer) wa Git hadi leo. Leo Git ni mfumo wa chanzo huria chini ya leseni ya GPLv2, na GitHub, GitLab, Bitbucket, Gitea na majukwaa mengi ya makampuni yanautumia kama msingi.
Git kama mfumo: unavyofanya kazi
Ili Git isionekane kama mkusanyiko wa amri za kichawi, ni vizuri kuelewa mawazo matatu. Yanaeleza karibu tabia yote ya mfumo.
1. Picha, si tofauti
Mifumo mingi ya zamani ilihifadhi mabadiliko kama seti ya marekebisho kwa faili. Git inafikiria kwa picha: kila commit ni hali kamili ya mradi wakati wa kuhifadhiwa. Ili kuokoa nafasi, faili ambazo hazijabadilika hazinakiliwi; commit inaelekeza tu kwenye kitu kilichohifadhiwa tayari. Git pia hubana vitu vinavyofanana wakati wa kupakia hifadhi, kwa hiyo historia ya mradi mkubwa huchukua nafasi kidogo.
2. Kila kitu kinatambuliwa kwa hash
Kila kitu katika Git — yaliyomo ya faili (blob), muundo wa folda (tree), commit — hupata kitambulisho kinachohesabiwa kutoka kwenye yaliyomo yake. Kihistoria ni SHA-1 (herufi 40 za hexadecimal), na katika matoleo mapya unaweza kuunda hifadhi kwa SHA-256. Haiwezekani kubadilisha commit ya zamani bila kuonekana: hash yake itabadilika pamoja na hash za commits zote zinazofuata.
$ git log --oneline -3
a3f9c21 Ongeza fomu ya kuingia
7b02e4d Rekebisha uthibitishaji wa barua pepe
1c8d5f0 Commit ya kwanza
Mistari mifupi upande wa kushoto ni hash fupi za commits. Kwa kutumia hizo unaweza kufikia toleo lolote: git show 7b02e4d.
3. Hali tatu za faili
Hii ndiyo msingi wa Git, swali ambalo huulizwa karibu kila mahojiano. Faili katika mradi inaweza kuwa katika moja ya maeneo matatu:
| Eneo | Ni nini | Jinsi ya kufika huko |
|---|---|---|
| Saraka ya kazi (working tree) | Faili unazoziona na kuzihariri | Badilisha faili tu |
| Index (staging area) | Rasimu ya commit inayofuata | git add faili |
| Hifadhi (.git) | Historia iliyohifadhiwa | git commit -m "ujumbe" |
Index ndiyo inayotofautisha Git na mifumo mingi mingine. Inakuwezesha kuweka kwenye commit sehemu tu ya mabadiliko: kwa mfano, marekebisho ya hitilafu kwa upande mmoja, na kubadilisha majina ya vigezo kwa upande mwingine. Hivyo historia inabaki rahisi kusoma.
Usambazaji: kwa nini kila mtu ana nakala kamili
Git ni mfumo wa udhibiti wa matoleo uliosambazwa (DVCS). Unapoclone hifadhi, unapata si faili za mwisho tu, bali historia yote ya mradi. Shughuli nyingi — commit, kuangalia historia, kuunda tawi, kulinganisha — hufanyika kwenye kompyuta yako papo hapo, bila seva.
Katika mfumo huu, seva kama GitHub ni nakala nyingine tu ya hifadhi ambayo timu imekubaliana kuitumia kama kuu. Seva ikiwa haipatikani, kazi haisimami: unaendelea kufanya commit na kutuma mabadiliko baadaye kwa git push. Hata seva ikipotea kabisa, historia inaweza kurejeshwa kutoka kwenye clone yoyote.
| Zilizo za kati (SVN) | Zilizosambazwa (Git) | |
|---|---|---|
| Historia iko wapi | Kwenye seva | Kwa kila mshiriki |
| Kazi bila mtandao | Ina mipaka | Kamili |
| Matawi | Mazito, nakala za folda | Epesi, ni kielekezi kwa commit |
| Kasi ya shughuli za ndani | Inategemea seva | Papo hapo |
Git na GitHub si kitu kimoja
Hili ni tatizo la kawaida kwa wanaoanza. Git ni programu inayofanya kazi kwenye kompyuta yako. GitHub ni huduma ya wavuti inayohifadhi hifadhi za Git, na ina zana za kazi ya pamoja: pull request, ukaguzi wa msimbo, kazi (issues), CI. GitLab na Bitbucket ni huduma zinazofanana.
Unaweza kutumia Git bila GitHub kabisa — kwa mfano kwa maelezo binafsi au mradi wa ndani. Lakini GitHub bila Git haina maana, kwa sababu imejengwa juu ya hifadhi zake.
Misingi ya Git: mzunguko wa kazi wa kawaida
Hivi ndivyo kazi ya kila siku inavyoonekana. Amri hizi chache zinafunika sehemu kubwa ya kile msanidi programu anachofanya kila siku.
# unda hifadhi kwenye folda ya sasa
git init
# angalia kilichobadilika
git status
# ongeza faili kwenye index
git add index.html style.css
# hifadhi picha ya hali
git commit -m "Tengeneza ukurasa mkuu"
# angalia historia
git log --oneline
# unda tawi na uhamie ndani yake
git switch -c feature/login
# unganisha tawi kwenye tawi kuu
git switch main
git merge feature/login
# tuma mabadiliko kwenye seva
git push origin main
Amri git switch ilionekana katika Git 2.23 kama mbadala rahisi kueleweka wa baadhi ya uwezo wa git checkout. Katika maelekezo ya zamani utakutana na git checkout -b feature/login — ni jambo lile lile.
Nini kinatokea wakati wa git commit
Git huchukua yaliyomo ya index, huhifadhi kila faili kama blob, hujenga vitu vya tree kwa folda na kuunda kitu cha commit. Ndani ya commit kuna: kiungo kwenye tree, kiungo kwenye commit ya awali (au mbili — baada ya merge), mwandishi, mkamilishaji (committer) na ujumbe. Kisha kielekezi cha tawi la sasa kinahamia kwenye commit mpya. Tawi katika Git ni kwa kweli faili yenye hash ya commit ya mwisho, ndiyo maana matawi huundwa ndani ya milisekunde.
Kwa nini msanidi programu anahitaji Git: sababu za vitendo
Huna haja ya kuogopa majaribio
Kila mabadiliko yanaweza kurudishwa. Umevunja msimbo — git restore faili itarudisha toleo la mwisho lililohifadhiwa. Commit mbaya tayari iko kwenye historia — git revert itaunda commit ya kinyume bila kuandika upya historia ya pamoja. Hili linabadilisha mtindo wa kazi: unajaribu kwa ujasiri zaidi, kwa sababu kurudi nyuma kunachukua sekunde chache.
Kazi ya pamoja bila fujo
Kila msanidi anafanya kazi kwenye tawi lake mwenyewe bila kuwazuia wengine. Kazi ikiisha, mabadiliko hupitia ukaguzi na kuunganishwa kwenye tawi kuu. Ikiwa watu wawili walibadilisha sehemu moja ya msimbo, Git itaonyesha conflict na kukuruhusu kuisuluhisha kwa makusudi, badala ya kufuta kazi ya mwenzako kimya kimya.
Historia kama nyaraka
Ujumbe mzuri wa commit hujibu swali «kwa nini msimbo uko hivi». Amri git blame faili itaonyesha nani na katika commit gani alibadilisha kila mstari mwisho, na git log -p faili itaonyesha mabadiliko yote ya faili. Baada ya mwaka mmoja, hii huokoa saa nyingi za uchunguzi.
Mahitaji ya waajiri
Ujuzi wa Git umeorodheshwa karibu katika kila tangazo la kazi kwa wasanidi programu, wajaribu, wahandisi wa DevOps na wachambuzi wa data. Mahojiano hayapimi kukariri amri, bali kuelewa: merge inatofautianaje na rebase, index ni nini, commit inaghairiwaje, conflict inasuluhishwaje. Na wasifu wa GitHub wenye historia nadhifu ya commits hufanya kazi kama jalada la kazi (portfolio).
Nani mwingine anahitaji Git
Git ni muhimu kila mahali kuna faili za maandishi na historia ni muhimu: waandishi wa nyaraka za kiufundi (nyaraka za Markdown), wabunifu wa kurasa, wachambuzi (script za SQL, notebooks), wasimamizi wa mifumo (usanidi wa seva, miundombinu kama msimbo). Kwa faili kubwa za binary — video, PSD, seti za data — hutumika kiendelezi cha Git LFS, kwa sababu Git yenyewe imeboreshwa kwa maandishi.
Pro Git — kitabu bora kuhusu Git
Ukitaka kuzama zaidi, anza na kitabu «Pro Git» cha Scott Chacon na Ben Straub. Ni bure, kinasambazwa chini ya leseni huria na kimechapishwa kwenye tovuti rasmi git-scm.com, sehemu ya Book, pia kikiwa na tafsiri kwa lugha nyingi. Hiki ndicho «git pro» ambacho watu wengi hukitafuta: kitabu kamili cha kujifunzia, kuanzia misingi hadi muundo wa ndani.
Jinsi ya kukisoma kwa manufaa:
- sura 1–3 (utangulizi, misingi, matawi) — kiwango cha chini cha lazima, rudia amri kwenye terminal;
- sura kuhusu kufanya kazi na hifadhi za mbali na GitHub — utakapoanza kazi ya timu;
- sura «Git ndani» — utakapotaka kuelewa kwa kweli jinsi vitu na marejeo vinavyofanya kazi.
Chanzo kingine rasmi ni msaada uliojengwa ndani: git help commit au git commit --help zitafungua nyaraka kamili za amri, na git commit -h itaonyesha muhtasari mfupi wa bendera.
Makosa ya kawaida ya wanaoanza
- «Git huhifadhi faili kiotomatiki». Hapana, mpaka ufanye commit, mabadiliko yapo kwenye saraka ya kazi tu.
- «Commit inaingia GitHub mara moja». Commit ni ya ndani. Inafika kwenye seva baada ya
git pushpekee. - «git add ni kwa faili mpya tu».
git addhuongeza kwenye index pia mabadiliko ya faili ambazo tayari zinafuatiliwa. - «Kitu kilichofutwa kwenye historia hakiwezi kurudishwa». Karibu kila mara kinaweza:
git refloghuhifadhi mienendo ya viashiria, na commit «iliyopotea» hupatikana kwa hash yake. - «Matawi ni nakala za mradi». Tawi ni kielekezi chepesi kwa commit, si nakala ya faili.
Pa kuanzia kujifunza
- Sakinisha Git na uangalie toleo lake:
git --version. - Weka jina na barua pepe yako:
git config --global user.namenauser.email. - Tengeneza hifadhi ya mazoezi, fanya commits 5–10, angalia
git lognagit diff. - Fanya kazi na matawi: unda, unganisha, tengeneza makusudi conflict na uisuluhishe.
- Fungua akaunti ya GitHub, tuma hifadhi yako huko na ufungue pull request yako ya kwanza.
Mpangilio huu unatoa matokeo haraka kuliko kusoma vitabu vya marejeo mfululizo: unaona mara moja jinsi kila amri inavyobadilisha hali ya hifadhi.
Muhtasari
Git ni mfumo wa udhibiti wa matoleo uliosambazwa, unaohifadhi historia ya mradi kwa picha, unaiweka salama kwa hash, na unaruhusu timu kufanya kazi sambamba kwenye matawi. Jina lake halina tafsiri, na «git ni nini» kwa vitendo ni zana ya lazima kwa kila msanidi programu. Jifunze mzunguko wa add — commit — push, elewa maeneo matatu ya faili na matawi, kisha zama ndani zaidi kupitia kitabu cha Pro Git. Yote haya, hatua kwa hatua kutoka commit ya kwanza hadi pull request, yamefafanuliwa kwa vitendo katika kozi ya Git.
Maswali ya mara kwa mara
Je, Git ni bure?
Ndiyo, Git ni programu huria chini ya leseni ya GPLv2. Unaweza kuitumia bure kwenye miradi binafsi na ya kibiashara.
Je, unahitaji kujua programu ili kutumia Git?
Hapana. Inatosha kuwa na ujuzi wa kufanya kazi na faili na terminal; Git ni muhimu pia kwa nyaraka, usanidi na miradi yoyote ya maandishi.
Je, inawezekana kutumia Git bila mstari wa amri?
Ndiyo, kuna zana za picha na msaada uliojengwa ndani wa VS Code na IDE za JetBrains. Lakini kuelewa amri za terminal kunasaidia katika hali zisizo za kawaida ambapo vitufe havitoshi.
Inachukua muda gani kujifunza misingi ya Git?
Mzunguko wa msingi (init, add, commit, log, branch, merge, push) unajifunza ndani ya siku chache za mazoezi. Ustadi wa rebase, conflicts na kurejesha historia unakuja na uzoefu wa miradi halisi.
Git inatofautianaje na SVN?
SVN ni mfumo wa kati: historia iko kwenye seva. Katika Git kila msanidi ana nakala kamili ya historia, matawi epesi zaidi, na shughuli nyingi hufanyika ndani ya kompyuta.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Git kutoka mwanzo hadi msanidi programu anayejiweza”.
- Utangulizi: Git kutoka mwanzoni hadi kwa msanidi programu anayejiamini
- Kwa nini Git inahitajika — na kwa nini bila yake huwezi kupata kazi