Git: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
BunykBot (обговорення | внесок)
м Категоризація за вмістом
мНемає опису редагування
 
(Не показано 24 проміжні версії 15 користувачів)
Рядок 4: Рядок 4:
| screenshot =
| screenshot =
| caption =
| caption =
| latest_release_version = 2.16.1
| latest_release_version = 2.26.2
| latest_release_date = {{дата випуску|2018|01|22}}
| latest_release_date = {{дата випуску|2020|04|19}}
| latest_preview_version =
| latest_preview_version =
| latest_preview_date =
| latest_preview_date =
| developer = [[Лінус Торвальдс]], [[Джуніо Хамано]]
| developer = [[Лінус Торвальдс]], [[Джуніо Хамано]]
| programming language = [[C (мова програмування)|C]], [[Bourne Shell]], [[Tcl]], [[Perl]]<ref>{{cite web |url=http://git.kernel.org/?p=git/git.git;a=tree |title=git/git.git/tree |publisher=git.kernel.org |date= |accessdate=2009-06-15 }}{{Недоступне посилання|date=лютий 2019 |bot=InternetArchiveBot }}</ref>
| programming language = [[C (мова програмування)|C]], [[Bourne Shell]], [[Tcl]], [[Perl]]<ref>{{cite web |url=http://git.kernel.org/?p=git/git.git;a=tree |title=git/git.git/tree |publisher=git.kernel.org |date= |accessdate=2009-06-15 |archive-date=27 травня 2012 |archive-url=https://archive.today/20120527015050/http://git.kernel.org/?p=git/git.git;a=tree }}</ref>
| operating system = [[Linux]], [[POSIX]], [[Windows]], [[OS X]]
| operating system = [[Linux]], [[POSIX]], [[Windows]], [[OS X]]
| genre = [[розподілена система керування версіями]]
| genre = [[розподілена система керування версіями]]
Рядок 15: Рядок 15:
| website = {{url|http://git-scm.com}}
| website = {{url|http://git-scm.com}}
}}
}}
'''Git'''&nbsp;— [[розподілена система керування версіями]] [[файл]]ів та спільної роботи. Проект створив [[Лінус Торвальдс]] для управління розробкою [[ядро Linux|ядра Linux]], а сьогодні підтримується [[Джуніо Хамано]] ({{lang-en|Junio C. Hamano}}). Git є однією з найефективніших, надійних і високопродуктивних [[система керування версіями|систем керування версіями]], що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні і злитті [[Гілка (керування версіями)|гілок]]. Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються криптографічні методи, також можлива прив'язка [[цифровий підпис|цифрових підписів]] розробників до тегів і комітів.
'''Git'''&nbsp;— [[розподілена система керування версіями]] [[файл]]ів та спільної роботи. Проєкт створив [[Лінус Торвальдс]] для керування розробкою [[ядро Linux|ядра Linux]], а сьогодні підтримується [[Джуніо Хамано]] ({{lang-en|Junio C. Hamano}}). Git є однією з найефективніших, надійних і високопродуктивних [[система керування версіями|систем керування версіями]], що надає гнучкі засоби нелінійної розробки, що базуються на відгалуженні та злитті [[Гілка (керування версіями)|гілок]]. Для забезпечення цілісності історії та стійкості до змін заднім числом використовуються криптографічні методи, також можлива прив'язка [[Електронний цифровий підпис|цифрових підписів]] розробників до тегів і комітів.


Прикладами проектів, що використовують Git, є [[ядро Linux]], [[Android]], [[LibreOffice]], [[Cairo]], [[GNU Core Utilities]], [[Mesa 3D]], [[Wine]], багато проектів з [[X.org]], {{нп|XMMS2}}, [[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 (див. нижче).
Прикладами проєктів, що використовують Git, є [[ядро Linux]], [[Android]], [[LibreOffice]], [[Cairo]], [[GNU Core Utilities]], [[Mesa 3D]], [[Wine]], багато проєктів з [[X Window System|X.org]], {{нп|XMMS2||ru}}, [[GStreamer]], Debian DragonFly BSD, [[Perl]], [[Eclipse]], [[GNOME]], [[KDE]], [[Qt]], [[Ruby on Rails]], [[PostgreSQL]], [[VideoLAN]], [[PHP]], One Laptop Per Child ([[One Laptop per Child|OLPC]]), [[Автоматизована бібліотечна інформаційна система|АБІС]] [[Koha]], [[GNU LilyPond]] та [[ELinks]] і деякі дистрибутиви [[GNU]]/Linux (див. нижче).


Програма є вільною і випущена під ліцензією [[GNU General Public License|GNU GPL]] версії 2.
Програма є вільною і випущена під ліцензією [[GNU General Public License|GNU GPL]] версії 2.


Система спроектована як набір програм, спеціально розроблених з врахуванням їхнього використання у [[скриптова мова|скриптах]]. Це дозволяє зручно створювати спеціалізовані системи управління версіями на базі Git або користувацькі інтерфейси. Наприклад, {{нп|Cogito}} є саме таким прикладом фронтенда до репозиторіїв Git. А StGit використовує Git для управління колекцією [[латка|латок]].
Система спроєктована як набір програм, спеціально розроблених з врахуванням їхнього використання у [[скриптова мова|скриптах]]. Це дозволяє зручно створювати спеціалізовані системи керування версіями на базі Git або користувацькі інтерфейси. Наприклад, {{нп|Cogito}} є саме таким прикладом фронтенду до репозиторіїв Git. А StGit використовує Git для управління колекцією [[Патч|латок]].


Система має ряд користувацьких інтерфейсів: наприклад, gitk та git-gui розповсюджуються з самим Git.
Система має ряд користувацьких інтерфейсів: наприклад, gitk та git-gui розповсюджуються з самим Git.


Віддалений доступ до [[репозиторій|репозиторіїв]] Git забезпечується git-[[демон (програма)|демоном]], [[SSH]] або [[HTTP]] [[сервер]]ом. [[TCP]]-сервіс git-daemon входить у дистрибутив Git і є разом з SSH найпоширенішим і надійним методом доступу. Метод доступу HTTP, незважаючи на ряд обмежень, дуже популярний в контрольованих мережах, тому що дозволяє використання існуючих конфігурацій мережевих фільтрів.
Віддалений доступ до [[Репозиторій програмного забезпечення|репозиторіїв]] Git забезпечується git-[[демон (програма)|демоном]], [[SSH]] або [[HTTP]] [[сервер]]ом. [[TCP]]-сервіс git-daemon входить у дистрибутив Git і є разом з SSH найпоширенішим і надійним методом доступу. Метод доступу HTTP, хоч має низку обмежень, дуже популярний в контрольованих мережах, тому що дозволяє використання наявних конфігурацій мережевих фільтрів.


== Принцип роботи ==
== Принцип роботи ==
Рядок 31: Рядок 31:
=== Збереження файлів ===
=== Збереження файлів ===


[[Файл:Git image filesystem2.png|thumb|Рис. 1 Дані як зліпки стану проекту в часі]]
[[Файл:Git image filesystem2.png|thumb|Дані як зліпки стану проєкту в часі]]
Git, на відміну від [[Subversion]] і подібних до неї систем, не зберігає інформацію як список змін (патчів) для файлів. Замість цього Git зберігає дані набором зліпків. Кожного разу при фіксації поточної версії проекту Git зберігає зліпок того, як виглядають всі файли проекту. Але якщо файл не змінювався, то дається посилання на раніше збережений файл (див. рис. 1). Git схожий на своєрідну файлову систему з інструментами, які працюють поверх неї. Для кожного відстежуваного файлу Git зберігає розмір, час створення і останньої зміни. Ці дані зберігаються у файлі index, який знаходиться у теці .git
Git, на відміну від [[Subversion]] і подібних до неї систем, не зберігає інформацію як список змін (патчів) для файлів. Замість цього Git зберігає дані набором зліпків. Кожного разу при фіксації поточної версії проєкту Git зберігає зліпок того, як виглядають всі файли проєкту. Але якщо файл не змінювався, то дається посилання на раніше збережений файл (див. рис. 1). Git схожий на своєрідну [[Файлова система|файлову систему]] з інструментами, які працюють поверх неї. Для кожного відстежуваного файлу Git зберігає розмір, час створення та останньої зміни. Ці дані зберігаються у файлі index, який знаходиться у теці .git. Вся база даних Git зберігається в теці з назвою .git<br/>В Git файли можуть знаходитися в одному із 3-х станів: зафіксованому (файл вже збережено в локальній базі даних), зміненому (файл було змінено, але зміни не зафіксовано) і підготовленому (файли було змінено і відмічено для фіксації).
Вся база даних Git зберігається в теці з назвою .git<br/>В Git файли можуть знаходитися в одному із 3-х станів: зафіксованому (файл вже збережено в локальній базі даних), зміненому (файл було змінено, але зміни не зафіксовано) і підготовленому (файли було змінено і відмічено для фіксації).


=== Локальні операції ===
=== Локальні операції ===
Більшість дій можна виконувати на локальній файловій системі без використання інтернет підключення. Вся історія змін зберігається локально і при необхідності вивантажується у віддалений репозиторій. На відміну від [[Subversion]], де без підключення до інтернету можна лише редагувати файли, але зберегти зміни в вашу базу даних неможливо (оскільки вона відключена від репозиторія). Будь-який коміт спочатку робиться локально, а потім вивантажується у віддалений репозиторій.
Більшість дій можна виконувати на локальній файловій системі без використання інтернет підключення. Вся історія змін зберігається локально і при необхідності вивантажується у віддалений репозиторій. На відміну від [[Subversion]], де без підключення до інтернету можна лише редагувати файли, але зберегти зміни в вашу базу даних неможливо (оскільки вона відключена від репозиторію). Будь-який коміт спочатку робиться локально, а потім вивантажується у віддалений репозиторій.


=== Цілісність даних ===
=== Цілісність даних ===
В своїй базі Git зберігає все по хешам файлів. Як хешуюча функція використовується [[SHA-1]]. Перед кожним збереженням файлів Git обчислює [[SHA-1]] [[хеш]] файлу і отриманий хеш стає індексом файлу в Git. Використовуючи [[хеш]] Git легко відслідковує зміни в файлах.
У своїй базі Git зберігає все по хешам файлів, які хешуються функцією [[SHA-1]]. Перед кожним збереженням файлів Git обчислює [[SHA-1]] [[хеш]] файлу й отриманий хеш стає індексом файлу в Git. Використовуючи [[Геш-таблиця|хеш]] Git легко відстежує зміни в файлах.


=== Галуження ([[Гілка (керування версіями)|гілки]]) ===
=== Галуження ([[Гілка (керування версіями)|гілки]]) ===
Рядок 49: Рядок 48:
== Візуалізатори історії ==
== Візуалізатори історії ==
* [[Gitk]]([https://web.archive.org/web/20070927232025/http://ozlabs.org/~paulus/gitk/ gitk]) проста, але перевірена і швидка програма. Написана на [[Tcl/Tk]], розповсюджується з самим Git.
* [[Gitk]]([https://web.archive.org/web/20070927232025/http://ozlabs.org/~paulus/gitk/ gitk]) проста, але перевірена і швидка програма. Написана на [[Tcl/Tk]], розповсюджується з самим Git.
* [http://digilander.libero.it/mcostalba/ QGit] ([http://sourceforge.net/projects/qgit Sourceforge]) інтерфейс написаний з використанням [[Qt]], багато в чому схожий з gitk, але дещо відрізняється набором можливостей (Marco Costalba). В наш час{{коли}} переписується на Qt4, що спростить його портування на Microsoft Windows.
* [http://digilander.libero.it/mcostalba/ QGit] {{Webarchive|url=https://web.archive.org/web/20071118015253/http://digilander.libero.it/mcostalba/ |date=18 листопада 2007 }} ([http://sourceforge.net/projects/qgit Sourceforge] {{Webarchive|url=https://web.archive.org/web/20080226185636/http://sourceforge.net/projects/qgit |date=26 лютого 2008 }}) інтерфейс написаний з використанням [[Qt]], багато в чому схожий з gitk, але дещо відрізняється набором можливостей (Marco Costalba). В наш час{{коли}} переписується на Qt4, що спростить його портування на Microsoft Windows.
* [https://web.archive.org/web/20071209104517/http://developer.imendio.com/projects/giggle Giggle]&nbsp;— варіант на [[Gtk+]].
* [https://web.archive.org/web/20071209104517/http://developer.imendio.com/projects/giggle Giggle]&nbsp;— варіант на [[Gtk+]].
* [http://trac.novowork.com/gitg/ gitg]&nbsp;— ще один інтерфейс для [[gtk+]]/[[GNOME]]
* [http://trac.novowork.com/gitg/ gitg] {{Webarchive|url=https://web.archive.org/web/20101224080904/http://trac.novowork.com/gitg/ |date=24 грудня 2010 }}&nbsp;— ще один інтерфейс для [[gtk+]]/[[GNOME]]
* [http://cola.tuxfamily.org/ Git-Cola]&nbsp;— потужний графічний інтерфейс для Git.
* [http://cola.tuxfamily.org/ Git-Cola] {{Webarchive|url=https://web.archive.org/web/20110613051759/http://cola.tuxfamily.org/ |date=13 червня 2011 }}&nbsp;— потужний графічний інтерфейс для Git.
* [http://code.google.com/p/tortoisegit/ TortoiseGit]&nbsp;— інтерфейс, реалізований як розширення для [[Провідник Windows|провідника Windows]].
* [http://code.google.com/p/tortoisegit/ TortoiseGit] {{Webarchive|url=https://web.archive.org/web/20110101134942/http://code.google.com/p/tortoisegit/ |date=1 січня 2011 }}&nbsp;— інтерфейс, реалізований як розширення для [[Провідник Windows|провідника Windows]].
* [http://sourcetreeapp.com/ SourceTree]&nbsp;— безкоштовний Git клієнт для Windows і Mac OS.
* [http://sourcetreeapp.com/ SourceTree] {{Webarchive|url=https://web.archive.org/web/20130806210527/http://www.sourcetreeapp.com/ |date=6 серпня 2013 }}&nbsp;— безкоштовний Git клієнт для Windows і Mac OS.
* [https://magit.vc/ Magit] {{Webarchive|url=https://web.archive.org/web/20220209193145/https://magit.vc/ |date=9 лютого 2022 }} - інтерфейс для [[GNU Emacs]]


== Приклади ==
== Приклади ==
Рядок 60: Рядок 60:
=== Створення локального репозиторію ===
=== Створення локального репозиторію ===
Додаємо всі файли
Додаємо всі файли
<source lang="bash">
<syntaxhighlight lang="bash">
$ cd <path_project> #Шлях до проекта (наприклад: $ cd с:/www/git). Переходимо в існуючу папку, в якій буде розміщений проект
$ cd <path_project> #Шлях до проєкту (наприклад: $ cd с:/www/git). Переходимо в наявну теку, в якій буде розміщено проєкт
$ git init #Ініціалізація репозиторію. Створює в каталозі Project каталог .git і в ньому всі необхідні файли репозиторію
$ git init #Ініціалізація репозиторію. Створює в каталозі Project каталог .git і в ньому всі необхідні файли репозиторію
$ git add . #Додаємо всі файли, які наявні в каталозі Project, під версійний контроль
$ git add . #Додаємо всі файли, які наявні в каталозі Project, під версійний контроль
$ git commit -m "Коментар" #Фіксуємо зміни
$ git commit -m "Коментар" #Фіксуємо зміни
</syntaxhighlight>
</source>


=== Клонувати проект з віддаленого сервера в локальний каталог ===
=== Клонувати проєкт з віддаленого сервера в локальний каталог ===
<source lang="bash">
<syntaxhighlight lang="bash">
$ git clone <remote_path_project> #Проект буде клоновано з віддаленого сервера у поточний локальний каталог (наприклад, https://github.com/git/git.git)
$ git clone <remote_path_project> #Проєкт буде клоновано з віддаленого сервера у поточний локальний каталог (наприклад, https://github.com/git/git.git)
</syntaxhighlight>
</source>


=== Отримати останні зміни проекту з віддаленого сервера ===
=== Отримати останні зміни проєкту з віддаленого сервера ===
<source lang="bash">
<syntaxhighlight lang="bash">
$ git pull #Всі файли будуть оновлені до останньої версії з віддаленого сервера
$ git pull #Всі файли будуть оновлені до останньої версії з віддаленого сервера
</syntaxhighlight>
</source>


=== Перегляд історії змін ===
=== Перегляд історії змін ===
<source lang="bash">
<syntaxhighlight lang="bash">
$ git log #Відображає всі зміни, зроблені в поточній гілці проекта в хронологічному порядку
$ git log #Відображає всі зміни, зроблені в поточній гілці проєкту в хронологічному порядку
</syntaxhighlight>
</source>


=== Видалення файлів ===
=== Видалення файлів ===


==== Видалення з індексу ====
==== Видалення з індексу ====
<source lang="bash">
<syntaxhighlight lang="bash">
$ git rm --cached README.txt #Видалення файлу README.txt з індексу, тобто він фізично залишається, але зміни в ньому не відслідковуються
$ git rm --cached README.txt #Видалення файлу README.txt з індексу, тобто він фізично залишається, але зміни в ньому не відстежуються.
</syntaxhighlight>
</source>


==== Видалення з репозиторію ====
==== Видалення з репозиторію ====
<source lang="bash">
<syntaxhighlight lang="bash">
$ git rm README.txt #Видалення файлу README.txt з робочого каталогу та індексу !!! Використовувати уважно!
$ git rm README.txt #Видалення файлу README.txt з робочого каталогу та індексу !!! Використовувати уважно!
</syntaxhighlight>
</source>


==== Рекурсивне видалення ====
==== Рекурсивне видалення ====


<source lang="bash">
<syntaxhighlight lang="bash">
$ git rm --cached -r . #Видалення з індексу всіх файлів в поточному каталозі, включаючи вкладені каталоги
$ git rm --cached -r . #Видалення з індексу всіх файлів в поточному каталозі, включаючи вкладені каталоги
</syntaxhighlight>
</source>


=== Робота з декількома гілками ===
=== Робота з декількома гілками ===


==== Створення нової гілки ====
==== Створення нової гілки ====
<source lang="bash">
<syntaxhighlight lang="bash">
$ git branch new_branch # Створення нової гілки з назвою new_branch
$ git branch new_branch # Створення нової гілки з назвою new_branch
$ git checkout new_branch # Переключення на гілку new_branch
$ git checkout new_branch # Перемикання на гілку new_branch
</syntaxhighlight>
</source>


==== Перегляд всіх гілок ====
==== Перегляд всіх гілок ====
<source lang="bash">
<syntaxhighlight lang="bash">
$ git branch # Переглянути всі гілки
$ git branch # Переглянути всі гілки
</syntaxhighlight>
</source>


== Вебінтерфейси ==
== Веб-інтерфейси ==
* [http://www.kernel.org/git/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=log gitweb]{{Недоступне посилання|date=лютий 2019 |bot=InternetArchiveBot }}&nbsp;— написаний на [[Perl]] ({{lang-en|Kay Sievers}}). Більшість наведених нижче великих публічних git-репозиторіїв його й застосовує.
* [http://www.kernel.org/git/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=log gitweb]{{Недоступне посилання|date=лютий 2019 |bot=InternetArchiveBot }}&nbsp;— написаний на [[Perl]] ({{lang-en|Kay Sievers}}). Більшість наведених нижче великих публічних git-репозиторіїв його й застосовує.
* [https://web.archive.org/web/20080119122646/http://grmso.net:8090/ wit]&nbsp;— написаний на Ruby/eRuby ({{lang-en|Christian Meder}})
* [https://web.archive.org/web/20080119122646/http://grmso.net:8090/ wit]&nbsp;— написаний на Ruby/eRuby ({{lang-en|Christian Meder}})
* [https://web.archive.org/web/20080109200835/http://flameeyes.is-a-geek.org/projects#gitarella gitarella]&nbsp;— [[Ruby]] (Diego Pettenò)
* [https://web.archive.org/web/20080109200835/http://flameeyes.is-a-geek.org/projects#gitarella gitarella]&nbsp;— [[Ruby]] (Diego Pettenò)
* [http://code.google.com/p/git-php/ git-php]&nbsp;— [[PHP]] ({{lang-en|Zack Bartel}})
* [http://code.google.com/p/git-php/ git-php] {{Webarchive|url=https://web.archive.org/web/20071203154959/http://code.google.com/p/git-php/ |date=3 грудня 2007 }}&nbsp;— [[PHP]] ({{lang-en|Zack Bartel}})
* [https://web.archive.org/web/20071218144652/http://hjemli.net/git/ cgit]&nbsp;— написаний на [[C (мова програмування)|C]] ({{lang-en|Lars Hjemli}})
* [https://web.archive.org/web/20071218144652/http://hjemli.net/git/ cgit]&nbsp;— написаний на [[C (мова програмування)|C]] ({{lang-en|Lars Hjemli}})
* [http://git.or.cz/cogito/ cogito]&nbsp;— інтерфейс з командами спроектованими для користувачів звиклих до [[CVS]] та [[SVN]] ({{lang-en|Petr Baudis}})
* [http://git.or.cz/cogito/ cogito] {{Webarchive|url=https://web.archive.org/web/20080116233528/http://git.or.cz/cogito/ |date=16 січня 2008 }}&nbsp;— інтерфейс з командами спроєктованими для користувачів звиклих до [[CVS]] та [[SVN]] ({{lang-en|Petr Baudis}})
* [http://www.procode.org/stgit/ StGit]&nbsp;— написана на [[Python]] система керування колекцією латок ({{lang-en|Catalin Marinas}})
* [http://www.procode.org/stgit/ StGit] {{Webarchive|url=https://web.archive.org/web/20070929101333/http://www.procode.org/stgit/ |date=29 вересня 2007 }}&nbsp;— написана на [[Python]] система керування колекцією латок ({{lang-en|Catalin Marinas}})


== Обмін змінами з іншими системами управління версіями ==
== Обмін змінами з іншими системами керування версіями ==
* [[CVS]]&nbsp;— імпорт і експорт, емуляція CVS-сервера, в стандартному постачанні
* [[Concurrent Versions System|CVS]]&nbsp;— [[Імпорт і експорт даних|імпорт і експорт]], емуляція CVS-сервера, в стандартному постачанні
* [[Subversion]]&nbsp;— імпорт і експорт (частково), в стандартному постачанні
* [[Subversion]]&nbsp;— імпорт і експорт (частково), в стандартному постачанні
* .tar.gz, .tar.bz2 (серії версійних файлів)&nbsp;— імпорт і експорт, в стандартному постачанні
* .tar.gz, .tar.bz2 (серії версійних файлів)&nbsp;— імпорт і експорт, в стандартному постачанні
* [[Perforce]]&nbsp;— імпорт і експорт (частково), в стандартному постачанні і в архівах Git Mailing List
* [[Perforce]]&nbsp;— імпорт і експорт (частково), в стандартному постачанні та в архівах Git Mailing List
* [[Mercurial]]&nbsp;— імпорт і експорт, в стандартному постачанні і за допомогою зовнішньої програми (Tailor)
* [[Mercurial]]&nbsp;— імпорт і експорт, в стандартному постачанні та за допомогою зовнішньої програми (Tailor)


Крім того, завдяки своїй структурі даних та форматам даних обміну Git дозволяє порівняно просто і ефективно реалізувати обмін даними практично зі всіма існуючими системами управлінням версіями.
Крім того, завдяки своїй структурі даних та форматам даних обміну Git дозволяє порівняно просто й ефективно реалізувати обмін даними практично зі всіма наявними системами керування версіями.


== Проекти, що використовують Git ==
== Проєкти, що використовують Git ==
Git застосовується в багатьох проектах; можна відзначити як апстріми, так і дистрибутиви GNU/Linux:
Git застосовується в багатьох проєктах; можна відзначити як апстріми, так і дистрибутиви GNU/Linux:
{{Columns-list|2|
* [[ядро Linux]] [http://git.kernel.org]
* [[ядро Linux]]<ref>{{Cite web|title=Kernel.org git repositories|url=https://git.kernel.org/|website=git.kernel.org|accessdate=2024-01-30}}</ref>;
* [http://gitweb.freedesktop.org/ freedesktop.org] (там же і X.org)
* freedesktop.org;
* [[Wine]] [http://source.winehq.org/git/]
* [[Wine]]<ref>{{Cite web|title=Wine|url=https://gitlab.winehq.org/explore/groups|website=GitLab|accessdate=2024-01-30|language=en}}</ref>;
* [[Debian]] [http://git.debian.org/]
* [[Perl]]<ref>[http://use.perl.org/submit.pl?op=viewsub&subid=2770&note=&title=Perl+5+now+uses+Git+for+version+control Perl 5 now uses Git for version control]{{Недоступне посилання|date=червень 2019 |bot=InternetArchiveBot }}</ref>
* [[Debian]]<ref>{{Cite web|title=Debian|url=https://salsa.debian.org/public|website=GitLab|date=2024-01-30|accessdate=2024-01-30|language=en}}</ref>;
* [[Perl]]<ref>[http://use.perl.org/submit.pl?op=viewsub&subid=2770&note=&title=Perl+5+now+uses+Git+for+version+control Perl 5 now uses Git for version control]{{Недоступне посилання|date=червень 2019 |bot=InternetArchiveBot }}</ref>;
* [[ALT Linux]]<ref>{{Cite web |url=http://git.altlinux.org/people |title=Архівована копія |accessdate=6 січня 2008 |archive-date=4 вересня 2019 |archive-url=https://web.archive.org/web/20190904095713/http://git.altlinux.org/people/ }}</ref>;
* {{iw|ALT Linux}}<ref>http://git.altlinux.org/people</ref>
* [[LibreOffice]],
* [[LibreOffice]];
* [[systemd]],
* [[systemd]];
* [[X.Org]],
* [[X Window System|X.Org]];
* [[Wayland]],
* [[Wayland]];
* [[Mesa 3D]],
* [[Mesa 3D]];
* [[Gstreamer]],
* [[GStreamer|Gstreamer]];
* [[Dragonfly BSD]],
* [[DragonFly BSD|Dragonfly BSD]];
* [[Eclipse]],
* [[Eclipse]];
* [[GNOME]],
* [[GNOME]];
* [[KDE]],
* [[KDE]];
* [[Qt]],
* [[Qt]];
* [[Ruby on Rails]],
* [[Ruby on Rails]];
* [[PostgreSQL]],
* [[PostgreSQL]];
* [[VideoLAN]],
* [[VideoLAN]];
* [[PHP]],
* [[PHP]];
* [[Xen]],
* [[Xen]];
* [[Minix]],
* [[Minix]];
* [[MariaDB]]<ref>{{Cite web |url=https://blog.mariadb.org/mariadb-moves-development-to-github/ |title=MariaDB moves development to Github |accessdate=29 травень 2014 |archiveurl=https://web.archive.org/web/20140529141459/https://blog.mariadb.org/mariadb-moves-development-to-github/ |archivedate=29 травень 2014 |deadurl=yes }}</ref>
* [[MariaDB]]<ref>{{Cite web |url=https://blog.mariadb.org/mariadb-moves-development-to-github/ |title=MariaDB moves development to Github |accessdate=29 травня 2014 |archiveurl=https://web.archive.org/web/20140529141459/https://blog.mariadb.org/mariadb-moves-development-to-github/ |archivedate=29 травня 2014 |deadurl=yes }}</ref>
}}


== Виноски ==
== Виноски ==
Рядок 162: Рядок 164:


== Див. також ==
== Див. також ==
* [http://git-scm.com/ Домашня сторінка Git]
* [http://git-scm.com/ Домашня сторінка Git] {{Webarchive|url=https://web.archive.org/web/20120206095720/http://git-scm.com/ |date=6 лютого 2012 }}
* [http://git-scm.com/book/uk Переклад українською книги «Pro Git» Скотта Чакона (Scott Chacon) та Бена Страуба (Ben Straub)]
* [http://git-scm.com/book/uk Переклад українською книги «Pro Git» Скотта Чакона (Scott Chacon) та Бена Страуба (Ben Straub)] {{Webarchive|url=https://web.archive.org/web/20141022105858/http://git-scm.com/book/uk |date=22 жовтня 2014 }}
* [http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/uk/ Книга «Git Magic» українською]
* [http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/uk/ Книга «Git Magic» українською] {{Webarchive|url=https://web.archive.org/web/20131128074316/http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/uk/ |date=28 листопада 2013 }}
* [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git User's Manual] {{ref-en}} (також розповсюджується разом з початковим текстом програми: <code>Documentation/user-manual.txt</code>)
* [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git User's Manual] {{Webarchive|url=https://web.archive.org/web/20180305063745/http://www.kernel.org/pub/software/scm/git/docs/user-manual.html |date=5 березня 2018 }} {{ref-en}} (також розповсюджується разом з початковим текстом програми: <code>Documentation/user-manual.txt</code>)
* [https://web.archive.org/web/20081119141339/http://kernel.org./pub/software/scm/git/ Сторінка Git на kernel.org]
* [https://web.archive.org/web/20081119141339/http://kernel.org./pub/software/scm/git/ Сторінка Git на kernel.org]
* [https://www.kernel.org/pub/software/scm/git/docs/giteveryday.html Everyday Git] («Git на кожен день»)&nbsp;— набір з приблизно 20 команд (насправді їх буде близько 5—6), які стануть у нагоді в повсякденному використанні системи.
* [https://www.kernel.org/pub/software/scm/git/docs/giteveryday.html Everyday Git] {{Webarchive|url=https://web.archive.org/web/20160304194820/https://www.kernel.org/pub/software/scm/git/docs/giteveryday.html |date=4 березня 2016 }} («Git на кожен день»)&nbsp;— набір з приблизно 20 команд (насправді їх буде близько 5—6), які стануть у пригоді в повсякденному використанні системи.
* [http://www.youtube.com/watch?v=4XpnKHJAok8 Linus Torvalds on Git]&nbsp;— розповідь [[Торвальдс, Лінус Бенедикт|Лінуса Торвальдса]] про git та інші [[система керування версіями|системи керування версіями]] (YouTube)
* [http://www.youtube.com/watch?v=4XpnKHJAok8 Linus Torvalds on Git] {{Webarchive|url=https://web.archive.org/web/20151223221542/https://www.youtube.com/watch?v=4XpnKHJAok8 |date=23 грудня 2015 }}&nbsp;— розповідь [[Торвальдс, Лінус Бенедикт|Лінуса Торвальдса]] про git та інші [[система керування версіями|системи керування версіями]] (YouTube)
* [http://docs.linux.org.ua/Інше/Патчення_з_допомогою_git_cogito_та_quilt/ Патчення з допомогою git, cogito та quilt]
* [http://docs.linux.org.ua/Інше/Патчення_з_допомогою_git_cogito_та_quilt/ Патчення з допомогою git, cogito та quilt] {{Webarchive|url=https://web.archive.org/web/20171003152418/http://docs.linux.org.ua/Інше/Патчення_з_допомогою_git_cogito_та_quilt/ |date=3 жовтня 2017 }}
* [http://beta.enetri.com/2009/10/26/2.html Базове використання Git]
* [http://beta.enetri.com/2009/10/26/2.html Базове використання Git] {{Webarchive|url=https://web.archive.org/web/20100323022418/http://beta.enetri.com/2009/10/26/2.html |date=23 березня 2010 }}



{{Compu-prog-stub}}
{{Compu-prog-stub}}

{{Системи управління версіями}}
{{Системи керування версіями}}
{{ВП-портали|Програмування|}}
{{ВП-портали|Програмування|}}
[[Категорія:Системи керування версіями]]
[[Категорія:Системи керування версіями]]
Рядок 180: Рядок 182:
[[Категорія:Вільне програмне забезпечення на C]]
[[Категорія:Вільне програмне забезпечення на C]]
[[Категорія:Статті з прикладами коду мовою Bash]]
[[Категорія:Статті з прикладами коду мовою Bash]]
[[Категорія:Програмне забезпечення, що використовує ліцензію GNU GPL]]
[[Категорія:Вільне програмне забезпечення на Perl]]

Поточна версія на 10:44, 30 січня 2024

Git
Типрозподілена система керування версіями
АвторЛінус Торвальдс[1]
РозробникЛінус Торвальдс, Джуніо Хамано
Стабільний випуск2.26.2 (19 квітня 2020; 4 роки тому (2020-04-19))
Операційна системаLinux, POSIX, Windows, OS X
Мова програмуванняC, Bourne Shell, Tcl, Perl[2]
ЛіцензіяGNU GPL v2
Репозиторійgit.kernel.org/pub/scm/git/git.git
Вебсайтgit-scm.com

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, хоч має низку обмежень, дуже популярний в контрольованих мережах, тому що дозволяє використання наявних конфігурацій мережевих фільтрів.

Принцип роботи

[ред. | ред. код]

Збереження файлів

[ред. | ред. код]
Дані як зліпки стану проєкту в часі

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, який зливає дві гілки в одну.

Візуалізатори історії

[ред. | ред. код]

Приклади

[ред. | ред. код]

Створення локального репозиторію

[ред. | ред. код]

Додаємо всі файли

$ cd <path_project> #Шлях до проєкту (наприклад: $ cd с:/www/git). Переходимо в наявну теку, в якій буде розміщено проєкт
$ git init #Ініціалізація репозиторію. Створює в каталозі Project каталог .git і в ньому всі необхідні файли репозиторію
$ git add . #Додаємо всі файли, які наявні в каталозі Project, під версійний контроль
$ git commit -m "Коментар" #Фіксуємо зміни

Клонувати проєкт з віддаленого сервера в локальний каталог

[ред. | ред. код]
$ git clone <remote_path_project> #Проєкт буде клоновано з віддаленого сервера у поточний локальний каталог (наприклад, https://github.com/git/git.git)

Отримати останні зміни проєкту з віддаленого сервера

[ред. | ред. код]
$ git pull #Всі файли будуть оновлені до останньої версії з віддаленого сервера

Перегляд історії змін

[ред. | ред. код]
$ git log #Відображає всі зміни, зроблені в поточній гілці проєкту в хронологічному порядку

Видалення файлів

[ред. | ред. код]

Видалення з індексу

[ред. | ред. код]
$ 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[недоступне посилання з лютого 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

[ред. | ред. код]

Git застосовується в багатьох проєктах; можна відзначити як апстріми, так і дистрибутиви GNU/Linux:

Виноски

[ред. | ред. код]
  1. https://web.archive.org/web/20151116175401/https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290
  2. git/git.git/tree. git.kernel.org. Архів оригіналу за 27 травня 2012. Процитовано 15 червня 2009.
  3. https://directory.fsf.org/wiki/Git
  4. Kernel.org git repositories. git.kernel.org. Процитовано 30 січня 2024.
  5. Wine. GitLab (англ.). Процитовано 30 січня 2024.
  6. Debian. GitLab (англ.). 30 січня 2024. Процитовано 30 січня 2024.
  7. Perl 5 now uses Git for version control[недоступне посилання з червня 2019]
  8. Архівована копія. Архів оригіналу за 4 вересня 2019. Процитовано 6 січня 2008.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  9. MariaDB moves development to Github. Архів оригіналу за 29 травня 2014. Процитовано 29 травня 2014.

Див. також

[ред. | ред. код]