Misingi

Git ni nini na kwa nini msanidi programu anahitaji Git

Imesasishwa: · Skillaria.Top

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:

EneoNi niniJinsi ya kufika huko
Saraka ya kazi (working tree)Faili unazoziona na kuzihaririBadilisha faili tu
Index (staging area)Rasimu ya commit inayofuatagit add faili
Hifadhi (.git)Historia iliyohifadhiwagit 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 wapiKwenye sevaKwa kila mshiriki
Kazi bila mtandaoIna mipakaKamili
MatawiMazito, nakala za foldaEpesi, ni kielekezi kwa commit
Kasi ya shughuli za ndaniInategemea sevaPapo 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 push pekee.
  • «git add ni kwa faili mpya tu». git add huongeza kwenye index pia mabadiliko ya faili ambazo tayari zinafuatiliwa.
  • «Kitu kilichofutwa kwenye historia hakiwezi kurudishwa». Karibu kila mara kinaweza: git reflog huhifadhi 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

  1. Sakinisha Git na uangalie toleo lake: git --version.
  2. Weka jina na barua pepe yako: git config --global user.name na user.email.
  3. Tengeneza hifadhi ya mazoezi, fanya commits 5–10, angalia git log na git diff.
  4. Fanya kazi na matawi: unda, unganisha, tengeneza makusudi conflict na uisuluhishe.
  5. 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.

Jifunze mada hii kwa video

Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Git kutoka mwanzo hadi msanidi programu anayejiweza”.

Nenda kwenye kozi