Batayan

Ano ang Git at bakit ito kailangan ng developer

Na-update: · Skillaria.Top

Ang Git ay distributed version control system: itinatago nito ang mga snapshot ng project (commits), pinapayagan kang bumalik sa anumang bersyon, mag-trabaho sa magkakahiwalay na branch, at pagsamahin ang mga pagbabago ng maraming developer. Ginawa ito ni Linus Torvalds noong 2005 para sa Linux kernel, at ngayon ay pamantayan na ng industriya.

Git: isang version control system

Ang Git ay program na nagtatala ng history ng mga pagbabago sa mga file ng project. Sa bawat pag-commit ninyo ng estado ng code, nagse-save ang Git ng snapshot (commit) kasama ang author, petsa, at paglalarawan. Maaari kayong bumalik sa kahit anong snapshot, ihambing ito sa kasalukuyang bersyon, at alamin kung sino at bakit binago ang isang partikular na linya.

Kung nagtago na kayo ng mga folder na "project_v2", "project_final" at "project_final_TALAGANG_FINAL", ginagawa n'yo na ang version control, pero manual lang. Ginagawa ito ng Git nang awtomatiko, mas maayos, at walang takot na may mawala. Kaya kapag sinabi ng developer na "ano ang git", hindi lang ito basta program. Isa itong pangunahing tool, kasing-kailangan ng code editor.

Ano ang pagkakaiba ng Git sa "folder ng mga kopya" at cloud drive

Ang cloud drive ay nagtatago ng pinakabagong bersyon ng file at, sa pinakamabuti, ilang awtomatikong kopya. Ang Git ay nagtatago ng makabuluhang history: kayo ang nagpapasya kung kailan mag-commit, at nagsusulat kayo kung ano ang ginawa. Bukod dito, kaya ng Git ang mga bagay na hindi kaya ng kahit anong drive:

  • magkaroon ng maraming linya ng development nang sabay (branches) at pagsamahin ang mga ito;
  • ipakita ang line-by-line na pagkakaiba ng mga bersyon (git diff);
  • pagsamahin ang mga pagbabago ng iba't ibang tao sa iisang file;
  • hanapin ang commit kung saan lumitaw ang bug (git bisect);
  • gumana nang walang internet, dahil nasa local machine ninyo ang buong history.

Ang kahulugan ng Git at ng pangalan nito

Walang opisyal na kahulugan ang Git, hindi ito acronym. Pinangalanan ito ni Linus Torvalds sa sarili niyang estilo: sa British slang, ang "git" ay "makulit at matigas ang ulo na tao". Sabi nga ni Torvalds, pinangalanan niya ang lahat ng project niya ayon sa sarili niya. Ang literal na salin ng git ay "pasaway" o "sira-ulo".

Sa unang README ng project, nagmungkahi ang author ng ilang nakakatuwang bersyon ng kahulugan, gaya ng "global information tracker" kapag maayos ang lahat, at isang malutong na salita kapag sira ang lahat. Kaya kung tanungin kayo sa interview kung ano ang kahulugan ng git, ang tamang sagot: wala, salita ito at hindi acronym.

Sa usapan, sinasabi ng mga Pilipino ang "Git" o "gits", pareho itong naiintindihan. Ang bigkas ay "git" na may maikling "i", hindi "jit".

Saan galing ang Git

Bago ang 2005, ginagamit ng mga developer ng Linux kernel ang proprietary na system na BitKeeper. Nang bawiin ang libreng lisensya para sa community, sumulat si Torvalds ng sariling system sa loob ng ilang linggo. Mahigpit ang mga kinakailangan: mabilis sa malaking project, ganap na distributed, ligtas laban sa pagkasira ng history, at madaling gamitin kasama ang libo-libong parallel branch.

Di nagtagal, si Junio Hamano ang kumuha ng pangangalaga sa project, at siya pa rin ang maintainer ng Git hanggang ngayon. Ngayon, open-source ang Git sa ilalim ng lisensyang GPLv2, at ginagamit ito ng GitHub, GitLab, Bitbucket, Gitea, at mga corporate platform.

Ang Git bilang system: paano ito gumagana

