Что SVN делает лучше, чем Git? [закрыто]


293

Нет сомнений в том, что большинство дискуссий по поводу инструментов программиста переходит либо к личному выбору (пользователем), либо к акценту на дизайне , то есть оптимизации дизайна в соответствии с конкретными вариантами использования (создателем инструмента). Текстовые редакторы, вероятно, наиболее известный пример - кодировщик , который работает на Windows , на работе и кодов в Haskell на Mac дома, значения кросс-платформенный и интеграции компилятора и поэтому выбирает Emacs более TextMate , и т.д.

Менее распространено, что недавно представленная технология действительно, явно превосходит существующие варианты.

Действительно ли это так в случае систем контроля версий (VCS), в частности, централизованных VCS ( CVS и SVN ) по сравнению с распределенными VCS ( Git и Mercurial )?

Я использовал SVN около пяти лет, а SVN в настоящее время используется там, где я работаю. Чуть менее трех лет назад я перешел на Git (и GitHub) для всех своих личных проектов.

Я могу вспомнить ряд преимуществ Git перед Subversion (и которые по большей части абстрагируются от преимуществ распределенных по централизованным VCS), но я не могу придумать одного противоположного примера - какой-то задачи (которая актуальна и возникает у программистов обычно). рабочий процесс), что Subversion делает лучше, чем Git.

Из этого я сделал единственный вывод: у меня нет никаких данных - не то, что Git лучше и т. Д.

Я предполагаю, что такие контрпримеры существуют, отсюда и этот вопрос.


3
@jokoon: Эффективно с точки зрения чего? Конечно, не скорость, так как даже быстрый Ethernet медленный по сравнению с локальными операциями.
Маартин


4
Я всегда думал, что Git был высоко переоценен. Это причуда, и программисты не невосприимчивы к причудам - ​​несмотря на многочисленные оппозиции этой мысли. Как и все в этом мире, все хотят новую блестящую игрушку (Git). Git может быть хорошим - или даже отличным для некоторых людей - но он никогда не был лучше, чем SVN, если думать объективно.
куплено777

3
Я думал, что SVN все еще хорош в использовании, кривая обучения хороша тогда GIT.
Чеунг

5
Этот вопрос был недавно отложен как основанный на мнении. Эта классификация неверна; обратите внимание, что вопрос был открыт долгое время; что есть много вопросов о достоинствах DVCS, и что вопрос не в том , лучше ли это (мнение), а в том, что лучше. Различия не в мнениях, а в том, является ли продукт в целом - это сложно (но не в этом вопрос).
Имон Нербонн

Ответы:


207

Subversion - это центральное хранилище

В то время как многие люди хотят иметь распределенные репозитории для очевидных преимуществ скорости и нескольких копий, бывают ситуации, когда центральный репозиторий более желателен. Например, если у вас есть какой-то критический фрагмент кода, к которому вы не хотите, чтобы кто-то имел доступ, вы, вероятно, не захотите помещать его в Git. Многие корпорации хотят сохранить свой код централизованным, и (я полагаю) все (серьезные) правительственные проекты находятся в центральных хранилищах.

Subversion - это общепринятая мудрость

Это означает, что многие люди (особенно менеджеры и руководители) имеют обычный способ нумерации версий и видят развитие как «единую линию» с течением времени, жестко запрограммированную в их мозгу. Без обид, но либеральность Git нелегко проглотить. Первая глава любой книги по Git говорит вам, чтобы вычеркнуть из головы все обычные идеалы и начать все заново.

Subversion делает это одним способом, и ничем иным

SVN - это система контроля версий. У него есть один способ сделать свою работу, и все делают это одинаково. Период. Это позволяет легко переходить в / из SVN из / в другие централизованные VCS. Git даже не чистый VCS - это файловая система, имеет много топологий для настройки репозиториев в различных ситуациях - и не существует никакого стандарта. Это затрудняет выбор.

