2010-07-06 4 views
41

Возможных Дубликатов:
For home projects, can Mercurial or Git (or other DVCS) provide more advantages over Subversion?
What are the relative strengths and weaknesses of Git, Mercurial, and Bazaar?Git против Mercurial против SVN

Каков некоторые различий между этими системами управления версиями? Какой из них лучше всего подходит для небольшого проекта из двух человек?

+1

См. [Для домашних проектов, могут ли Mercurial или Git (или другие DVCS) предоставить больше преимуществ перед Subversion?] (Http://stackoverflow.com/questions/1218471/for-home-projects-can-mercurial-or- git-or-other-dvcs-обеспечивают-больше-преимуществ-o) –

+0

См. http://stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128 – VonC

+0

http://stackoverflow.com/questions/ 885213/in-short-what-the-the-преимущества-git-and-mercurial-over-subversion http://stackoverflow.com/questions/871/why-is-git-better-than-subversion – joeynelson

ответ

46

SVN отличается от Git и Mercurial тем, что это единственный репозиторий, который все пользователи должны тянуть и фиксировать.

Git и Mercurial имеют распределенную модель. Это означает, что на каждом компьютере есть репозиторий, и обычно есть «официальный» репозиторий, который люди будут выбирать для внесения изменений и извлечения.

Git и Mercurial очень похожи. Я предпочитаю Mercurial, потому что я нашел его намного проще в использовании. Для группы из 2 человек я бы рекомендовал Mercurial, но это только мое мнение. Если вы не знакомы с управлением версиями, вам все равно придется тратить свое время на изучение любого из вариантов, но Mercurial казался мне самым легким.

Чтобы запустить репозиторий Mercurial, вам нужно открыть оболочку и cd в каталог, в котором вы хотите иметь управление версиями, и введите hg init. Это создает репозиторий. Чтобы добавить все в папку в репозиторий, введите hg add .. Вот некоторые другие различные команды:

  • Для фиксации локальных изменений: hg commit -m "Descriptions of changes"
  • Тянуть до последней версии с сервера: hg pull
  • Чтобы подтолкнуть локальные изменения: hg push
+7

Если это еще не было описано в одном из связанных дубликатов (указано в вопросе), вы должны отправить ответ на один из них. –

+1

Отличное определение. Я действительно работаю с mercurial в одной компании и работаю с SVN в другой компании. Я думаю об использовании Git для моих личных проектов. Я буду следить за подробностями, когда у меня будет лучшее понимание git. –

+0

Если вам нужно выбрать между ртутным и git. Пойдите с git. Я не говорю, что это лучше. Но это тот, который обычно используется сегодня. Существует гораздо более обширная экосистема, окружающая git (Github, Stahs, Gitlab, поддержка IDE и т. Д.), Чем ртутная. Кроме того, у большинства разработчиков будет установлен git и будет знать, как его использовать. – Gellweiler

15

Для начала есть язык, на котором они написаны. Мой опыт с Git и Mercurial был очень похож, но я знаю, что если я хочу настроить Mercurial, я могу это сделать, потому что он написан на Python. Гит, по крайней мере, несколько в С, о чем я не знаком.

Git и Mercurial - это то, что называется распределенным. Каждая копия создается равным образом, и они могут толкать и тянуть (используя эту терминологию), изменяются друг от друга на разовой основе. Subversion, с другой стороны, состоит из одного центрального репозитория, и каждая рабочая копия является подчиненным подчиненным центральному серверу, нажатие и вытаскивание (фиксация и обновление в этом случае) изменяет его и только в одном.

Установка Git или Mercurial для пары людей состоит в получении доступа SSH к одному и тому же серверу и установке нескольких пакетов. Если для SVN, насколько мне известно, вам нужно настроить и запустить фактическое серверное приложение под Apache, а затем связаться с сертификатом SSL и .htaccess и т. Д., Чтобы его защитить.

Для всех моих личных проектов я иду с Mercurial или Git. Если бы я работал с большой командой, я бы, вероятно, пошел Subversion, потому что вы получаете централизованную аутентификацию и хостинг. Но для двух человек я бы выбрал один из распределенных, потому что тогда вам не нужно возиться с централизованной аутентификацией и хостингом. :-)

+2

Вы могут обрабатывать распределенные системы контроля версий, как если бы они были централизованы, если это соответствует рабочему процессу большой команды. –

+1

Правда. Я думаю, именно поэтому для современных проектов они, похоже, заменяют SVN прямо. См. Github. Но я думаю, что аутентификация/аудит сложнее выполнить с помощью DVCS, потому что имя пользователя самонастраивается, и единственный (простой) способ сделать это - поделиться учетной записью SSH. Если вы доверяете всем этим ключом, все в порядке, но SVN расскажет вам с гораздо большей уверенностью, кто сделал что-то, и люди могут иметь доступ к фиксации, не имея также возможности перезаписывать весь репозиторий - если у меня есть привилегии сделать Git или HG commit, у меня есть привилегии, чтобы стереть все это. – jacobbaer

+1

Git теперь поддерживает подписанные PGP коммиты, которые невозможно подделать, просто откажитесь от не подписанных коммитов, если вы заинтересованы в аудите. И аутентификация, вы говорите, как если бы вы использовали один и тот же ключ SSH? Это просто глупо и совершенно небезопасно. – kyrias

6

Git и Mercurial очень похожи (но достаточно различны, чтобы оправдывать осторожность).SVN, с другой стороны, совсем другой: первые два являются распределенными VCS, поэтому они не требуют центрального сервера, а SVN. В целом многие проекты движутся к распределенным системам.

Для вашего небольшого проекта вы, вероятно, лучше с Git или Mercurial. Какой из них вы выбираете, по сути, дело вкуса, хотя я предпочитаю Git сам (и гораздо более знаком с ним). Вам вообще не нужно настраивать сервер: вы можете нажимать/вытаскивать изменения через SSH или даже отправлять патчи по электронной почте друг другу (это можно сделать непосредственно из VCS, но это своего рода хлопот). Вы можете настроить центральный сервер в любое время, и все изменения будут там. Вы можете использовать, например. GitHub или Gitorious для размещения вашего проекта (если вы собираетесь с Git, я не знаю о Mercurial).

Смежные вопросы