Para hindi na magmukhang mahiwagang set ng commands ang Git, makakatulong na maintindihan ang tatlong ideya. Ipinapaliwanag ng mga ito halos lahat ng kilos ng system.

1. Snapshots, hindi differences

Maraming lumang system ang nagtatago ng mga pagbabago bilang listahan ng edit sa mga file. Ang Git ay nag-iisip sa snapshots: bawat commit ay buong estado ng project sa sandaling iyon. Para hindi sayangin ang espasyo, hindi kinokopya ang mga file na hindi nagbago; ang commit ay tumuturo lang sa object na naka-save na. Kapag ni-pack ang repository, pinipiga pa ng Git ang magkakatulad na object, kaya kahit malaking project ay hindi masyadong malaki ang history.

2. Lahat ay tinutukoy ng hash

Bawat object sa Git (nilalaman ng file (blob), istruktura ng folder (tree), commit) ay may identifier na kinukuwenta mula sa nilalaman nito. Sa tradisyon, SHA-1 ito (40 hexadecimal na character), at sa mas bagong bersyon ay puwede nang gumawa ng repository gamit ang SHA-256. Hindi mo basta-basta mababago ang lumang commit nang hindi napapansin, dahil magbabago ang hash nito at ang hash ng lahat ng susunod na commit.

$ git log --oneline -3
a3f9c21 Idagdag ang login form
7b02e4d Ayusin ang validation ng email
1c8d5f0 Unang commit

Ang maiikling string sa kaliwa ay mga pinaikling hash ng commit. Gamit ang mga ito, maaari kang pumunta sa kahit anong bersyon: git show 7b02e4d.

3. Tatlong estado ng file

Ito ang pundasyon ng Git, at halos sa bawat interview ito itinatanong. Ang file sa project ay maaaring nasa isa sa tatlong zone:

ZoneAno itoPaano mapupunta roon
Working directoryMga file na nakikita at ine-edit ninyoI-edit lang ang file
Index (staging area)Draft ng susunod na commitgit add file
Repository (.git)Naka-commit na historygit commit -m "mensahe"

Ang index ang nagpapaiba sa Git sa maraming ibang system. Pinapayagan nitong pagsamahin sa isang commit ang bahagi lang ng mga pagbabago: halimbawa, ang pag-ayos ng bug nang hiwalay, at ang pagpalit ng pangalan ng variable nang hiwalay. Kaya nababasa ang history.

Distributed: bakit may kumpletong kopya ang bawat isa

Distributed version control system (DVCS) ang Git. Kapag nag-clone kayo, hindi lang ang huling file ang nakukuha ninyo, kundi ang buong history ng project. Karamihan ng operasyon (commit, pagtingin sa history, paggawa ng branch, pagkukumpara) ay ginagawa nang lokal at agad-agad, nang walang server.

Sa ganitong modelo, ang server gaya ng GitHub ay isa lang pang kopya ng repository na napagkasunduang maging pangunahin. Kapag hindi ito available, hindi tumitigil ang trabaho: patuloy kayong nagko-commit at ipapadala ang mga pagbabago mamaya gamit ang git push. Kung tuluyang mawala ang server, maibabalik ang history mula sa kahit anong clone.

Centralized (SVN)Distributed (Git)
Nasaan ang historySa serverSa bawat kalahok
Pagtatrabaho nang walang networkLimitadoBuo
BranchesMabigat, kopya ng mga folderMagaan, tumuturo lang sa commit
Bilis ng local na operasyonNakadepende sa serverAgad-agad

Git at GitHub: hindi iisa

Karaniwang nalilito ang mga baguhan dito. Ang Git ay program na tumatakbo sa computer ninyo. Ang GitHub ay web service kung saan nakatago ang mga Git repository, at may mga tool para sa team work: pull request, code review, task, CI. Ang GitLab at Bitbucket ay katulad na serbisyo.

Puwede kayong gumamit ng Git nang hindi gumagamit ng GitHub, halimbawa para sa personal na notes o local na project. Pero ang GitHub nang walang Git ay walang saysay, dahil nakatayo ito sa mga repository ng Git.

Mga pangunahing kaalaman sa Git: minimal na workflow

