Git
Тип | розподілена система керування версіями |
---|---|
Розробники | Лінус Торвальдс, Джуніо Хамано |
Стабільний випуск | 2.11 (29 листопада 2016 ) |
Версії | 2.14.2 |
Репозиторій | https://github.com/git/git, git://git.kernel.org/pub/scm/git/git.git |
Операційна система | Linux, POSIX, Windows, OS X |
Написано на | C, Bourne Shell, Tcl, Perl[1] |
Ліцензія | GNU GPL v2 |
git-scm.com | |
Git на Вікісховищі |
Git — розподілена система керування версіями файлів та спільної роботи. Проект створив Лінус Торвальдс для управління розробкою ядра Linux, а сьогодні підтримується Джуніо Хамано (англ. Junio C. Hamano). Git є однією з найефективніших, надійних і високопродуктивних систем керування версіями, що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні і злитті гілок. Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються криптографічні методи, також можлива прив'язка цифрових підписів розробників до тегів і комітів.
Прикладами проектів, що використовують Git, є ядро Linux, Android, LibreOffice, Cairo, GNU Core Utilities[3], Mesa 3D[4], Wine, багато проектів з X.org[5], XMMS2[6], GStreamer, Debian DragonFly BSD, Perl, Eclipse, GNOME, KDE, Qt, Ruby on Rails, PostgreSQL, VideoLAN, PHP, Beryl[7], One Laptop Per Child (OLPC), АБІС Koha, GNU LilyPond[8] та ELinks[9] і деякі дистрибутиви GNU/Linux (див. нижче).
Програма є вільною і випущена під ліцензією GNU GPL версії 2.
Система спроектована як набір програм, спеціально розроблених з врахуванням їхнього використання у скриптах. Це дозволяє зручно створювати спеціалізовані системи управління версіями на базі Git або користувацькі інтерфейси. Наприклад, Cogito[10] є саме таким прикладом фронтенда до репозиторіїв Git. А StGit[11] використовує Git для управління колекцією латок.
Система має ряд користувацьких інтерфейсів: наприклад, gitk та git-gui розповсюджуються з самим Git.
Віддалений доступ до репозиторіїв Git забезпечується git-демоном, SSH або HTTP сервером. TCP-сервіс git-daemon входить у дистрибутив Git і є разом з SSH найпоширенішим і надійним методом доступу. Метод доступу HTTP, незважаючи на ряд обмежень, дуже популярний в контрольованих мережах, тому що дозволяє використання існуючих конфігурацій мережевих фільтрів.
Зміст
Принцип роботи[ред. • ред. код]
Збереження файлів[ред. • ред. код]
Git, на відміну від Subversion і подібних до неї систем, не зберігає інформацію як список змін (патчів) для файлів. Замість цього Git зберігає дані набором зліпків. Кожного разу при фіксації поточної версії проекту Git зберігає зліпок того, як виглядають всі файли проекту. Але якщо файл не змінювався, то дається посилання на раніше збережений файл (див. рис. 1). Git схожий на своєрідну файлову систему з інструментами, які працюють поверх неї. Для кожного відстежуваного файлу Git зберігає розмір, час створення і останньої зміни. Ці дані зберігаються у файлі index, який знаходиться у теці .git Вся база даних Git зберігається в теці з назвою .git
В Git файли можуть знаходитися в одному із 3-х станів: зафіксованому (файл вже збережено в локальній базі даних), зміненому (файл було змінено, але зміни не зафіксовано) і підготовленому (файли було змінено і відмічено для фіксації).
Локальні операції[ред. • ред. код]
Більшість дій можна виконувати на локальній файловій системі без використання інтернет підключення. Вся історія змін зберігається локально і при необхідності вивантажується у віддалений репозиторій. На відміну від Subversion, де без підключення до інтернету можна лише редагувати файли, але зберегти зміни в вашу базу даних неможливо (оскільки вона відключена від репозиторія). Будь-який коміт спочатку робиться локально, а потім вивантажується у віддалений репозиторій.
Цілісність даних[ред. • ред. код]
В своїй базі Git зберігає все по хешам файлів. Як хешуюча функція використовується SHA-1. Перед кожним збереженням файлів Git обчислює SHA-1 хеш файлу і отриманий хеш стає індексом файлу в Git. Використовуючи хеш Git легко відслідковує зміни в файлах.
Галуження (гілки)[ред. • ред. код]
Галуження — це розмежування від основної лінії розробки. Git дозволяє створити декілька гілок і перемикатися між ними. Це корисно, оскільки дозволяє працювати декільком розробникам над своїм функціоналом не заважаючи іншим і не псуючи основу гілку. За замовчуванням, Git створює гілку з назвою master. Гілка в Git просто являє собою вказівник на одну із фіксацій. При кожній новій фіксації гілка в Git рухається автоматично (тобто перемикається на фіксацію). Гілка є простим файлом, який містить 40 символів контрольної суми SHA-1 фіксації. Створення нової гілки дуже швидке, оскільки це однаково запису в файл 41 байта (40 символів + символ нового рядка).
Зливання та перебазовування даних[ред. • ред. код]
Git підтримує два способи для інтеграції змін з гілки в гілку: merge (зливання) та rebase (перебазування). Основна різниця полягає в тому, що rebase запам'ятовує фіксації у вигляді патчів, перемотує гілку і застосовує патчі у вигляді фіксацій на відміну від merge, який зливає дві гілки в одну.
Візуалізатори історії[ред. • ред. код]
- Gitk(gitk) проста, але перевірена і швидка програма. Написана на Tcl/Tk, розповсюджується з самим Git.
- QGit (Sourceforge) інтерфейс написаний з використанням Qt, багато в чому схожий з gitk, але дещо відрізняється набором можливостей (Marco Costalba). В наш час[Коли?] переписується на Qt4, що спростить його портування на Microsoft Windows.
- Giggle — варіант на Gtk+.
- gitg — ще один інтерфейс для gtk+/GNOME
- Git-Cola — потужний графічний інтерфейс для Git.
- TortoiseGit — інтерфейс, реалізований як розширення для провідника Windows.
- SourceTree — безкоштовний Git клієнт для Windows і Mac OS.
Приклади[ред. • ред. код]
Створення локального репозиторію[ред. • ред. код]
Додаємо всі файли
$ cd <path_project> #Шлях до проекта (наприклад: $ cd с:/www/git). Переходимо в існуючу папку, в якій буде розміщений проект
$ git init #Ініціалізація репозиторію. Створює в каталозі Project каталог .git і в ньому всі необхідні файли репозиторію
$ git add . #Додаємо всі файли, які наявні в каталозі Project, під версійний контроль
$ git commit -m "Коментар" #Фіксуємо зміни
Видалення файлів[ред. • ред. код]
Видалення з індексу[ред. • ред. код]
$ git rm --cached README.txt #Видалення файлу README.txt з індексу, тобто він фізично залишається, але зміни в ньому не відслідковуються
Видалення з репозиторію[ред. • ред. код]
$ git rm README.txt #Видалення файлу README.txt з робочого каталогу та індексу !!! Використовувати уважно!
Рекурсивне видалення[ред. • ред. код]
$ git rm --cached -r . #Видалення з індексу всіх файлів в поточному каталозі, включаючи вкладені каталоги
Робота з декількома гілками[ред. • ред. код]
Створення нової гілки[ред. • ред. код]
$ git branch new_branch # Створення нової гілки з назвою new_branch
$ git checkout new_branch # Переключення на гілку new_branch
Перегляд всіх гілок[ред. • ред. код]
$ git branch # Переглянути всі гілки
Веб-інтерфейси[ред. • ред. код]
- gitweb — написаний на Perl (англ. Kay Sievers). Більшість наведених нижче великих публічних git-репозиторіїв його й застосовує.
- wit — написаний на Ruby/eRuby (англ. Christian Meder)
- gitarella — Ruby (Diego Pettenò)
- git-php — PHP (англ. Zack Bartel)
- cgit — написаний на C (англ. Lars Hjemli)
- cogito — інтерфейс з командами спроектованими для користувачів звиклих до CVS та SVN (англ. Petr Baudis)
- StGit — написана на Python система керування колекцією латок (англ. Catalin Marinas)
Обмін змінами з іншими системами управління версіями[ред. • ред. код]
- CVS — імпорт і експорт, емуляція CVS-сервера, в стандартному постачанні
- Subversion — імпорт і експорт (частково), в стандартному постачанні
- .tar.gz, .tar.bz2 (серії версійних файлів) — імпорт і експорт, в стандартному постачанні
- Perforce — імпорт і експорт (частково), в стандартному постачанні і в архівах Git Mailing List
- Mercurial — імпорт і експорт, в стандартному постачанні і за допомогою зовнішньої програми (Tailor)
Крім того, завдяки своїй структурі даних та форматам даних обміну Git дозволяє порівняно просто і ефективно реалізувати обмін даними практично зі всіма існуючими системами управлінням версіями.
Проекти, що використовують Git[ред. • ред. код]
Git застосовується в багатьох проектах; можна відзначити як апстріми, так і дистрибутиви GNU/Linux:
- ядро Linux [1]
- freedesktop.org (там же і X.org)
- Wine [2]
- Debian [3]
- Perl[12]
- ALT Linux [4] (Hasher[13] та Gear[14])
- LibreOffice,
- systemd,
- X.Org,
- Wayland,
- Mesa 3D,
- Gstreamer,
- Dragonfly BSD,
- Eclipse,
- GNOME,
- KDE,
- Qt,
- Ruby on Rails,
- PostgreSQL,
- VideoLAN,
- PHP,
- Xen,
- Minix,
- MariaDB[15]
Виноски[ред. • ред. код]
Див. також[ред. • ред. код]
- Домашня сторінка Git
- Переклад українською книги «Pro Git» Скотта Чакона (Scott Chacon) та Бена Страуба (Ben Straub)
- Книга «Git Magic» українською
- Git User's Manual (англ.) (також розповсюджується разом з початковим текстом програми:
Documentation/user-manual.txt
) - Сторінка Git на kernel.org
- Everyday Git («Git на кожен день») — набір з приблизно 20 команд (насправді їх буде близько 5—6), які стануть у нагоді в повсякденному використанні системи.
- Linus Torvalds on Git — розповідь Лінуса Торвальдса про git та інші системи керування версіями (YouTube)
- Патчення з допомогою git, cogito та quilt
- Базове використання Git
Це незавершена стаття про програмування. Ви можете допомогти проекту, виправивши або дописавши її. |
|