Git хранилище — е склад за изходния код на проекта, в който Git проследява всяка промяна на файловете по време на цялото разработване. Хранилището съдържа пълната история на комити, клонове и етикети, което позволява на разработчиците да работят съвместно по кода. Според данни на Git, 2024, хранилището е основата на всяка система за контрол на версиите и се използва в милиони проекти по целия свят.
Основни точки
Git хранилище — е структура от данни, в която системата за контрол на версиите съхранява метаданни и обекти, описващи историята на промените на файловете на проекта. Когато разработчик инициализира хранилище с команда git init, Git създава скрита папка .git в корена на проекта.
Вътре в тази папка се намират всички обекти, референции и конфигурационни файлове, необходими за работата на системата. Хранилището не е обвързано с конкретно местоположение — разработчикът може да го създаде локално и след това да го свърже с отдалечен сървър.
Git използва модела на разпределено хранилище: всеки участник в проекта има пълно копие на историята на своя компютър. Това означава, че повечето операции — комит, преглед на история, създаване на клонове — се изпълняват локално без достъп до сървъра.
Според документацията на Git, разпределената архитектура прави системата устойчива на повреди: ако сървърът се срине, всяко локално хранилище може да стане източник за възстановяване на пълната история на проекта.
Локално хранилище — е копие на проекта на компютъра на разработчика. Съдържа цялата история на комити, клонове и етикети и позволява изпълнение на операции commit, branch, merge и rebase без мрежова връзка.
Отдалечено хранилище се хоства на сървър и служи като точка за синхронизация за всички членове на екипа. Разработчиците изпращат своите промени с команда git push и получават чужди промени с команда git pull.
Връзката между локално и отдалечено хранилище се конфигурира чрез remote origin — URL адреса на сървъра, който се съхранява в конфигурацията на Git. Едно локално хранилище може да бъде свързано с няколко отдалечени хранилища, което е полезно при работа с форкове.
Основното предимство на този модел — разработчикът може да работи върху кода в офлайн режим и да синхронизира промените само когато е готов да изпрати резултата.
| Характеристика | Локално | Отдалечено |
|---|---|---|
| Местоположение | На компютъра на разработчика | На сървър (GitHub, GitLab) |
| Достъп без мрежа | Пълен достъп до всички операции | Недостъпен без връзка |
| Синхронизация | Push/Pull с отдалечено | Приема push от локални |
| Резервно копие | Не е защитен от загуба на данни | Съхранява се на сървър с бекапи |
Моделът на съхранение на Git се различава фундаментално от други системи за контрол на версиите. Вместо да съхранява списък с промени (делти) между версии, Git съхранява пълни моментни снимки на всички файлове на проекта в момента на всеки комит.
Всеки обект в хранилището се идентифицира от уникален SHA-1 хеш с дължина 40 знака. Ако съдържанието на файл не се е променило между комити, Git не създава нов обект, а използва повторно съществуващия — това спестява място.
Git използва четири типа обекти: blob (съдържание на файл), tree (структура на директория), commit (моментна снимка с метаданни) и tag (именувана референция към комит). Всички обекти се съхраняват в папка .git/objects.
Според Git Internals, обектният модел на Git гарантира цялост на данните: всяка промяна в съдържанието на файл води до нов хеш, което прави невъзможно незабелязаното изменение на историята.
Папка .git — е сърцето на хранилището. Без нея Git не може да проследява промени, а обикновената директория остава просто колекция от файлове. Разбирането на структурата на тази папка помага за диагностициране на проблеми с хранилището.
Файлът HEAD заслужава специално внимание. В нормално състояние съдържа символична референция към клон, например ref: refs/heads/main. В състояние detached HEAD сочи директно към комит — това означава, че новите комити няма да бъдат обвързани с нито един клон.
Работата с Git хранилище включва набор от основни операции, които разработчикът изпълнява ежедневно. Всяка операция променя състоянието на хранилището, добавяйки нови обекти или премествайки референции.
Операциите push и pull — са единствените, които изискват свързване с отдалечения сървър. Всички останали операции се изпълняват изцяло локално, което осигурява висока скорост на работа дори при голям обем история.
Всеки файл в хранилището преминава през четири състояния: untracked (не се проследява), modified (променен), staged (подготвен) и committed (комитнат). Git проследява само файлове, които са изрично добавени чрез git add или вече се намират в историята на комити.
Разбирането на този модел — ключът към ефективна работа с Git. Разработчикът може селективно да подготви за комит само част от променените файлове, създавайки логически завършени комити с ясно описание.
Отдалечените хранилища обикновено се хостват на специализирани платформи, които предоставят уеб интерфейс, система за управление на достъпа и допълнителни инструменти за съвместна разработка.
Изборът на платформа зависи от размера на екипа, изискванията за поверителност и необходимите интеграции. За мобилна разработка често се избира GitHub заради широката подкрепа на общността и интеграцията с CI/CD инструменти за iOS и Android.
Нека разгледаме практически сценарий: разработчик клонира съществуващо хранилище, създава нов клон, прави промени и ги изпраща на сървъра. Всяка команда демонстрира работа с различни компоненти на хранилището.
# Клониране на отдалечено хранилище
git clone https://github.com/user/mobile-app.git
# Преминаване в директорията на проекта
cd mobile-app
# Създаване на нов клон feature и превключване към него
git checkout -b feature/auth
# Проверка на статуса на променените файлове
git status
# Добавяне на всички промени в staging area
git add .
# Създаване на комит с описание
git commit -m "Add authentication module"
# Изпращане на промените към отдалеченото хранилище
git push origin feature/auth
Командата git status — една от най-полезните в ежедневната работа. Показва кои файлове са променени, кои са подготвени за комит и кои изобщо не се проследяват от Git.
За анализ на историята на хранилището се използва командата git log с различни флагове за форматиране. Тя показва хронологията на комити, техните автори, дати и SHA-1 идентификатори.
# Преглед на историята с визуализация на графа на клоновете
git log --oneline --graph --all
# Преглед на промените в конкретен комит
git show a1b2c3d
# Сравнение на текущото състояние с последния комит
git diff HEAD
# Преглед на историята на конкретен файл
git log --follow src/MainActivity.kt
Флагът --graph показва ASCII граф на разклоненията, което е особено полезно в хранилища с активна работа в множество клонове. За мобилни проекти с чести издания, визуалният граф помага за бърза оценка на структурата на разработката.
Често задавани въпроси
Хранилище — е технически склад за код с история на промените. Проект — по-широко понятие, което включва хранилище, система за управление на задачи, документация и процеси на разработка. Един проект може да съдържа няколко хранилища.
Създайте ново хранилище чрез уеб интерфейса на GitHub, като натиснете бутона New. Посочете име, описание и ниво на достъп. След това клонирайте хранилището на локалния компютър или свържете съществуващо локално хранилище чрез git remote add origin.
Ако отдалеченото хранилище е изтрито от сървъра, но поне един разработчик има локално копие, хранилището може да бъде възстановено. Достатъчно е да създадете ново отдалечено хранилище и да изпълните git push --force от локалното копие с цялата история.
Форк — е копие на чуждо хранилище във вашия акаунт. Получавате пълно копие на историята и можете да правите всякакви промени без да засягате оригинала. Форковете се използват за участие в open-source проекти чрез Pull Request.
Използвайте git gc за компресиране на обекти и премахване на недостъпни данни. Премахнете големи файлове от историята чрез git filter-branch или git filter-repo. За проекти с двоични файлове обмислете Git LFS (Large File Storage).
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също