Ganito ang itsura ng araw-araw na trabaho. Sinasaklaw ng ilang command na ito ang malaking bahagi ng ginagawa ng developer araw-araw.

# gumawa ng repository sa kasalukuyang folder
git init

# tingnan kung ano ang nagbago
git status

# ilagay ang mga file sa index
git add index.html style.css

# i-save ang snapshot
git commit -m "I-layout ang home page"

# tingnan ang history
git log --oneline

# gumawa ng branch at lumipat dito
git switch -c feature/login

# pagsamahin ang branch sa main
git switch main
git merge feature/login

# ipadala ang mga pagbabago sa server
git push origin main

Lumabas ang git switch sa Git 2.23 bilang mas malinaw na kapalit ng ilang gamit ng git checkout. Sa mga lumang tutorial, makikita ninyo ang git checkout -b feature/login, parehong bagay ito.

Ano ang nangyayari sa git commit

Kinukuha ng Git ang nilalaman ng index, sine-save ang bawat file bilang blob, gumagawa ng tree objects para sa mga folder, at gumagawa ng commit object. Nakasulat sa commit: reference sa tree, reference sa parent commit (o dalawa, kapag merge), author, committer, at mensahe. Pagkatapos, ginagalaw ng Git ang pointer ng kasalukuyang branch papunta sa bagong commit. Ang branch sa Git ay literal na file na may hash ng huling commit, kaya milliseconds lang ang paggawa ng branch.

Bakit kailangan ng developer ang Git: mga praktikal na dahilan

Puwede kayong mag-eksperimento nang walang takot

Maibabalik ang kahit anong pagbabago. Nasira ang code? Ibabalik ng git restore file ang huling naka-commit na bersyon. May maling commit na sa history? Gagawa ang git revert ng kabaligtarang commit nang hindi binabago ang shared history. Nagbabago nito ang estilo ng trabaho: mas matapang kayong sumubok, dahil ilang segundo lang ang rollback.

Team work nang walang gulo

Bawat developer ay nagtatrabaho sa sariling branch at hindi nakikialam sa iba. Kapag tapos na ang task, dumadaan ito sa review at pinagsasama sa main branch. Kapag dalawang tao ang nag-edit sa parehong bahagi, magpapakita ang Git ng conflict at hahayaan kayong ayusin ito nang sinadya, sa halip na tahimik na burahin ang gawa ng iba.

History bilang dokumentasyon

Ang magagandang commit message ang sumasagot sa tanong na "bakit ganito ang code". Ipapakita ng git blame file kung sino at sa aling commit huling binago ang bawat linya, at ipapakita ng git log -p file ang buong ebolusyon ng file. Sa loob ng isang taon, nakakatipid ito ng maraming oras sa pag-iimbestiga.

Hinihingi ito ng mga employer

Halos bawat job posting para sa developer, tester, DevOps engineer, at data analyst ay nagbabanggit ng Git. Sa interview, hindi lang kabisado ang mga command ang tinitingnan kundi ang pag-unawa: ano ang pagkakaiba ng merge at rebase, ano ang index, paano i-undo ang commit, paano ayusin ang conflict. At ang profile sa GitHub na may maayos na history ng commit ay gumagana bilang portfolio.

Sino pa ang nangangailangan ng Git

Kapaki-pakinabang ang Git saanman may text file at mahalaga ang history: sa technical writers (dokumentasyon sa Markdown), front-end developers, analysts (SQL scripts, notebooks), at system administrators (server configs, infrastructure as code). Para sa malalaking binary file gaya ng video, PSD, o dataset, ginagamit ang Git LFS, dahil ang Git mismo ay para sa text.

Pro Git: pinakamagandang libro tungkol sa Git

Kung gusto ninyong lumalim, simulan sa aklat na "Pro Git" nina Scott Chacon at Ben Straub. Libre ito, open-licensed, at nakalathala sa official site na git-scm.com sa seksyong Book, may mga salin pa sa iba't ibang wika. Ito ang "git pro" na madalas hanapin ng mga tao: kumpletong textbook mula sa basics hanggang sa internals.

