Git не лучше чем Subversion. Но тоже не хуже. Это другое.
Главное отличие в том, что он децентрализован. Представьте, что вы - разработчик в дороге, вы разрабатываете на своем ноутбуке и хотите иметь контроль над исходным кодом, чтобы вы могли вернуться назад на 3 часа.
С Subversion у вас есть проблема: репозиторий SVN может находиться в месте, к которому вы не можете добраться (в вашей компании, и у вас нет интернета в данный момент), вы не можете выполнить коммит. Если вы хотите сделать копию своего кода, вы должны буквально скопировать / вставить его.
С Git у вас нет этой проблемы. Ваша локальная копия является хранилищем, и вы можете выполнить ее и получить все преимущества контроля версий. Когда вы восстановите подключение к основному хранилищу, вы можете выполнить фиксацию против него.
Поначалу это выглядит хорошо, но имейте в виду сложность этого подхода.
Git, кажется, "новая, блестящая, классная" вещь. Это ни в коем случае не плохо (есть причина, по которой Линус написал это для разработки ядра Linux в конце концов), но я чувствую, что многие люди прыгают на поезд «Распределенный контроль исходного кода» только потому, что он новый и написан Линусом Торвальдсом, на самом деле без зная, почему / если это лучше.
У Subversion есть проблемы, но есть и у Git, Mercurial, CVS, TFS и так далее.
Изменить: так что этот ответ уже год, и все еще вызывает много голосов, поэтому я подумал, что я добавлю еще несколько объяснений. За последний год, прошедший с момента написания этой статьи, Git получил большой импульс и поддержку, особенно с тех пор, как такие сайты, как GitHub, действительно заработали. В настоящее время я использую и Git, и Subversion, и я хотел бы поделиться некоторыми личными соображениями.
Во-первых, Git может быть очень запутанным, когда работает децентрализованно. Что такое пульт? и как правильно настроить начальный репозиторий? это два вопроса, которые возникают в начале, особенно по сравнению с простым SVN "create svnadmin create", Git "git init" Git может принимать параметры --bare и --shared, что, кажется, является "правильным" способом установки централизованного репозиторий. Есть причины для этого, но это добавляет сложности. Документация по команде «checkout» очень запутывает людей, переходящих с одного места на другой: «правильный» путь - это «git clone», а «git checkout», похоже, переключает ветки.
Git действительно светит, когда вы децентрализованы. У меня есть сервер дома и ноутбук в дороге, а SVN здесь просто не работает. С SVN у меня не может быть локального управления исходным кодом, если я не подключен к репозиторию (да, я знаю о SVK или о способах копирования репо). В любом случае, с Git это режим по умолчанию. Это дополнительная команда (git commit фиксирует локально, тогда как git push origin master передает ветку master на удаленный узел с именем origin).
Как сказано выше: Git добавляет сложности. Два режима создания репозиториев: извлечение или клонирование, фиксация и push ... Вы должны знать, какие команды работают локально, а какие работают с «сервером» (я предполагаю, что большинству людей все еще нравится центральный «главный репозиторий»). ).
Кроме того, инструментов по-прежнему недостаточно, по крайней мере, в Windows. Да, есть надстройка Visual Studio, но я все еще использую git bash с msysgit.
Преимущество SVN в том, что его НАМНОГО проще изучать: там есть ваш репозиторий, все изменения к нему, если вы знаете, как создавать, фиксировать и извлекать, и вы готовы к работе, а позже можете собирать такие вещи, как ветвление, обновление и т. Д. на.
Git имеет то преимущество, что он НАМНОГО лучше подходит, если некоторые разработчики не всегда подключены к главному репозиторию. Кроме того, это намного быстрее, чем SVN. И из того, что я слышал, поддержка ветвления и слияния намного лучше (что и следовало ожидать, так как это основные причины, по которым она была написана).
Это также объясняет, почему он так популярен в Интернете, поскольку Git идеально подходит для проектов с открытым исходным кодом: просто создайте его, передайте изменения в свой собственный Fork, а затем попросите оригинального сопровождающего проекта потянуть ваши изменения. С Git это просто работает. Действительно, попробуйте это на Github, это волшебство.
Я также вижу мосты Git-SVN: центральное хранилище - это репозиторий Subversion, но разработчики локально работают с Git, а затем мост вносит свои изменения в SVN.
Но даже с этим длинным дополнением, я все еще придерживаюсь своего основного сообщения: Git не лучше и не хуже, он просто другой. Если у вас есть потребность в автономном контроле исходного кода и желание потратить дополнительное время на его изучение, это фантастика. Но если у вас строго централизованный контроль версий и / или вы в первую очередь изо всех сил пытаетесь внедрить контроль версий, потому что ваши коллеги не заинтересованы, тогда простота и превосходные инструменты (по крайней мере, для Windows) SVN блестят.