Другие преимущества:

  • SVN поддерживает пустые каталоги
  • SVN имеет лучшую поддержку Windows
  • SVN может проверить / клонировать поддерево
  • SVN поддерживает эксклюзивный контроль доступа, svn lockкоторый полезен для трудно объединяемых файлов
  • SVN легче поддерживает двоичные и большие файлы (и не требует копирования старых версий везде).
  • Добавление коммита включает в себя значительно меньше шагов, так как нет никаких пул-пуш, и ваши локальные изменения всегда неявно перебазируются svn update.

55
«Subversion делает это одним способом», - я тоже так думал, пока не начал свою нынешнюю работу. В моей нынешней работе мой начальник, который утверждает, что у него нет проблем с доверием, настроил сервер для блокировки. В нашей системе не происходит слияния. Файлы заблокированы в хранилище, и никто другой не может записать их без блокировки. Контроль сверху вниз для тех, чьи конституции требуют этого, определенно является чем-то, что SVN делает лучше, чем git.
Дэн Рэй

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

94
Почему нельзя использовать git централизованно? Просто имейте один центральный репозиторий, и ваши разработчики могут клонировать, извлекать и выдвигать, как они извлекают, обновляют и фиксируют.
Дэвид Торнли

29
@PaulTomblin - в зависимости от рабочего процесса, Git может обеспечить лучшее резервное копирование. Например, мы используем частные репозитории github, и я часто помещаю свой код в функциональные ветки. Если мои коллеги это делают git fetch origin, у каждого из них есть резервная копия моего кода вместе с любой резервной копией, которую предоставляет сам Github. (Мы регулярно обрезаем объединенные ветви как локально, так и на Github.)
Натан Лонг,

52
Похоже, вы подразумеваете, что центральный является более безопасным для крупных компаний или правительственной работы. Это просто неправда. Если у вас есть копия кода на вашем компьютере, у вас есть копия кода. Неважно, пришел ли он с центрального сервера или из центральной файловой системы, содержащей хранилище DVCS.
Джон Фишер

131

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

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


11
Работа с поддеревьями - ИМХО, единственное, что SVN имеет над GIT. Точка взята, пустые каталоги хороши, но также не нужны (и могут быть обойдены). Если бы подмодули git и поддерево git были менее запутанными, ничто не могло бы помешать многим людям перейти на GIT. Другие преимущества, о которых упоминали некоторые люди, сводятся к менталитету (разработчика). Например, если вам нужно сверху вниз, это нормально. У меня не будет никакой работы для вас, хотя.
до

3
Забавно, что это единственное, о чем можно спорить в пользу SVN (и другого централизованного управления версиями)
dukeofgaming,

1
Почему это смешно? - Новые системы учатся у старых систем. В RCS есть даже преимущество по сравнению с git: файлы истории могут быть легко отредактированы вручную, и вы можете иметь ветки для каждого файла. Но эволюция подразумевает, что функции теряются ...
Иоганнес

3
Я слышал об игровой компании, которая использует SVN поверх GIT именно по этой причине - когда вы говорите о хранилище размером в несколько ГБ, это внезапно становится важным!
Джеймс

18
Начиная с git версии 1.8.0, теперь вы можете использовать git subtreeкоманду для достижения именно этого. Последнее преимущество subversion уносит пыль :) Подробности здесь: github.com/gitster/git/blob/… Примечание. Несмотря на то, что это ссылка на проект github, git-subtree теперь является частью основного дистрибутива git.
Карл

51

Я могу думать о трех. Во-первых, это немного проще, особенно для не разработчиков. Концептуально это намного проще, чем варианты DCVS . Во-вторых, зрелость, особенно TortoiseSVN на Windows. TortoiseHg быстро догоняет. В-третьих, природа зверя - просто образ файловой системы, в которой вы можете проверять вещи на любом уровне дерева - может оказаться весьма полезной в некоторых сценариях - например, управление версиями множества совершенно разных файлов конфигурации в десятках серверов без десятков репозиториев.

Это не значит, что мы не переносим всю разработку на Mercurial.


