Git
Chapters ▾ 2nd Edition

1.1 Начало - За Version Control системите

Тази глава ще ви помогне да започнете с Git. Ще стартираме с малко история на инструментите за контрол на версиите, след това ще продължим с инсталирането на Git във вашата система и накрая ще видим как да започнем да работим с нея. В края на тази глава би следвало да сте наясно защо е създаден Git, защо е добре да го използвате и как да започнете

За Version Control системите

Какво е “version control” и защо ви интересува? Системата за контрол на версиите е средство за проследяване и запис на промените по файл (или множество файлове) във времето, така че да можете да възстановите произволна версия на файла/файловете във всеки един момент по-късно. За примерите в тази книга, вие ще използвате софтуерен код под формата на файлове, чиито версии ще бъдат контролирани, макар в действителност да можете да правите това с произволен тип файл във вашия компютър.

Ако сте графичен или уеб дизайнер и желаете да пазите всяка версия на дадено изображение или layout (а е доста вероятно да искате), то Version Control системата (VCS) е мъдър избор за вас. Тя ви позволява да възстановите файловете си обратно към определен момент от миналото, да възстановите цял проект към даден предишен момент, да сравнявате промените във времето, да видите кой последно е променил нещо, което би могло да предизвика проблем, кой и кога е съобщил за грешка и т.н. Използването на VCS също така означава, че ако случайно объркате нещата и неволно загубите файлове - можете лесно да ги възстановите. Не на последно място - получавате всичко това на цената на съвсем малко изразходвани ресурси.

Локални Version Control Systems

Много хорат предпочитат да реализират контрол на версиите като просто копират файловете в друга директория (ако са достатъчно изобретателни - посочвайки дата и час в името ѝ). Този начин е често използван защото е много прост, но и също толкова податлив на грешки. Много лесно е да забравите в коя директория сте в момента и неволно да запишете в грешен файл или пък да копирате погрешни файлове не където трябва.

За да се справят с това неудобство, програмистите отдавна разбработиха локални VCS с прости бази данни, които съхраняваха промените по файловете, които се проследяват.

Local version control diagram
Figure 1. Local version control.

Една от най-популярните подобни системи се нарича RCS и все още се разпространява с много компютри и до днес. RCS работи съхранявайки множество от пачове (разликите във файловете) в специален формат на диска и може да възстанови състоянието на файла към произволен момент добавяйки всички тези пачове.

Централизирани Version Control Systems

Следващото голямо предизвикателство пред разработчиците дойде в момента, когато се оказа, че те трябва да работят съвместно с други такива, на други компютри. За да се справят с това, бяха разработени централизираните Version Control системи (CVCS). Тези системи - CVS, Subversion, Preforce, използват един сървър, съдържащ всички контролирани файлове и множество от клиенти, които издърпват файловете от това централно място. В продължение на много години това беше стандарт за контрол на версиите.

Centralized version control diagram
Figure 2. Centralized version control.

Този подход предлага много предимства, особено спрямо локалните VCS. Например, всеки участник в проекта е запознат в доста добра степен на достоверност какво друг е правил по него. Администраторите имат подробен контрол върху това кой какво може да прави и освен това е много по-лесно да се администрира CVCS отколкото локалните бази данни на всеки клиент.

Обаче, този подход си има и сериозни недостатъци. Най-очевидният от тях е, че всички данни се пазят на едно място и зависят от надеждността на сървъра, който ги съхранява. Ако сървърът по някаква причина не е достъпен за час - тогава през този час никой не може да качва своите промени. Ако, в най-лошия случай, се повреди диск на сървъра и не разполагате с адекватни архиви - губите абсолютно всичко, цялата история на проекта, освен ако някой потребител няма snapshot на проекта на локалния си компютър. Локалните VCS са изложени на същия риск — ако цялата история на проекта се пази само на едно място, рискувате да го загубите изцяло.

Разпределени Version Control Systems

Тук е мястото, където се намесват разпределените (Distributed) Version Control системи (DVCS). В DVCS (каквито са Git, Mercurial, Bazaar или Darcs), клиентите не просто изтеглят последния snapshot на файловете - те изцяло клонират цялото хранилище, включително пълната му история. По този начин, ако сървърът загине, хранилището на даден проект може да се възстанови от локалното копие на всеки клиент. Всяко копие по същество е пълен архив на всички данни.

Distributed version control diagram
Figure 3. Distributed version control.

В допълнение, много от тези системи се справят доста добре със задачата да могат да обслужват няколко отдалечени хранилища, така че можете да си сътрудничите с различни групи от разработчици едновременно, в рамките на един и същи проект. Това позволява да създадете няколко различни работни потока, което е невъзможно в централизираните системи като йерархични модели.