Git не кращий, ніж Subversion. Але теж не гірше. Це інакше.
Ключова відмінність - децентралізація. Уявіть, що ви розробник в дорозі, ви розвиваєтеся на своєму ноутбуці і хочете мати управління джерелом, щоб ви могли повернутися на 3 години назад.
З програмою Subversion виникла проблема: сховище SVN може знаходитись у тому місці, куди ви не можете дістатися (у вашій компанії, і у вас немає Інтернету на даний момент), ви не можете скористатися. Якщо ви хочете зробити копію свого коду, вам доведеться його буквально скопіювати / вставити.
З Git у вас немає цієї проблеми. Ваша локальна копія є сховищем, і ви можете взяти на себе зобов’язання та отримати всі переваги контролю джерела. Коли ви відновите підключення до основного сховища, ви можете скористатися ним.
Спочатку це добре виглядає, але просто пам’ятайте про додаткову складність цього підходу.
Здається, Git - це "нова, блискуча, класна" річ. Це аж ніяк не погано (є причина, що Лінус все-таки написав це для розробки ядра Linux), але я відчуваю, що багато людей стрибають на поїзді "Розподілений контроль над джерелами" тільки тому, що він новий і написаний Лінусом Торвальдсом, фактично знаючи, чому / якщо краще.
Субверсія має проблеми, але Git, Mercurial, CVS, TFS або інше.
Редагувати: Тож ця відповідь зараз вже рік і все ще приносить багато результатів, тому я подумав, що я ще додаю пояснення. За останній рік з моменту написання цього повідомлення Git набрав чимало обертів та підтримки, тим більше, що сайти на зразок GitHub справді зняли. Я зараз використовую і Git, і Subversion, і я хотів би поділитися особистою думкою.
Насамперед, Git спочатку може бути дуже заплутаним, коли працює децентралізовано. Що таке пульт? і Як правильно налаштувати початковий сховище? два питання, які виникають на початку, особливо порівняно з простим "svnadmin create" SVN, "git init" Гіта може приймати параметри --bare та --shared, що, здається, є "правильним" способом налаштування централізованого сховище. Для цього є причини, але це додає складності. Документація команди "checkout" дуже заплутує людей, які змінюються - "правильний" спосіб, здається, "git clone", тоді як "git checkout", здається, перемикає гілки.
Git дійсно світить, коли ви децентралізовані. У мене вдома є сервер і ноутбук на дорозі, і SVN тут просто не працює. З SVN я не можу керувати локальним джерелом, якщо я не підключений до сховища (Так, я знаю про SVK або про способи копіювання репо). Що стосується Git, це все одно за замовчуванням. Це додаткова команда (git commit здійснює локально, тоді як git push origin origin поштовхує ведучу гілку до віддаленого під назвою "origin").
Як було сказано вище: Git додає складності. Два режими створення сховищ, checkout vs. clone, commit vs. push ... Ви повинні знати, які команди працюють локально, а які працюють із "сервером" (я припускаю, що більшість людей все ще люблять центральний "master-сховище" ).
Також інструментарій все ще недостатній, принаймні для Windows. Так, є Visual Studio AddIn, але я все ще використовую git bash з msysgit.
SVN має перевагу в тому, що це набагато простіше в освоєнні: є ваше сховище, всі зміни до нього, якщо ви знаєте, як створити, здійснити та здійснити замовлення, і ви готові піти і можете піклувати такі речі, як розгалуження, оновлення тощо пізніше на.
Перевага Git має те, що він набагато краще підходить, якщо деякі розробники не завжди підключені до основного сховища. Крім того, це набагато швидше, ніж SVN. І з того, що я чую, підтримка розгалуження та об'єднання є набагато кращою (чого можна очікувати, оскільки це основні причини, про які вона написана).
Це також пояснює, чому він набуває стільки гудів в Інтернеті, оскільки Git ідеально підходить для проектів з відкритим кодом: Просто Fork it, введіть свої зміни у власний Fork, а потім попросіть оригінального технічного керівника проекту здійснити зміни. З Git це просто працює. Дійсно, спробуйте це на Github, це магія.
Я також бачу мости Git-SVN: Центральний сховище - це репортаж Subversion, але розробники локально працюють з Git і міст потім підштовхує їх зміни до SVN.
Але навіть із цим довгим доповненням я все ще стою свого основного повідомлення: Git не кращий чи гірший, він просто інший. Якщо у вас є потреба у "Офлайн-контролі джерел" та бажання витратити трохи додаткового часу на її вивчення, це фантастично. Але якщо у вас суворо централізований контроль над джерелами та / або ви намагаєтесь запровадити контроль над джерелом, в першу чергу через те, що ваші колеги не зацікавлені, то простота та відмінна інструментальність (принаймні для Windows) SVN-блиску.