25
Быть легким в ловушке - важное преимущество, так как это повышает вероятность его использования. SVN, безусловно, намного лучше, чем отсутствие контроля версий, и если кто-то упрямо относится к старым способам, то, возможно, SVN - лучший выбор для них.
Джоккинг

12
@jhocking: я не люблю SVN, но если кто-то скажет мне: «Мне не нравятся эти новые DVCS, так что я останусь с CVS», то я определенно рекомендую его: это легкий путь по крайней мере частично вменяемый VCS ;-)
Йоахим Зауэр

4
@jhocking Новые способы не всегда являются лучшими для любых обстоятельств. Это напоминает старую историю о том, что НАСА тратит миллионы долларов на разработку ручки, которая может писать в 0g. Космонавты с другой стороны сделаны из-за карандашей. Иногда старые способы лучше, СЕЙЧАС ПОЛУЧИТЕ МОЙ ЗАКОН!
maple_shaft

25
@maple_shaft, а иногда и нет. snopes.com/business/genius/spacepen.asp
Питер Тейлор

3
Легко понять, что это очень субъективно, и в значительной степени основано на том, как вы пытаетесь вписать новые знания в то, что вы уже знаете. Это также имеет большое значение, каков ваш источник обучения. Если вы идете по страницам руководства, удачи. Если вас обучает хороший учитель, который уже ухмыляется, то вы это сделали. Я нашел, что git имеет огромный смысл после просмотра нескольких хороших видео на YouTube. Если вы получаете понимание от кого-то, кто уже разобрал его до простого ядра, тогда все легче понять.
WarrenT

32
  • Репозитории SVN более управляемы с точки зрения менеджера и администратора ( ACL + методы аутентификации + hotcopy + зеркала + дампы)
  • SVN * - крючки проще в реализации и поддержке
  • svn:external имеет большую мощность и гибкость, чем подмодули
  • Деревья репозитория на основе файловой системы проще в использовании, чем монолитные репозитории с логическим разделением
  • У SVN больше разных клиентских инструментов
  • У SVN есть сторонние используемые веб-интерфейсы, намного лучше, чем у Git
  • SVN не ломает твой мозг

23
Не ломает твой мозг? Хочешь научить меня, как легко объединять ветки с конфликтами в SVN?
WarrenT

4
«Лучшие» инструменты / внешние интерфейсы, это движущаяся цель. Инструменты улучшаются с обеих сторон. Никто из нас не знает, какие инструменты будут доступны через несколько лет. Эта оценка, сделанная 10 месяцев назад, может легко измениться со временем и может устареть сейчас. Я бы предпочел видеть содержательные ответы.
WarrenT

6
Дерево конфликтов? Проверьте. Да или нет для всех вариантов? Нет. Свн предназначен для бесить. Очистить рабочую копию команды? Нет. Невозможно очистить неверсионные файлы.
Уоррен П

1
Удаление всего и повторная проверка очистят неверсионные файлы.
jgmjgm

Мне нравится твоя последняя идея, Гит сломал мне мозг: '(
Лука

24

Я написал это как комментарий к чьему-либо ответу, но я думаю, что он заслуживает того, чтобы быть ответом сам по себе.

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

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


Центральность - это миф, а не факт. Никто не может помешать мне изменить что-либо. С помощью cvcs они могут помешать мне что-то централизованно изменить. То же самое в DVC. Слово commit в cvcs объединяет commit и push.
Уоррен П

@JonathanHenson: это определенно не единственная причина, по которой Торвальдс ненавидит SVN. SVN может быть централизованным и лучше CVS, но это вряд ли делает его хорошим программным обеспечением. Торвальдс ненавидит CVS / SVN не потому, что они централизованы, а потому, что он считает, что это патетически плохое программное обеспечение. Прав ли он или нет, решать вам, но вы видели огромный успех как Linux (и Android), работающего на миллиардах устройств, так и Git, который в значительной степени захватывает мир штурмом, я Я дважды подумал, прежде чем с ним не согласиться. Лекция, которую Торвальдс дал в Google на Git много лет назад, удивительна.
Седрик Мартин

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

22