Paano ito basahin nang kapaki-pakinabang:

  • Kabanata 1–3 (panimula, basics, branching): minimum na dapat basahin, ulitin ang mga command sa terminal;
  • Kabanata tungkol sa remote repositories at GitHub: kapag magsisimula na kayo sa team;
  • Kabanata na "Git Internals": kapag gusto ninyong maintindihan talaga kung paano gumagana ang mga object at reference.

Ang pangalawang official na sanggunian ay ang built-in na help: git help commit o git commit --help ay magbubukas ng kumpletong dokumentasyon ng command, at ang git commit -h ay magpapakita ng maikling listahan ng flags.

Karaniwang maling akala ng mga baguhan

  • "Awtomatikong nise-save ng Git ang mga file." Hindi. Hangga't wala kayong commit, nasa working directory lang ang mga pagbabago.
  • "Diretso sa GitHub ang commit." Lokal ang commit. Napupunta lang ito sa server pagkatapos ng git push.
  • "Ang git add ay para lang sa mga bagong file." Idinadagdag ng git add sa index pati ang mga pagbabago sa mga file na tinatrack na.
  • "Hindi na maibabalik ang nabura sa history." Halos laging maibabalik: iniimbak ng git reflog ang mga galaw ng pointer, at makikita ang "nawawalang" commit gamit ang hash.
  • "Ang mga branch ay kopya ng project." Magaan na pointer lang ang branch papunta sa commit, hindi duplicate ng mga file.

Saan magsisimula sa pag-aaral

  1. I-install ang Git at tingnan ang bersyon: git --version.
  2. I-set ang pangalan at email: git config --global user.name at user.email.
  3. Gumawa ng practice repository, mag-commit ng 5–10 beses, tingnan ang git log at git diff.
  4. Magtrabaho sa mga branch: gumawa, mag-merge, at sadyang gumawa ng conflict at ayusin ito.
  5. Gumawa ng GitHub account, ipadala doon ang repository, at magbukas ng unang pull request ninyo.

Mas mabilis ang resulta ng ganitong pagkakasunod-sunod kaysa sa tuloy-tuloy na pagbabasa ng reference: nakikita ninyo agad kung paano binabago ng bawat command ang estado ng repository.

Buod

Ang Git ay distributed version control system na nagtatago ng history ng project bilang snapshots, pinoprotektahan ito gamit ang hash, at nagpapahintulot sa team na magtrabaho nang sabay-sabay sa mga branch. Walang opisyal na kahulugan ang pangalan nito, at sa praktika, ang "ano ang git" ay tanong tungkol sa kasangkapang kailangan ng kahit anong developer. Unahin ang workflow na add, commit, push, unawain ang tatlong zone ng file at ang mga branch, at saka lumalim gamit ang aklat na Pro Git. Ang lahat ng ito, hakbang-hakbang mula sa unang commit hanggang pull request, ay itinuturo nang praktikal sa kursong Git namin.

Mga madalas itanong

Libre ba ang Git?

Oo, ang Git ay free software sa ilalim ng lisensyang GPLv2. Puwede itong gamitin nang libre, personal man o pang-komersyal na project.

Kailangan bang marunong magprogram para gumamit ng Git?

Hindi. Sapat na ang marunong sa mga file at terminal. Kapaki-pakinabang din ang Git para sa dokumentasyon, configuration, at kahit anong text project.

Puwede bang gumamit ng Git nang walang command line?

Oo, may mga graphical client at built-in na suporta sa VS Code at mga JetBrains IDE. Pero nakakatulong ang pag-unawa sa mga command sa terminal kapag may sitwasyong wala ang button na kailangan ninyo.

Gaano katagal bago matutunan ang basics ng Git?

Ang pangunahing ikot (init, add, commit, log, branch, merge, push) ay natutunan sa ilang araw na practice. Ang kumpiyansang paggamit ng rebase, conflict, at pagbawi ng history ay dumarating sa karanasan sa totoong project.

Ano ang pagkakaiba ng Git at SVN?

Ang SVN ay centralized na system: nasa server ang history. Sa Git, bawat developer ay may kumpletong kopya ng history, mas magaan ang branches, at karamihan ng operasyon ay lokal.

Pag-aralan ito sa video

Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Git с нуля до уверенного разработчика”.

Pumunta sa kurso