Гіт розроблявся не стільки, скільки розвивався .
Погляньте самі. Клоніруйте офіційний сховище git , відкрийте його gitk
(або ваш улюблений графічний переглядач журналу git) та перегляньте його найдавніші зміни.
Ви побачите, що він спочатку мав лише саму основну функціональність (об’єктну базу даних та індекс). Все інше робилося вручну . Однак це невелике ядро було розроблено так, щоб його легко автоматизували за допомогою сценаріїв оболонок. Ранні користувачі git писали власні сценарії оболонки для автоматизації загальних завдань; потроху ці сценарії були включені до розподілу git (див. ранній приклад 839a7a0 ). Кожен раз, коли виникала нова потреба, сценарії адаптувались для того, щоб це допустити. Набагато пізніше кілька цих сценаріїв будуть переписані на С.
Це поєднання чистого, ортогонального ядра (яке ви все ще можете використовувати безпосередньо, якщо у вас є потреба), з верхнім шаром, який органічно зростав над ним, - це те, що надає git свою силу. Звичайно, це також те, що надає йому велику кількість дивно названих команд та опцій.
Стиснення, графіки, позбавлення від ревізійних номерів, наголос на розгалуженні, зберіганні, видаленні ... Звідки це все взялося?
Багато чого на початку не було.
У той час як кожен об'єкт стискався індивідуально, а дублікатів уникнуло їх іменування, файлів "pack", які відповідали за високу компресію, яку ми звикли бачити в git, не існувало. Філософія на початку полягала в тому, що "дисковий простір дешевий".
Якщо під "графіками" ви маєте на увазі графічні глядачі gitk
, вони з'явилися пізніше (AFAIK, перший був gitk
). AFAIK, BitKeeper також переглядав графічну історію.
Позбавлення від номерів версій насправді основна концепція використання git із використанням файлової системи, адресованої вмістом, для зберігання об'єктів, здебільшого виходить з монотонних . У той час монотонність була повільною; якби це не так, можливо, Лінус використав би це замість створення git.
Підкреслюється розгалуження дещо неминуче в розподіленій системі управління версіями, оскільки кожен клон діє як окрема гілка.
Stashing ( git stash
), IIRC, досить недавній час. Рефлогів, якими вона користується, на початку не було.
Навіть дистанційних спочатку не було. Спочатку ви копіювали об'єкти вручну, використовуючи rsync
.
По черзі кожну з цих особливостей хтось додав. Не всі з них - можливо, навіть не більшість з них - були написані Лінусом. Кожен раз, коли хтось відчуває потребу, яку git не виконує, можна створити нову функцію над основним шаром "сантехніки" git та запропонувати її для включення. Якщо це добре, це, мабуть, буде прийнято, ще більше підвищивши корисність git (та складність його командного рядка).