Мои причины:

  • зрелость - и сервер, и инструменты (например, TortoiseSVN)
  • простота - меньше шагов, коммит - это коммит. DVCS, такие как Git и Mercurial, включают коммит, затем push.
  • двоичная обработка - SVN обрабатывает двоичные исполняемые файлы и изображения лучше, чем Git / Hg. Особенно полезно с проектами .NET, так как мне нравится проверять инструменты, связанные со сборкой, в системе контроля версий.
  • нумерация - SVN имеет удобочитаемую схему нумерации коммитов, в которой используются только цифры - проще отслеживать номера ревизий. Git и Hg делают это совершенно по-разному.

1
«Схема нумерации коммитов» возможна только при наличии канонических транков. В противном случае какая из них получает большую нумерацию?

1
+1 количество в свн. Этот номер уникален. Существуют инструменты для использования этого числа как части номера приложения app xv.yy.zz.12882, где 12882 - номер версии svn. Если есть производственная проблема, вы можете спросить vor номер версии, и у вас есть точная svn-ревизия, с которой было собрано программное обеспечение
k3b

22

Я ценю, что вы ищете хорошую информацию, но этот вопрос просто предлагает: «Я думаю, что Git - это большая победа, и svn teh suxorz!» ответы.

Я попробовал и лично нашел Git слишком много для моей маленькой команды. Казалось, что это было бы здорово для большой распределенной команды или группы команд, которые географически разбросаны. Я прекрасно понимаю преимущества Git, но контроль над источниками, по моему мнению, не заставляет меня спать ночью.

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

Я хочу подчеркнуть, что если вы небольшая команда, работающая над средним или небольшим проектом, и вы уже знакомы с SVN, используйте ее. Это, безусловно, лучше, чем CVS или (дрожит) SourceSafe , и мне не понадобилось больше пяти минут, чтобы настроить хранилище. Git иногда может быть излишним.


3
В самом деле? Тогда я бы посоветовал вам взглянуть на ископаемое .
Спенсер Рэтбун

7
давайте не будем бить тревогу при малейшей возможности спора. Важные темы часто являются наиболее спорными и наиболее часто вызывают решительные взгляды. Таким образом, «этот тип вопроса» важен, и возможность ответа за его пределами не является вероятной, чтобы не публиковать его. Я предполагаю, что пользователи на этом Сайте - взрослые. Более того, то, как мой Q был сформулирован, был если не нейтральным, то почтительным к людям из Subversion - ответные ответы на мой Q должны будут перечислять преимущества subversion по сравнению с git, а не наоборот.
Дуг

@SpencerRathbun, спасибо! Мне придется взглянуть на это. Я не столько люблю svn, сколько испытываю отвращение к мерзавцам.
maple_shaft

10
@Spencer - Наоборот, как пользователь обоих gitи hg, я бы предложил ртутный для тех , кто думает , что gitэто слишком много. TortoiseHG был бы очень знаком любому, кто привык к TortoiseSVN (он даже использует одни и те же оверлейные программы Explorer в Windows). Это, конечно, намного проще, чем VSS, и я был бы удивлен, если бы потребовалось более нескольких секунд, чтобы настроить репозиторий hg, зафиксировать исходное состояние и клонировать его на общий диск.
Марк Бут

@MarkBooth Как указано в исходном вопросе, я думаю, что это вопрос желаний и потребностей. На моем нынешнем рабочем месте репо не было, пока я туда не попал. Мне нужно было что-то, что содержало бы все или большинство инструментов проекта, которые я хотел объединить, было простым в использовании, сохраняло все вместо дельт и работало для групп из 1 или 2 человек на нескольких машинах.
Спенсер Рэтбун

20

Это все относительно, и, как сказал maple_shaft, если кто-то работает на вас, не меняйте!

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


2
Как SVN справляется с ними лучше? Git считает каждый файл BLOB.
WarrenT

4
@WarrenT из-за рабочих процессов, с git вы много разветвляетесь и объединяете (или зачем его использовать) и просто не можете реально объединить двоичные файлы. Следовательно, вы часто помещаете свойство "needs lock" в двоичные файлы в SVN.
gbjbaanb

