Git
Git—розподілена система керування версіямифайлівта спільної роботи. Проєкт створивЛінус Торвальдсдля керування розробкоюядра Linux,а сьогодні підтримуєтьсяДжуніо Хамано(англ.Junio C. Hamano). Git є однією з найефективніших, надійних і високопродуктивнихсистем керування версіями,що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні та злиттігілок.Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються криптографічні методи, також можлива прив'язкацифрових підписіврозробників до тегів і комітів.
Прикладами проєктів, що використовують Git, єядро Linux,Android,LibreOffice,Cairo,GNU Core Utilities,Mesa 3D,Wine,багато проєктів зX.org,XMMS2[ru],GStreamer,Debian DragonFly BSD,Perl,Eclipse,GNOME,KDE,Qt,Ruby on Rails,PostgreSQL,VideoLAN,PHP,One Laptop Per Child (OLPC),АБІСKoha,GNU LilyPondтаELinksі деякі дистрибутивиGNU/Linux (див. нижче).
Програма є вільною і випущена під ліцензієюGNU GPLверсії 2.
Система спроєктована як набір програм, спеціально розроблених з врахуванням їхнього використання ускриптах.Це дозволяє зручно створювати спеціалізовані системи керування версіями на базі Git або користувацькі інтерфейси. Наприклад,Cogito[en]є саме таким прикладом фронтенду до репозиторіїв Git. А StGit використовує Git для управління колекцієюлаток.
Система має ряд користувацьких інтерфейсів: наприклад, gitk та git-gui розповсюджуються з самим Git.
Віддалений доступ дорепозиторіївGit забезпечується git-демоном,SSHабоHTTPсервером.TCP-сервіс git-daemon входить у дистрибутив Git і є разом з SSH найпоширенішим і надійним методом доступу. Метод доступу HTTP, хоч має низку обмежень, дуже популярний в контрольованих мережах, тому що дозволяє використання наявних конфігурацій мережевих фільтрів.
![](https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Git_image_filesystem2.png/220px-Git_image_filesystem2.png)
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[Архівовано18 листопада 2007 уWayback Machine.](Sourceforge[Архівовано26 лютого 2008 уWayback Machine.]) інтерфейс написаний з використаннямQt,багато в чому схожий з gitk, але дещо відрізняється набором можливостей (Marco Costalba). В наш час[коли?]переписується на Qt4, що спростить його портування на Microsoft Windows.
- Giggle— варіант наGtk+.
- gitg[Архівовано24 грудня 2010 уWayback Machine.]— ще один інтерфейс дляgtk+/GNOME
- Git-Cola[Архівовано13 червня 2011 уWayback Machine.]— потужний графічний інтерфейс для Git.
- TortoiseGit[Архівовано1 січня 2011 уWayback Machine.]— інтерфейс, реалізований як розширення дляпровідника Windows.
- SourceTree[Архівовано6 серпня 2013 уWayback Machine.]— безкоштовний Git клієнт для Windows і Mac OS.
- Magit[Архівовано9 лютого 2022 уWayback Machine.]- інтерфейс дляGNU Emacs
Додаємо всі файли
$cd<path_project>#Шлях до проєкту (наприклад: $ cd с:/www/git). Переходимо в наявну теку, в якій буде розміщено проєкт
$gitinit#Ініціалізація репозиторію. Створює в каталозі Project каталог.git і в ньому всі необхідні файли репозиторію
$gitadd.#Додаємо всі файли, які наявні в каталозі Project, під версійний контроль
$gitcommit-m"Коментар"#Фіксуємо зміни
$gitclone<remote_path_project>#Проєкт буде клоновано з віддаленого сервера у поточний локальний каталог (наприклад, https://github.com/git/git.git)
$gitpull#Всі файли будуть оновлені до останньої версії з віддаленого сервера
$gitlog#Відображає всі зміни, зроблені в поточній гілці проєкту в хронологічному порядку
$gitrm--cachedREADME.txt#Видалення файлу README.txt з індексу, тобто він фізично залишається, але зміни в ньому не відстежуються.
$gitrmREADME.txt#Видалення файлу README.txt з робочого каталогу та індексу!!! Використовувати уважно!
$gitrm--cached-r.#Видалення з індексу всіх файлів в поточному каталозі, включаючи вкладені каталоги
$gitbranchnew_branch# Створення нової гілки з назвою new_branch
$gitcheckoutnew_branch# Перемикання на гілку new_branch
$gitbranch# Переглянути всі гілки
- gitweb[недоступне посилання з лютого 2019]— написаний наPerl(англ.Kay Sievers). Більшість наведених нижче великих публічних git-репозиторіїв його й застосовує.
- wit— написаний на Ruby/eRuby (англ.Christian Meder)
- gitarella—Ruby(Diego Pettenò)
- git-php[Архівовано3 грудня 2007 уWayback Machine.]—PHP(англ.Zack Bartel)
- cgit— написаний наC(англ.Lars Hjemli)
- cogito[Архівовано16 січня 2008 уWayback Machine.]— інтерфейс з командами спроєктованими для користувачів звиклих доCVSтаSVN(англ.Petr Baudis)
- StGit[Архівовано29 вересня 2007 уWayback Machine.]— написана наPythonсистема керування колекцією латок (англ.Catalin Marinas)
- CVS—імпорт і експорт,емуляція CVS-сервера, в стандартному постачанні
- Subversion— імпорт і експорт (частково), в стандартному постачанні
- .tar.gz,.tar.bz2 (серії версійних файлів) — імпорт і експорт, в стандартному постачанні
- Perforce— імпорт і експорт (частково), в стандартному постачанні та в архівах Git Mailing List
- Mercurial— імпорт і експорт, в стандартному постачанні та за допомогою зовнішньої програми (Tailor)
Крім того, завдяки своїй структурі даних та форматам даних обміну Git дозволяє порівняно просто й ефективно реалізувати обмін даними практично зі всіма наявними системами керування версіями.
Git застосовується в багатьох проєктах; можна відзначити як апстріми, так і дистрибутиви GNU/Linux:
- ↑https://web.archive.org/web/20151116175401/https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290
- ↑git/git.git/tree.git.kernel.org. Архіворигіналуза 27 травня 2012.Процитовано 15 червня 2009.
- ↑https://directory.fsf.org/wiki/Git
- ↑Kernel.org git repositories.git.kernel.org.Процитовано 30 січня 2024.
- ↑Wine.GitLab(англ.).Процитовано 30 січня 2024.
- ↑Debian.GitLab(англ.).30 січня 2024.Процитовано 30 січня 2024.
- ↑Perl 5 now uses Git for version control[недоступне посилання з червня 2019]
- ↑Архівована копія.Архіворигіналуза 4 вересня 2019.Процитовано 6 січня 2008.
{{cite web}}
:Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑MariaDB moves development to Github.Архіворигіналуза 29 травня 2014.Процитовано 29 травня 2014.
- Домашня сторінка Git[Архівовано6 лютого 2012 уWayback Machine.]
- Переклад українською книги «Pro Git» Скотта Чакона (Scott Chacon) та Бена Страуба (Ben Straub)[Архівовано22 жовтня 2014 уWayback Machine.]
- Книга «Git Magic» українською[Архівовано28 листопада 2013 уWayback Machine.]
- Git User's Manual[Архівовано5 березня 2018 уWayback Machine.](англ.)(також розповсюджується разом з початковим текстом програми:
Documentation/user-manual.txt
) - Сторінка Git на kernel.org
- Everyday Git[Архівовано4 березня 2016 уWayback Machine.](«Git на кожен день») — набір з приблизно 20 команд (насправді їх буде близько 5—6), які стануть у пригоді в повсякденному використанні системи.
- Linus Torvalds on Git[Архівовано23 грудня 2015 уWayback Machine.]— розповідьЛінуса Торвальдсапро git та іншісистеми керування версіями(YouTube)
- Патчення з допомогою git, cogito та quilt[Архівовано3 жовтня 2017 уWayback Machine.]
- Базове використання Git[Архівовано23 березня 2010 уWayback Machine.]
![]() |
Це незавершена стаття пропрограмування. Ви можетедопомогтипроєкту,виправивши або дописавши її. |
|