Як розроблявся Git?


9

Нещодавно моє робоче місце перейшло на Git, і я його люблю (і ненавиджу!). Я дуже люблю це, і він надзвичайно потужний. Єдине, що я ненавиджу, це те, що іноді це занадто потужно (і, можливо, трохи стисло / заплутано).

Моє запитання: Як був розроблений Git? Використовуючи його недовго, ви відчуваєте, що він може працювати з багатьма незрозумілими робочими процесами, які інші системи управління версіями не змогли. Але також відчувається елегантність знизу. І швидко!

Це, без сумніву, частково талант Лінуса. Але мені цікаво, чи базувалась загальна конструкція git? Я читав про BitKeeper, але в облікових записах не вистачає технічних деталей. Стиснення, графіки, позбавлення від ревізійних номерів, наголос на розгалуженні, зберіганні, видаленні ... Звідки це все взялося?

Лінус справді вибив цього з парку і на майже першій спробі! Це досить добре використовувати, коли ти пройдеш криву навчання.


ймовірно, ви могли б отримати допомогу на каналі IRC git (#git on freenode)
yati sagade


2
you get the feel that it can handle many obscure workflows that other version control systems could not: Це, мабуть, тому, що воно було розроблене для обробки ядра Linux, горезвісно хакітного, великого і складного фрагмента коду.
янніс

1
До 10-ї річниці Гіта ось стаття з інтерв'ю з Torvalds: linux.com/news/featured-blogs/185-jennifer-cloer/…
Шрідхар Сарнобат

Відповіді:


17

Гіт розроблявся не стільки, скільки розвивався .

Погляньте самі. Клоніруйте офіційний сховище git , відкрийте його gitk(або ваш улюблений графічний переглядач журналу git) та перегляньте його найдавніші зміни.

Ви побачите, що він спочатку мав лише саму основну функціональність (об’єктну базу даних та індекс). Все інше робилося вручну . Однак це невелике ядро ​​було розроблено так, щоб його легко автоматизували за допомогою сценаріїв оболонок. Ранні користувачі git писали власні сценарії оболонки для автоматизації загальних завдань; потроху ці сценарії були включені до розподілу git (див. ранній приклад 839a7a0 ). Кожен раз, коли виникала нова потреба, сценарії адаптувались для того, щоб це допустити. Набагато пізніше кілька цих сценаріїв будуть переписані на С.

Це поєднання чистого, ортогонального ядра (яке ви все ще можете використовувати безпосередньо, якщо у вас є потреба), з верхнім шаром, який органічно зростав над ним, - це те, що надає git свою силу. Звичайно, це також те, що надає йому велику кількість дивно названих команд та опцій.


Стиснення, графіки, позбавлення від ревізійних номерів, наголос на розгалуженні, зберіганні, видаленні ... Звідки це все взялося?

Багато чого на початку не було.

У той час як кожен об'єкт стискався індивідуально, а дублікатів уникнуло їх іменування, файлів "pack", які відповідали за високу компресію, яку ми звикли бачити в git, не існувало. Філософія на початку полягала в тому, що "дисковий простір дешевий".

Якщо під "графіками" ви маєте на увазі графічні глядачі gitk, вони з'явилися пізніше (AFAIK, перший був gitk). AFAIK, BitKeeper також переглядав графічну історію.

Позбавлення від номерів версій насправді основна концепція використання git із використанням файлової системи, адресованої вмістом, для зберігання об'єктів, здебільшого виходить з монотонних . У той час монотонність була повільною; якби це не так, можливо, Лінус використав би це замість створення git.

Підкреслюється розгалуження дещо неминуче в розподіленій системі управління версіями, оскільки кожен клон діє як окрема гілка.

Stashing ( git stash), IIRC, досить недавній час. Рефлогів, якими вона користується, на початку не було.

Навіть дистанційних спочатку не було. Спочатку ви копіювали об'єкти вручну, використовуючи rsync.

По черзі кожну з цих особливостей хтось додав. Не всі з них - можливо, навіть не більшість з них - були написані Лінусом. Кожен раз, коли хтось відчуває потребу, яку git не виконує, можна створити нову функцію над основним шаром "сантехніки" git та запропонувати її для включення. Якщо це добре, це, мабуть, буде прийнято, ще більше підвищивши корисність git (та складність його командного рядка).


"AFAIK, BitKeeper також переглядав графічну історію." Так. Це не зовсім красиво, але він дуже функціональний. Див. Bitkeeper.com/Test.Using.Looking.html , хоча це погана робота щодо показу, як вона відображає гілки.
Брайан Оуклі

1
Також цікаве прочитання, кілька вибраних електронних листів з початку git, де відображається трохи початкової еволюції: kerneltrap.org/node/4982
CesarB

Чи використовували програмісти для емуляції деякої функціональності git за допомогою cvs + rsync + httpd? Мені було б цікаво почути, які можливі домашні рішення.
Шрідхар Сарнобат

8

Я думаю, що головне - просто те, що git був розроблений самою кваліфікованою людиною на планеті для цього. І я не говорю про талант, я про досвід: я сумніваюся, що є хтось, хто керував кодовою базою із порівнянним поєднанням розміру та кількості учасників, як ядро ​​Linux, і все ще фактично займається більшістю інтеграції працювати сам.

Тож Лінус знав вимоги та використовував справи для розподіленої системи контролю версій краще, ніж хто-небудь інший. І, звичайно, це допомогло, що більшість цього кодування, яким він займався, було в С, і значна частина його була критичною.

В основному, це найкращий приклад почухати власний свербіж.


6
"Єдиний найкваліфікованіший"? Я не думаю, що так. Є багато розумних людей, які кваліфіковані для написання розподілених джерел управління. Хлопці з BitMover (компанія, що стоїть за BitKeeper) дійсно знають, що вони роблять. Лінус навіть надає кредит Ларрі Маквей за те, що він показав йому, як має працювати контроль вихідного коду . Без Ларрі не було б жодної поживи.
Брайан Оуклі

1
@BryanOakley, я думаю, що ми можемо уникнути розбиття, коли хтось доповнює когось за щось хороше. Усі знають, що ця вимога вимагає від великого розробника. Отже, якщо завтра перед вами постає велика проблема, ми можемо запам'ятати вас, як і ми з Деннісом Річі. Ніхто не кращий за інших, просто вони зустріли вимогу, визнану у всьому світі, і спочатку запропонували рішення.
Pankaj Upadhyay

2
@Bryan: Я впевнений, що досвід використання BitKeeper багато чому навчив Лінуса, і я повинен був це згадати. І звичайно, є багато інших розумних, кваліфікованих людей, які знають, що роблять. Але я все ще стверджую, що досвід Лінуса в підтримці ядра робить його найбільш кваліфікованим, досвідченим. Я можу помилятися, але чи можете ви вказати на такий великий проект із великою кількістю учасників, і коли людина, відповідальна за це, все ще так глибоко залучена до отримання фактичного коду всіх цих учасників спільної роботи?
Майкл Боргвардт

@Pankaj Upadhyay: Я нікого не лаю, я просто пояснював, чому я спростував відповідь. Ви щось сказали про "спочатку запропоновано рішення", що, на мою думку, означає, що ви думаєте, що git був якимось чином "першим" у певному відношенні. Як ви думаєте, що це було спочатку? Це, звичайно, не був першим розповсюдженим інструментом scm з дальнього пострілу.
Брайан Оуклі

1
@DeadMG: Більш важлива частина цього твердження приходить згодом "... і значна частина його критично важлива". Сумніваюсь, ви знайдете багатьох, хто буде стверджувати, що C не дуже добре підходить для впровадження високоефективного високопродуктивного коду, якщо ви це добре знаєте.
Майкл Боргвардт

6

Він був розроблений майже точно так, як описано в Git Parable .

Уявіть, що у вас є комп'ютер, на якому немає нічого, крім текстового редактора та декількох команд файлової системи. Тепер уявіть, що ви вирішили написати велику програму програмного забезпечення в цій системі. Оскільки ви відповідальний розробник програмного забезпечення, ви вирішите, що вам потрібно винайти якийсь метод для відстеження версій вашого програмного забезпечення, щоб ви могли отримати код, який ви раніше змінили або видалили. Далі йде розповідь про те, як ви могли б спроектувати одну таку систему управління версіями (VCS) та міркування, що стоять за цим вибором дизайну.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.