1
Некоторые двоичные файлы могут (теоретически) быть объединены, например, документ ODT.
Donal Fellows

18

Удобство использования. Это на самом деле не заслуга Subversion, а скорее TortoiseSVN . TortoiseGit существует, но ему еще предстоит пройти долгий путь, чтобы соответствовать TortoiseSVN.

Если бы вы спросили, что Git делает лучше, чем SVN, я бы ответил GitHub . Забавно, как сторонние инструменты имеют такое огромное значение.


1
Assembla (для любого поддерживаемого SCM - SVN в списке) лучше, чем github, я думаю
Lazy Badger

есть также smartgit, GitXL и т. д., программы, которые делают использование git более простым
wirrbel

@LazyBadger, никогда не слышал об этом.
Пейсер

16

Когда вам не нужно разветвляться и объединяться , SVN (с TortoiseSVN в Windows) очень прост для понимания и использования. Git слишком сложен для простых случаев, поскольку он пытается облегчить ветвление / слияние.

(Многим небольшим проектам никогда не придется ветвиться, если они хорошо управляются. Git нацелен на сложные случаи; поэтому большая часть документации Git предполагает, что вам нужно выполнять сложные операции, такие как ветвление и слияние.)


8
Использование gitветвления и слияния не являются сложными операциями. Я даже использую ветки в проекте с одним человеком, даже если нет требований к нескольким версиям. Продолжать работу, которую вы не можете продолжать в данный момент, в ветке, когда вы обнаруживаете, что пробовать другое решение может быть намного лучше ... Однако я согласен, что gitэто немного сложнее для изучения.
Маартин

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

1
Почему люди не считают, что Mercurial проще, чем SVN или GIT?
Уоррен П

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

14

Ну, мой дедушка мог использовать SVN на своем компьютере с Windows XP, но у него были проблемы с использованием Git. Может быть, это скорее достижение TortoiseSVN по сравнению с TortoiseGit , но я думаю, что это скорее связано с тем фактом, что Git по своей сути более мощный и, следовательно, более сложный, и было бы бессмысленно сводить его к тому же уровню.

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

И это люди, которые просто ожидают, что их инструменты будут работать (я тоже, но у меня есть реальный шанс заставить их работать в случае неудачи) и быть интуитивно понятным. Помимо того факта, что было бы достаточно усилий, чтобы заставить их ладить с DVCS , мало что можно было получить. И поскольку в команде было всего два программиста, для нас имело смысл просто придерживаться SVN.


git - более «философский» подход к управлению версиями. вы начинаете думать о семантике коммитов, веток и т. д. Поэтому людям, которые хотят использовать VCS в качестве инструмента «резервного копирования» и распространения, труднее, но git не намного сложнее
wirrbel

11

На работе я не смог переключить разработчиков с SVN на какой-либо DVCS по двум причинам:

  • Частичные проверки (например, только три папки разной глубины в дереве проекта)
  • Блокировка файлов (отчеты в двоичном формате)

8
  • Чувство безопасности при выполнении 'svn commit'. Поскольку коммиты отправляются на сервер, я не могу ничего сделать, чтобы стереть мои изменения после их фиксации. В git коммиты локальные, так что пока я не нажму, блуждающий 'rm -rf' и все будет кончено.
  • Коммиты проходят проверку подлинности. По умолчанию в git я могу сказать, что я делаю это как любой.
  • Меньше команд, чтобы учиться для повседневного использования. 'svn checkout', 'svn up' и 'svn commit' помогут вам довольно далеко.
  • Общие проверки работают намного приятнее. Когда вы переходите к коммиту, он запрашивает ваше имя пользователя / пароль, вам не нужно забывать передавать определенные аргументы командной строки. Иногда на работе у нас есть общая машина с общей проверкой SVN какого-то проекта. Кто-то может сказать: «Боб, ты можешь посмотреть на это на этой машине», и он может, и он может зафиксировать свои изменения как пользователь без каких-либо ошибок.
  • Расположение репозитория. Вы можете иметь общий проект и подпроекты и выбирать, что проверять, когда.
  • Номера ревизий увеличивают целые числа.
  • Предназначен для рабочего процесса центрального хранилища.

