С помощью Git или Hg, если вся команда использует функции push и push с центрального сервера, чем он отличается от SVN? - PullRequest
2 голосов
/ 02 апреля 2011

Скажем, если вся команда, использующая Git или Mercurial, делает:

(пример в Mercurial (Hg)):

hg pull
hg update

  [edit files or add files, and test]

hg add .
hg commit -m "good"
hg push

Я не вижу, чем она отличается отиспользуя SVN?Если команда никогда не подталкивает или не подтягивает к другому участнику, а просто подтягивает и подталкивает к центральному серверу.(если только мы не скажем, что объединение лучше, но объединение - это работа SVN или Git / Hg, зависит только от того, насколько хорошо они это делают, но не зависит от того, является ли это DVCS (распределенная система контроля версий)).Это правда?

Ответы [ 5 ]

7 голосов
/ 02 апреля 2011

Разница лишь в том, что вам не нужно нажимать каждый раз, когда вы делаете коммит.Например, я часто фиксирую несколько групп изменений в течение дня кодирования, а затем нажимаю один раз в конце дня.

5 голосов
/ 02 апреля 2011

Я думаю, что ваше утверждение в целом верно и в то же время может иметь много разных ответов.

DVCS предоставляет вам возможности, которые невозможны с такой моделью центрального хранилища, как svn:

  • Когда сервер отключается, пользователи по-прежнему имеют всю историю и могут работать так, как будто ничего не произошло.
  • члены команды могут делиться изменениями / ветвями между собой, не проходя через центральный сервер.
  • Вы можете предоставить подмножество своего репозитория различным группам (скажем, у вас есть последняя и самая лучшая функция, которую вы не хотите предоставлять внешним подрядчикам, которым все еще требуется доступ к репозиторию 'a' с тем же базовым кодом.
  • Пользователь может зафиксировать свои изменения в своем локальном репозитории и сохранять его локальным до тех пор, пока он не будет удовлетворен этим (и, возможно, может переделать историю, чтобы сделать ее более чистой перед нажатием)
  • В целом, тот факт, что у вас есть весь репозиторий локально, делает некоторые операции более эффективными, особенно при просмотре журнала, сравнении файлов в истории ... и т. Д.

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

5 голосов
/ 02 апреля 2011

В Subversion каждый человек имеет только одну ревизию репозитория на своем локальном компьютере в данный момент времени, он не может просматривать историю ревизий или откат к предыдущей ревизии без подключения к центральному репозиторию.С Git и Mercurial у каждого пользователя есть полная копия репозитория, и поэтому он может выполнять все вышеперечисленное локально, без необходимости подключения к центральному репозиторию.локально сделанные коммиты и выборки коммитов еще не в локальном репозитории.Subversion не может функционировать вообще без подключения к центральному хранилищу.

2 голосов
/ 02 апреля 2011

Да, вы можете использовать DVCS точно так же, как и в централизованном режиме, и в большинстве случаев вы получаете только скорость, но для полного использования преимуществ DVCS необходимо изменить свои взгляды на управление версиями.

Хороший вопрос, который нужно задать: «Если бы у меня было столько веток, сколько я хотел, фиксировал так часто, как хотел, и делился этими ветками и коммитами только с тем, кому я хочу, что бы я с ним делал?»

В качестве примера "столько веток, сколько вы хотите", у меня сейчас около 5 веток только для меня. Одним из них является основная ветвь, которую я использую для слияний, чтобы поделиться с коллегами. Один для задачи, над которой я сейчас работаю. Один из них - для ранее выполненного задания, которое я жду, чтобы коллеги рассмотрели его. Два предназначены для более долгосрочных задач, которые я начал, но пришлось отложить из-за приоритетов графика и возобновит работу после следующего выпуска.

В качестве примера преимуществ «коммитить так часто, как вы хотите», коллега сегодня внес несколько небольших изменений в инструмент статического анализа, сделав около 15 локальных коммитов, из которых только один будет выполнен с помощью CVCS. Он случайно ввел серьезную ошибку, которую не обнаружил, пока не сделал, но с помощью git bisect смог быстро сузить ее.

В качестве примера того, «кого именно я хочу», рассмотрим, как два разработчика работают над функцией вместе. Они должны часто делиться, но часто то, что они делят, нарушает основную сборку. С помощью DVCS они могут извлекать данные только друг от друга, не делясь с кем-либо, а затем регистрировать полностью работающую функцию в одно связное нажатие. Другим примером является долгосрочное задание, которое мне пришлось отложить. Если мой босс решит передать эту задачу кому-то еще, кто освободился, я могу легко передать ему свою частично завершенную работу со всей ее историей.

1 голос
/ 02 апреля 2011

Если ваш коллега меняет один файл и фиксирует изменение, то вы изменяете другой файл, не зная о коммите вашего коллеги, SVN разрешит ваш коммит, а Hg и git - нет.Это сделано специально, потому что hg и git отслеживают состояние всего вашего хранилища, тогда как SVN отслеживает изменения в отдельных файлах и папках.

...