Git
Chapters ▾ 2nd Edition

1.1 Pagsisimula - Tungkol sa Bersyon Kontrol

Ang kabanatang ito ay tungkol sa pagsisimula sa paggamit ng Git. Magsisimula tayo sa pamamagitan ng pagpapaliwanag sa iilang kasaysayan sa pinagmulan ng mga taga-kontrol ng bersyon na mga kagamitan, pagkatapos ay pupunta tayo sa kung paano mapatakbo ang Git sa iyong sistema at sa wakas ay kung paano ito i-setup para magamit mo na. Sa bandang huli ng kabanatang ito dapat mauunawaan mo kung bakit nandito ang Git, bakit mo ito gagamitin at dapat ikaw ay handa na para gamitin ito.

Tungkol sa Bersyon Kontrol

Ano ang “bersyon kontrol”, at bakit mo dapat itong malaman? Ang bersyon kontrol ay isang sistema na nag-tatala sa mga pagbabago sa isang file o grupo ng mga files sa paglipas ng panahon para mabalikan mo ang partikular na mga bersyon mamaya. Para sa mga halimbawa sa aklat na ito, ikaw ay gagamit ng isang software na source code bilang mga files na nilagyan ng bersyon kontrol, sa totoo lang maaari mo itong gawin sa kahit anong tipo ng file sa isang kompyuter.

Kung ikaw ay isang graphic o web designer at gusto mong itago ang bawat bersyon ng isang larawan o layout (kung saan kadalasan ay gusto mo talaga), ang Version Control System (VCS) ay isang mainam na bagay para gagamitin. Ito ay nagbibigay-daan din para maibalik mo sa dating estado ang mga napiling mga files, i-revert ang buong proyekto pabalik sa nakaraang estado, ikumpara ang mga pagbabago paglipas ng panahon, tingnan kung sino ang nagbago ng mga files na maaaring nagdulot ng problema, sino ang nagdala ng problema at kailan at iba pa. Ang paggamit ng VCS din ay ibig sabihin na kung pumalpak ka sa mga bagay-bagay o nawalan ng mga files, madali ka lang maka-recover. Higit pa dito, makukuha mo ang lahat ng mga ito sa napakaliit na gawain lang.

Lokal na mga Sistema sa Bersyon Kontrol

Karamihan sa mga napiling bersyon-kontrol na pamamaraan ng mga tao ay ang pagkopya ng mga files sa ibang directory (marahil ay isang directory na naka-timestamp, kung sila ay bihasa). Ang pamamaraan na ito napakaraniwan dahil ito ay napakasimple lang, ngunit ito rin ay malamang magkakaroon ng mga kamalian. Madali lang makalimot kung saang directory ka naroon at aksidenteng magsulat sa mali na file o palitan ang mga files na hindi mo talaga ginusto.

Para malutas ang problemang ito, ang mga programmer noon pa ay gumawa ng lokal na mga VCS na mayroong isang simpleng database na nagsusubaybay sa lahat ng mga pagbabago sa mga files sa loob ng isang rebisyon kontrol.

Local version control diagram
Figure 1. Lokal na version control.

Isa sa mga mas kilalang VCS na mga kagamitan ay isang sistema na tinatawag na RCS, kung saan ginagamit pa sa maraming mga kompyuter ngayon. Ang RCS ay gumagana sa pamamagitan ng paglagay ng mga grupo ng mga tagpi (ito ay, ang kaibahan ng mga files) sa isang espesyal na format sa disk; maaari nitong ilikha ulit kung ano ang dating laman ng mga file sa kahit anong oras sa pamamagitan ng pagdagdag sa lahat ng mga tagpi.

Mga Sentralisadong Bersyon Kontrol na mga Sistema

Ang susunod na pangunahing problema na nararanasan ng mga tao ay ang pangangailangang makipagtulungan sa ibang mga developer na nasa ibang mga sistema. Para malutas ang problemang ito, nagawa ang Sentralisadong Bersyon Kontrol na mga Sistema (CVCSs). Ang mga sistemang ito, gaya ng CVS, Subversion, at Perforce, ay mayroong isang server na naglalaman ng lahat ng mga nakabersyon na mga files, at mga iilang bilang ng mga kliyente na nagsusuri sa mga files mula sa sentrong lugar na ito. Sa maraming mga taon, ito ang naging pamatayan para sa bersyon kontrol.

Diagram sa Sentralisadong bersyon kontrol
Figure 2. Centralized na version control.

Ang setup na ito ay nagbubunga ng napakaraming pakinabang, lalong lano kapag nasa lokal na mga VCS. Halimbawa, kahit na sino ay may nalalaman kung ano ang ginagawa ng kahit na sinong nasa proyekto. Ang mga tagapangasiwa ay mayroong pinong-grano na kontrol sa kung sino ang makakagawa nito, at ito ay sobra ka napakadaling pangasiwaan kung ihambing sa pag-susuri sa mga lokal na mga database ng bawat kliyente.

Gayunman, ang setup na ito ay mayroon ding mga seryosong negatibong epekto. Ang pinakahalata ay ang isang punto ng pagpalya na kinakatawan ng mga sentralisadong server. Kung ang server na iyan ay hindi magagamit sa loob ng isang oras, sa oras na iyan walang sinuman ang maaaring makipag-tulungan o mag-save ng mga nakabersyon na mga pagbabago sa kahit anong tinatrabaho nila. Kung ang hard disk ng sentrong database ay naging bulok, at walang itinago na mga tamang backup, mawawala sa iyo ang lahat — ang buong kasaysayan ng proyekto maliban na lang sa mga nag-iisang mga larawan na meron ang iba sa kanilang mga lokal na makina. Ang Lokal na VCS na mga sistema ay mayroon ding parehong problema — kung nasa isang lugar ang buong kasaysayan ng proyekto, maaari mong mawala ang lahat.

Nakabahagi na Bersyon Kontrol na mga Sistema

Ito ay kung saan dumating ang mga sistema ng Nakabahaging Bersyon Kontrol (DVCSs). Sa isang DVCS (gaya ng Git, Mercurial, Bazaar o Darcs), ang mga kliyente ay hindi lang basta mag-checkout sa pinakabagong kuha ng mga files; sa halip, tuluyan nilang kinopya ang buong repository, kalakip na ang buong kasaysayan nito. Kaya naman, kung may mamamatay na server, at ang mga sistemang ito ay nakikipag-tulungan sa pamamagitan ng server na iyon, ang kahit alin sa mga repository ng mga kliyente ay maaaring kopyahin papunta sa server para ma-restore ito. Bawat kopya ay talagang isang buong backup ng lahat ng mga datos.

Diagram ng nakabahaging Bersyon Kontrol
Figure 3. Distributed na version control.

Higit pa dito, karamihan sa mga sistemang ito ay mahusay sa pagkaroon ng iilang mga malayong mga repository na magagamit nila, kaya maaari kang makipag-tulungan sa iba’t ibang mga grupo ng tao sa iba’t ibang pamamaraan ng sabay-sabay sa isang parehong proyekto. Nagbibigay daan ito para maitakdo mo ang iilang tipo ng mga proseso na hindi posible sa isang sentralisadong mga sistema, gaya ng nakaherarkiyang na mga modelo.