+1 за вопрос аутентификации. Коммиты Git должны быть подписаны, а подписи должны быть проверены, что сложно.
Кристиан

6

Другие люди опубликовали довольно хорошие ответы, но как насчет разрешений? Используя Subversion через SSH, вы можете создать отдельную учетную запись на вашем сервере для SVN. Разным разработчикам может быть предоставлен разный доступ к разным частям репозитория. Может ли GIT сделать это? Я думаю, что есть гитолит, но он просто не кажется мне гибким или надежным, и я не знаю никого, кто на самом деле его использует.


2
Другие затронули это, упомянув «сверху вниз управленческий контроль». Это ключевой элемент для моей среды - у нас есть определенные области наших репозиториев, которые необходимо заблокировать только для чтения или даже не читать для некоторых групп пользователей. Нам также нужно иметь одно местоположение, на которое мы можем указать и сказать: «Это официальная основная копия, если ваша копия не соответствует тому, что здесь, она не является официальной».
Alroc

1
Благословенный репозиторий руководителя проекта и лейтенантов дает контроль над тем, кто может совершать. Git-репо, опубликованное на сервере с поддержкой http-auth (используя те же модули apache, что и svn), выполняет аутентификацию и сообщает, кто может что-либо клонировать / оформить. Конечно, это не так детально, как svn для каждого каталога, но для меня это больше похоже на микроуправление, чем на фактическую потребность.
Юбер Карио

@HubertKario - это поднимает вопрос: «Должны ли ваши лучшие программисты тратить свое время на проверку кода других людей?» На самом деле, я так заинтересован в ответе на этот вопрос, что разместил его здесь: programmers.stackexchange.com/questions/181817/…
GlenPeterson

5

Скорость. Иногда требуется 10 или 15 минут, чтобы клонировать большой Git-репозиторий, в то время как аналогичный по размеру Subversion-репозиторий занимает пару минут для проверки.


6
Но оформление заказа / клонирование - это редкая операция. В большинстве случаев git работает быстрее, чем subversion.
выстр

5
git clone --depth=1твой друг, если тебе нет дела до истории
Хуберт Карио

4

Я публикую это как ответ, а не как комментарий.

Я признаю, что DVCS сейчас в тренде, но я постараюсь объяснить, почему.

DVCS лучше, потому что, как говорили многие люди, «так мы и должны были работать с самого начала». Это правда, вы можете делать с DVCS то, что вы использовали с SVN, таким образом, что делает SVN устаревшим.

Однако не каждый программный проект так хорош, как он получает:

  • Долгосрочный проект получил большую выгоду от DVCS, потому что он использует меньше накладных расходов, позволяет значительно улучшить управление (ветвление и т. Д.) И в значительной степени поддерживается такими хостами, как google code и github.

  • Эти проекты не единственные, существуют другие виды проектов, которые разрабатываются в компаниях без какой-либо помощи со стороны внешнего мира или Интернета: все делается внутренне, и часто в краткосрочной перспективе. Хороший пример: видеоигра. Код развивается быстро.

В последнем случае разработчикам не нужны разветвления или сложные функции, которые может предложить DVCS, они просто хотят делиться исходным кодом и ресурсами. Код, который они делают, вряд ли будет использоваться повторно, потому что существует крайний срок. Они полагаются на SVN, а не на DVCS по нескольким причинам:

  • У разработчиков есть машины, принадлежащие компании, и это может быстро измениться. Настройка репо - это потеря времени.
  • Если у этих парней нет собственной машины, они с меньшей вероятностью будут работать с одним и тем же исходным кодом / частью проекта. Плюс один для централизованных данных.
  • Скорость сети и большие деньги позволяют использовать централизованный сервер, который имеет дело со всем SVN, это плохая практика, но резервные копии сделаны и т. д.
  • SVN проще в использовании, даже если это неправильный способ: синхронизация файлов на одноранговых узлах без избыточности - непростая проблема, и «сделать все правильно» просто невозможно вовремя, если вы всегда хотите, чтобы она была идеальной.

Подумайте о машине игровой индустрии и о том, как SVN экономит время; люди гораздо больше рассказывают об этих проектах, потому что игры посвящены повторяющемуся программированию и адаптивному коду: ничего сложного в коде нет, но это нужно делать правильно, как можно скорее. Программисты нанимаются, они кодируют свою часть, компилируют ее, немного тестируют, фиксируют, делают, тестировщики игр разбираются со всем остальным.

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


Можете ли вы объяснить пример игровой индустрии?
Джонни

3

Subversion и Git поощряют особые (и очень разные) подходы к развитию и сотрудничеству. Некоторые организации получат больше пользы от Git, а другие - больше от Subversion, в зависимости от их организации и культуры.

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

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

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

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

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

Наконец, я также обнаружил, что совместное использование функциональных возможностей с использованием «горячей» разработки библиотек под Svn (с CI и подходом, основанным на тестировании) обеспечивает скорость скоординированной разработки, которую трудно достичь с помощью более распределенной и слабо связанной команды.


2

Ниже приведены две причины, по которым я до сих пор остаюсь в SVN.

  1. Кривая обучения. SVN проще, чем Git, даже настройки (сервер или клиент), удобство использования и команды.
  2. Лучшие серверные пакеты, такие как Subversion Edge , VisualSVN , uberSVN и т. Д.

1
+1 за № 1. Сравните диаграммы SVN против GIT здесь steveko.wordpress.com/2012/02/24/10-things-i-hate-about-git
s_t_e_v_e

1

В настоящее время в управлении версиями есть две основные тенденции; Распределение и интеграция .

Git хорош в децентрализации.

SVN имеет множество встроенных инструментов, которые интегрируются с ним. Обычно ваш сервер SVN настраивается таким образом, чтобы при проверке исправления вы упоминали номер ошибки в комментарии о проверке, и он автоматически переводил его в состояние «в тестировании» и оповещал назначенного тестировщика о необходимости посмотри на это. Затем вы можете пометить релиз и получить список всех ошибок, исправленных в этом выпуске.

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


-1

В Subversion вы можете редактировать сообщения журнала (также называемые «сообщениями коммита») после того, как фиксация сделана и нажата. Для большинства практических целей это невозможно сделать в децентрализованных системах, включая git. Конечно, в git вы можете выполнить «git commit --amend», но это не поможет вам после того, как ваш коммит был перенесен в другое место. В SVN, когда вы редактируете сообщение журнала, вы делаете это в центральном репозитории, который все разделяют, так что каждый получит редактирование без изменения идентификатора ревизии.

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

Между прочим, не должно быть никакой опасности потерять информацию. Перехватчики pre-revprop-change и post-revprop-change могут сохранить историю старых сообщений, если вы действительно обеспокоены этим, или отправлять электронные письма с разницей сообщений журнала (на самом деле это более распространено), так что есть контрольный журнал.


1
это также просто сделать в git; например, git --amend; Другой способ сделать это - через git reset --soft HEAD ^, который просто возвращается назад, но не изменяет индекс, и поэтому вы можете редактировать / переписывать сообщение коммита.
Дуг

Привет, Даг. Да, вы можете сделать это для своего локального репозитория, но я говорю о том, как только вы отправили изменения в другое место - «git commit --amend» тогда вам мало поможет. В SVN вы можете редактировать сообщение журнала на центральном сервере именно потому, что существует концепция центрального сервера. Вот что я имел в виду под «невозможным дизайном в децентрализованных системах». Я отредактирую свой ответ, чтобы сделать это более понятным.
Карл Фогель

1
Я люблю , как «вы можете возиться с историей» якобы является особенность . Я бы посчитал это ошибкой, если бы она не была преднамеренной.
Цао
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.