Что мне следует использовать - SVN или Git?

Я начинаю новый распределенный проект. Что мне следует использовать - SVN или Git и почему?

Да, git работает на Mac. Если вы используете macports для его установки, он даже установит интерфейс Mac для фиксации и просмотра интерфейсов.

Seth Johnson 31.03.2010 02:36

возможный дубликат stackoverflow.com/questions/871/…

user177800 31.03.2010 02:37

@Andre - поскольку вы можете использовать MonoDevelop - я переключаюсь с Vault на SVN, чтобы я мог разрабатывать программное обеспечение .NET на своем Mac или ПК. Для Vault не было клиента, но был для SVN :-)

schmoopy 01.09.2011 21:41

см. также richappsconsulting.com/blog/blog-detail/…

naught101 13.03.2012 14:47

Github / bitbucket + sourcetree = рай! - sourcetreeapp.com

thecodeassassin 09.05.2012 14:02

В 2013 году я перешел с SVN на TFS на Git, и сейчас доступно множество клиентов Git. Window больше не является вторым классом в мире Git.

Jerry Liang 18.03.2013 03:50

SourceTree отлично подходит для Windows или Mac и может использоваться для любого репозитория Git.

DarVar 18.06.2013 17:17

ошибка: файл <file> составляет 123,23 МБ; это превышает ограничение на размер файла GitHub в 100 МБ !!!!

Fuzzy Analysis 27.12.2013 08:53

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

Philippe 03.02.2014 21:09

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

Udo 07.08.2015 20:48
Subversion для двоичных файлов (e.g. powerpoint, excels, word files ) , Git для текстовых файлов (e.g. Java files )
kenju 24.08.2015 07:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
323
11
276 089
21

Ответы 21

Я бы выбрал SVN, поскольку он более широко распространен и известен.

Думаю, для пользователя Linux лучше подойдет Git.

Однако это быстро меняется. SVN теряет долю рынка, в то время как GIT получает прибыль: например: wikivs.com/wiki/Git_vs_Subversion#Popularity или programmers.stackexchange.com/questions/136079/…

Zelphir Kaltstahl 30.10.2015 16:06

@Zelphir: Я бы не назвал 7 лет быстро, но да, GIT увеличивает долю рынка и особенно лучше подходит для слияния файлов.

Burkhard 31.10.2015 22:13

Git пока не поддерживается в Windows. Он оптимизирован для систем Posix. Однако запуск Cygwin или MinGW позволяет успешно запустить Git.

В настоящее время я предпочитаю Git, а не SVN, но требуется время, чтобы преодолеть порог, если вы пришли из CVS и SVN.

Определите «изначально». msysgit работает нормально

Milan Babuškov 06.10.2008 11:26

Определенно svn, поскольку Windows - в лучшем случае - гражданин второго сорта в мире git (подробнее см. http://en.wikipedia.org/wiki/Git_(software)#Portability).

ОБНОВЛЕНИЕ: извините за неработающую ссылку, но я отказался от попыток заставить SO работать с URI, содержащими круглые скобки. [ссылка исправлена. -ed]

К вашему сведению: заключите URL-адрес в угловые скобки или замените круглые скобки на% 28 и% 29.

PhiLho 02.10.2008 14:35

Будет ли работать кодировка URL для синтаксиса [] ()?

Hank Gay 02.10.2008 15:44

Вместо «Определенно svn» я бы сказал «ЕСЛИ вы используете Windows svn», если пользователь не использует его, он не заботится о его поддержке.

WhyNotHugo 17.09.2010 19:40

@Hugo вопрос указывает, что он будет разработан с использованием Visual Studio, которая (была?) Только для Windows, так что им, вероятно, не все равно.

Hank Gay 17.09.2010 22:46

Это неправильный FUD. Git отлично работает в Windows. И SVN везде довольно плохой.

Charlie Flowers 06.02.2011 08:21

Для всех, кто голосовал против меня, пожалуйста, вернитесь и посмотрите комментарии разработчиков примерно за 2008 год: совершенно очевидно, что Линуса и его банды не заботила поддержка Windows. Это нормально: я тоже не хочу этого делать, и мое программное обеспечение не так сложно, как VCS, который ожидает POSIX-подобного поведения файловой системы. Однако, если вы посмотрите на контекст, мне кажется несправедливым характеризовать мое заявление как FUD.

Hank Gay 17.03.2011 15:25

Может быть, в 2008 году git плохо работал с Windows, но я использую msysgit с 2009 года, и он работает безупречно. Это включает в себя gitk, автономный настольный эквивалент GitHub.

Dan Dascalescu 01.07.2011 11:49

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

Тем не менее, я ничего не знаю об интеграции Visual Studio и различных систем SCM. Я полагаю, что интеграция с SVN станет заметно лучше.

Главное, что Git - это распределенная VCS, а Subversion - централизованная. Распределенные VCS немного сложнее для понимания, но имеют много преимуществ. Если вам не нужны эти преимущества, Subversion может быть лучшим выбором.

Другой вопрос - инструментальная поддержка. Какие VCS лучше поддерживаются инструментами, которые вы планируете использовать?

Обновлено: Три года назад я ответил так:

And Git works on Windows at the moment only via Cygwin or MSYS. Subversion supported Windows from the beginning. As the git-solutions for windows may work for you, there may be problems, as the most developers of Git work with Linux and didn't have portability in the mind from the beginning. At the moment I would prefer Subversion for development under Windows. In a few years this may be irrelevant.

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

Я оптимистично настроен в отношении того, что горизонт нерелевантности будет намного короче, чем несколько лет.

Greg Hewgill 02.10.2008 13:57

Да, возможно, всего год. Git имеет динамичное сообщество разработчиков. Но есть и подрывная деятельность. Через год или два вам придется еще раз взглянуть на оба, чтобы ответить на этот вопрос.

Mnementh 02.10.2008 15:28

Сейчас год или два спустя. Как это выглядит? :)

Merlyn Morgan-Graham 09.11.2011 15:40

Прошло более трех лет. :-) Обновляю свой ответ.

Mnementh 09.11.2011 15:48

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

Edwin Buck 30.03.2012 02:06

@EdwinBuck, признаюсь, я не понимаю. Я бы сказал, что не может быть (значимо) двух версий одного и того же программного обеспечения, так как же может иметь смысл иметь два центральных репозитория? Даже если вы хотите протестировать распределенным образом, не имеет ли смысла тестировать одну и ту же версию программного обеспечения?

hibbelig 15.11.2012 01:03

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

Edwin Buck 15.11.2012 02:14

@EdwinBuck Я думаю, вы знаете, что проблема с распределенными репозиториями заключается в том, что они / не / равны :-) (Обычно у них будут неопубликованные коммиты.) Итак, команда говорит, что они создают только версию, которая находится в центральном репо, поэтому что они могут быть уверены, что даже завтра они смогут воссоздать сборку. Если бы я строил на своем ноутбуке, то завтра команда, возможно, не смогла бы воссоздать сборку, потому что у меня могли быть локальные изменения, и я в отпуске.

hibbelig 18.11.2012 03:11

@EdwinBuck Полагаю, мне сложно представить, что может обещать распределенная обработка? Это об ускорении чего-то? Тогда почему у нас не может быть нескольких серверов сборки, которые все используют центральное репо в качестве первого шага? Вы хотите сказать, что это приведет к перегрузке центрального репо? Мне трудно представить это, поскольку я не могу представить, что объем передаваемых данных станет чрезмерно большим. Если серверы сборки будут получать данные из центрального репозитория один раз в неделю, сколько времени это может занять?

hibbelig 18.11.2012 03:16

@hibbelig Именно то, что вы сказали. Все репо не равны. Вы назначаете одну из них «высшей», так что это противоречит обещанию «распределить» по соглашению, а не по коду. Распределенные системы сборки (как я их себе представляю) могут позволить воспроизводимую сборку релизов с любого ноутбука.

Edwin Buck 18.11.2012 07:46

Могу я расширить вопрос и спросить, хорошо ли Git работает на MacOS?

Ответ на комментарии: Спасибо за новости, я очень хотел попробовать. Я установлю его дома на свой Mac.

Да, прекрасно работает. Установил через MacPorts и использую ежедневно.

Greg Hewgill 02.10.2008 13:57

Оно делает. Он отлично работает в любой системе на основе POSIX (Unix, Linux, Solaris, BSD и т. д.). На самом деле проблема в Windows.

Oli 02.10.2008 13:58

и git-gui и gitk, вероятно, работают под OS-X так же, как под Linux и Windows. В отличие от tortoiseSVN, какой AFAIK доступен только для Windows?

David Schmitt 02.10.2008 14:28

@David Schmitt: ну, tortoisesvn.tigris.org называет это «расширением оболочки Windows для Subversion», так что я так думаю, да ;-).

SamB 31.03.2010 02:36

@Robert: каким был ваш опыт работы с git на OS X?

David Schmitt 01.04.2010 10:21

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

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

Между тем у вас есть выбор между TortoiseGit, GitExtensions (и, если вы размещаете свой «центральный» git-репозиторий на github, их собственный клиент - GitHub для Windows).

Если вы хотите выйти из SVN, вы можете немного оценить Базар. Это одна из систем контроля версий следующего поколения, в которой есть этот распределенный элемент. Он не зависит от POSIX, как git, поэтому есть нативные сборки Windows, и его поддерживают несколько мощных брендов с открытым исходным кодом.

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

Можно также взглянуть на Hg (Меркурий)

Joel 31.03.2010 02:24

Собственные сборки, если использование языка сценариев считается родным ... По той же логике Git является родным - ему просто нужна программа (cygwin или msys) для его запуска.

alternative 26.08.2010 03:47

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

We Are All Monica 24.09.2010 23:37

Спустя 2 года у нас теперь есть несколько хороших инструментов для Windows. В настоящее время я использую netbeans с MSysGit. Мне также повезло с TortoiseGit. Думаю, он достаточно хорош, чтобы его можно было использовать в продакшене. Учитывая, насколько сложно управлять простыми конфликтами в Subversion, git - это огромное улучшение.

Keyo 27.10.2010 05:19

Мы активно используем Git в Windows уже давно. Git абсолютно фантастичен в Windows.

Charlie Flowers 06.02.2011 08:18

@Oli Было бы хорошо обновить свой ответ (особенно о клиенте git для Windows) на основе комментариев здесь и вашего опыта. Текущий ответ кажется необъективным сейчас, когда прошло 2-3 года с момента его написания.

amit 16.05.2011 07:27

@Charlie Flowers С таким клиентом?

ptomasroos 15.09.2011 19:24

@Tomas Roos - мы в основном использовали командную строку вместе с gitk (ограниченный графический инструмент, который поставляется с git). Ежедневно вам нужно всего около 5 команд, они простые и мощные. Раздайте всем шпаргалку и позвольте им вызвать эксперта в тех случаях, когда происходит что-то необычное. В течение месяца они смогут справиться и с нестандартными случаями без посторонней помощи.

Charlie Flowers 21.09.2011 18:38

Ваша единственная жалоба, похоже, заключается в том, что у Git нет хорошего графического интерфейса для Windows. Могу ли я понять, что, по вашему мнению, SVN по-прежнему лучше двух.

puk 08.11.2011 14:01

Теперь есть TortoiseGit. Возможно, вы хотите отредактировать свой ответ.

Phonon 25.01.2012 22:06

Технически нет никакого "центрального" репозитория git. Все репо равны. Вы можете отправлять или вытягивать из одного репо в другое, если у вас есть разрешение на соответствующем конце. Конечно, вы можете легко настроить репо для ACT как централизованное репо, но на самом деле оно ничем не отличается от других.

naught101 13.03.2012 14:39

Этот ответ был опубликован давно, поэтому я подумал, что стоит выделить Github для Windows

ED-209 02.01.2013 18:32

Попробуйте SourceTree (теперь доступно и для Windows) - это бесплатно и, на мой взгляд, лучшее! Сайт SourceTree

ofirbt 01.05.2013 15:59

Эй, это 2018 год. 10 лет с момента ответа. Подождите, что ... что такое SVN ??

Sumudu 09.04.2018 17:06

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

Я считаю, что пройдет относительно немного времени, прежде чем Git будет работать так же хорошо в Windows, как и в Unix и Mac OS X (раз уж вы спросили).

Subversion имеет отличные инструменты для Windows, такие как TortoiseSVN для интеграции с проводником и AnkhSVN для интеграции с Visual Studio.

SVN кажется хорошим выбором под Windows, как указывали другие люди.

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

вы пробовали Bzr?

Это довольно хорошо, коннонично (люди, которые делают Ubuntu) сделали это, потому что им не нравилось больше ничего на рынке ...

Тем не менее, поддержка Windows действительно требует некоторой доработки. Не то чтобы я не очень-то с удовольствием использовал его для всего моего недавнего программирования под Windows (чем я занимался немало) или чего-то еще, но все же ...

SamB 31.03.2010 02:41

Почти в 100% случаев с ОС люди «делали [любое программное обеспечение], потому что им не нравилось ничего другого на рынке».

WhyNotHugo 17.09.2010 19:42

@Hugo С открытым исходным кодом, если им понравится что-то еще на рынке, они будут способствовать этому, а не создавать что-то новое.

yingted 13.08.2011 23:14

Это вообще не ответ на вопрос

Albert van der Horst 29.06.2017 14:00

@AlbertvanderHorst Нет, на этот вопрос ответили во времена Дикого Запада в SO, когда никто не знал ничего лучше и предлагал альтернативу. Можно спорить в спешке, похоже, что я также неправильно написал имя Canonical. Мне стыдно!

Omar Kooheji 12.07.2017 18:13

Я никогда не понимал эту концепцию «git плохо работает с Windows»; Я разрабатываю исключительно под Windows и у меня никогда не было проблем с git.

Я определенно рекомендую git вместо subversion; он просто намного более универсален и позволяет «автономную разработку», чего никогда не могло сделать ни одна подрывная деятельность. Он доступен практически на всех мыслимых платформах и имеет больше функций, чем вы, вероятно, когда-либо будете использовать.

У меня, с другой стороны, были некоторые проблемы с git в Windows, он делал действительно странные вещи с моим репо. И я использовал самую последнюю версию в cygwin (примерно месяц назад).

Roman Plášil 13.06.2009 12:32

@Roman: ну, порт Cygwin - это не то же самое, что собственный порт win32. Я ожидаю, что порт Cygwin намного менее хорошо протестирован ...

SamB 31.03.2010 02:32

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

B T 05.06.2011 05:36

@ B T "красный флаг" Я не согласен. Я часто обнаруживаю, что желаю, чтобы был способ что-то сделать, и после небольшого поиска я обнаружил, что есть несколько команд, о которых я не знал, которые делают именно это. Я также использую GIT на своей машине с Windows, и у меня еще не было серьезных проблем.

testing123 04.08.2011 20:17

@ testing123, но тогда они не являются функциями, которые «вы, вероятно, [n] когда-нибудь будете использовать», потому что вы фактически их использовали.

mulllhausen 06.06.2012 10:29

Я не уверен, почему ваш комментарий адресован мне :). Я согласен, и это был смысл моего комментария. Я думаю, вы имели в виду @BT.

testing123 07.06.2012 18:23

Вы должны пойти с DVCS, это как качественный скачок в управлении источниками. Лично я использую Монотонный, и время его разработки бесконечно ускорено. Мы используем его для Windows, Linux и Mac, и он очень стабилен. У меня даже есть buildbot, выполняющий ночные сборки проекта на каждой из платформ.

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

Не совсем отвечаю на ваш вопрос, но если вам нужны преимущества Распределенный контроль версий - похоже, что вы это делаете - и вы используете Windows, я думаю, вам было бы лучше использовать Mercurial, а не Git as Mercurial, у которого гораздо лучшая поддержка Windows. У Mercurial тоже есть порт для Mac.

Об этом есть интересное видео на YouTube. Это от самого Линуса Торвальдса: Goolge Tech Talk: Линус Торвальдс на git

Если ваша команда уже знакома с программным обеспечением для управления версиями и версиями, такими как cvs или svn, то для простого и небольшого проекта (такого, как вы утверждаете), я бы порекомендовал вам придерживаться SVN. Мне очень нравится svn, но для текущего проекта электронной коммерции, который я делаю на django, я решил работать над git (я использую git в svn-режиме, то есть с централизованным репозиторием, на которое я нажимаю и извлекаю from, чтобы сотрудничать хотя бы с одним другим разработчиком). Другой разработчик чувствует себя комфортно с SVN, и хотя опыт других может отличаться, нам обоим очень трудно использовать git для этого небольшого проекта. (Мы оба заядлые пользователи Linux, если это вообще имеет значение.)

Конечно, ваш пробег может отличаться.

Самое смешное: Я размещаю проекты в Subversion Repos, но получаю к ним доступ через команду Git Clone.

Пожалуйста, прочтите Разработка с помощью Git в проекте Google Code

Although Google Code natively speaks Subversion, you can easily use Git during development. Searching for "git svn" suggests this practice is widespread, and we too encourage you to experiment with it.

Использование Git в репозитории Svn дает мне преимущества:

  1. Могу работать распределен на нескольких машины, совершающие и вытягивающие из и им
  2. У меня есть репозиторий svn центральныйbackup/public, чтобы другие могли его проверить
  3. И они могут использовать Git самостоятельно.

Просто примечание: по состоянию на июль 2011 года Google Code изначально поддерживает Git.

Jeremy Salwen 01.01.2012 13:38

2 ключевых преимущества SVN, которые редко упоминаются:

  1. Поддержка больших файлов. В дополнение к коду я использую SVN для управления своим домашним каталогом. SVN - единственная VCS (распределенная или нет), которая не подавляется моими файлами TrueCrypt (пожалуйста, поправьте меня, если есть другая VCS, которая эффективно обрабатывает файлы размером более 500 МБ). Это связано с тем, что сравнения diff передаются в потоковом режиме (это очень важный момент). Rsync неприемлем, потому что он не двусторонний.

  2. Частичный репозиторий (подкаталог) checkout / checkin. Mercurial и bzr не поддерживают это, а поддержка git ограничена. Это плохо для командной среды, но бесценно, если я хочу проверить что-то на другом компьютере из моего домашнего каталога.

Просто мой опыт.

«Пожалуйста, поправьте меня, если есть еще одна VCS, которая эффективно обрабатывает файлы размером более 500 МБ» - конечно же, волей-неволей!

james creasy 23.06.2010 03:49

Perforce = не бесплатно. Кроме того, Perforce доступен не для всех платформ.

WhyNotHugo 17.09.2010 18:48

Почему бы не поместить репозиторий SVN ВНУТРИ контейнеров truecrypt? Вы также можете туннелировать это через ssh и настроить сервер для хранения этого конкретного репо в другом файле truecrypt. Это дает дополнительное преимущество, заключающееся в том, что вы можете производить частичную проверку этого репо.

WhyNotHugo 17.09.2010 18:49

@Hugo, насколько мне известно, клиент Perforce доступен для Windows, Unix, вариантов Linux, Mac, Amiga, BeOS, Cygwin, HPUX, IBM AS / 400, OS / 2, DEC VMS и Novell File Server. Отсутствует ли какая-то соответствующая платформа в списке?

eis 14.02.2012 14:20

Да, OpenBSD (и я знал это по опыту, не нужно было гуглить). Думаю, это не сработает и с maemo, хотя я могу ошибаться (и да, я использую git на maemo).

WhyNotHugo 29.02.2012 08:57

Я бы не делал снимков зашифрованных томов.

earthmeLon 11.07.2013 08:37

Вот копия ответа, который я сделал для несколько повторяющихся вопросов с тех пор были удалены о Git против SVN (сентябрь 2009 г.).

Лучше? Кроме обычной ссылки Почему GitIsBetterThanX, они разные:

one - это центральная система контроля версий, основанная на дешевой копии веток и тегов. другой (Git) - это распределенная система контроля версий, основанная на графике изменений. См. Также Основные концепции VCS.


Эта первая часть вызвала несколько неверно информированных комментариев, в которых утверждалось, что основная цель двух программ (SVN и Git) одинакова, но что они были реализованы совершенно по-разному. Чтобы прояснить принципиальная разница между SVN и Git, позвольте мне перефразировать:

  • SVN - это третья реализация пересмотр контроль: RCS, затем CVS и, наконец, SVN управления каталогами версионных данных. SVN предлагает функции VCS (маркировка и слияние), но его тег - это просто копия каталога (например, ветка, за исключением того, что вы «не должны» касаться чего-либо в каталоге тегов), и его слияние по-прежнему сложно, в настоящее время на основе метаданных. -данные добавлены для запоминания того, что уже было объединено.

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

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

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

Тем не менее, комментарии к этому старому (удаленному) ответу настаивали:

VonC: You are confusing fundamental difference in implementation (the differences are very fundamental, we both clearly agree on this) with difference in purpose.
They are both tools used for the same purpose: this is why many teams who've formerly used SVN have quite successfully been able to dump it in favor of Git.
If they didn't solve the same problem, this substitutability wouldn't exist.

, на что я ответил:

"заменяемость" ... интересный термин (используется в компьютерном программировании) .
Конечно, Git вряд ли является подтипом SVN.

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

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

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

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

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

Я не не согласен с вами в том, что git и svn принципиально разные, но я не согласен по многим вашим пунктам. svn, возможно, был написан для замены cvs, но они никак не связаны иначе, в то время как cvs запускались как скрипты поверх RCS, так что есть прямая связь. Тем не менее, человек, которого вы цитируете, совершенно прав, они оба в основном управляют редакциями файлов, реализация и процесс, в котором это происходит (или как это происходит), являются деталями реализации. Это похоже на разницу между CRC и SHA1, фундаментально очень разные, но они делают одно и то же.

Erik Funkenbusch 04.07.2013 05:58

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

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

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

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

Кто-нибудь, кто может помочь мне решить, действительно ли мне следует перейти на Git?

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

dyasta 27.01.2012 22:44

Последним клиентам svn не требуется папка .svn в каждом подкаталоге. Это «исправляет» ошибку копирования до того, как это произойдет.

Edwin Buck 30.03.2012 02:08

После дополнительных исследований и просмотра этой ссылки: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(Некоторые выдержки ниже):

  • Это невероятно быстро. Ни одна другая SCM, которую я использовал, не смогла с ней справиться, и я использовал многое, включая Subversion, Perforce, darcs, BitKeeper, ClearCase и CVS.
  • Он полностью распределен. Владелец репозитория не может диктовать мне, как я работаю. Я могу создавать ветки и фиксировать изменения, отключившись на моем ноутбуке, а затем синхронизировать их с любым количеством других репозиториев.
  • Синхронизация может происходить на многих носителях. Канал SSH, через HTTP через WebDAV, через FTP или путем отправки электронных писем с исправлениями, которые должны быть применены получателем сообщения. Центральный репозиторий не нужен, но его можно использовать.
  • Филиалы даже дешевле, чем в Subversion. Создать ветку так же просто, как записать на диск 41-байтовый файл. Удалить ветку так же просто, как удалить этот файл.
  • В отличие от Subversion, ветки имеют полную историю. без необходимости выполнять странное копирование и проходить по копии. При использовании Subversion мне всегда было неудобно смотреть на историю файла в ветке, которая произошла до того, как ветка была создана. из #git: spearce: Я ничего не понимаю о SVN на странице. Я сделал ветку i SVN и просмотр истории показал всю историю файла в ветке
  • Слияние веток в Git проще и автоматичнее. В Subversion вам нужно помнить, из какой последней ревизии вы выполняли слияние, чтобы вы могли сгенерировать правильную команду слияния. Git делает это автоматически и всегда делает правильно. Это означает, что вероятность ошибки при объединении двух веток снижается.
  • Слияние веток записывается как часть надлежащей истории репозиторий. Если я объединяю две ветки вместе или если я объединяю ветвь обратно в ту ветку, из которой она произошла, эта операция слияния записывается как часть истории репосторирования как выполненная мной и когда. Трудно оспорить, кто выполнил слияние, когда оно прямо в журнале.
  • Создание репозитория - тривиальная операция: mkdir foo; cd foo; git init Вот и все. Это означает, что в наши дни я создаю репозиторий Git для всего. Я обычно использую один репозиторий для каждого класса. Большинство этих репозиториев имеют размер менее 1 МБ на диске, поскольку в них хранятся только конспекты лекций, домашние задания и мои ответы LaTeX.
  • Внутренние форматы файлов репозитория невероятно просты. Это означает, что ремонт очень легко выполнить, но даже лучше, потому что он настолько прост, что его очень сложно повредить. Я не думаю, что у кого-нибудь когда-либо был поврежден репозиторий Git. Я видел, как Subversion с fsfs коррумпировалась. И я видел, как Berkley DB слишком много раз коррумпировался, чтобы доверять свой код бэкэнду bdb Subversion.
  • Формат файла Git очень хорош для сжатия данных, несмотря на это очень простой формат. Репозиторий CVS проекта Mozilla занимает около 3 ГБ; это около 12 ГБ в формате fsfs Subversion. В Git это около 300 МБ.

Прочитав все это, я убедился, что Git - это то, что нужно (хотя есть небольшая кривая обучения). Я также использовал Git и SVN на платформах Windows.

Я хотел бы услышать, что другие говорят после прочтения вышеизложенного?

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

Edwin Buck 30.03.2012 01:59

@EdwinBuck Не принимая во внимание то, что сделал Вакар, в тестах даже с учетом сетевого времени git имеет тенденцию быть быстрее: git-scm.com/about/small-and-fast

Sqeaky 07.06.2013 22:33

Ваш пункт «Создание репозитория - тривиальная операция» важен для крайне, особенно в Windows: по сравнению с SVN гораздо проще быстро смоделировать кучу взаимосвязанных распределенных репозиториев, все они связаны с центральным (--bare) репозиторием с Git, чем сделать то же самое с SVN (установить серверное приложение Windows SVN и т. д.). Кроме того (как ни странно) я считаю, что Git более согласован в разных ОС: командная строка очень хорошо спроектирована и, таким образом, большую часть времени (и практически идентична между ОС) по сравнению с различными клиентскими / серверными приложениями SVN ...

Shivan Dragon 10.10.2014 15:35

В вики-статье, на которую вы ссылаетесь, полно ошибок. Следовательно, ваш ответ неверен. Проголосовали против. В вики есть страница обсуждения, которая ссылается на svnvsgit.com и объясняет, почему сравнение неверно.

bahrep 27.12.2015 16:56

Невероятно быстро? Я переместил проект ciforth с локального резюме на github. Это простой проект, но в нем есть один большой основной исходный файл из 10 000 строк. Если я попытаюсь обвинить этот файл, github выйдет из строя. В основном, если кто-то не довольствуется тем, что говорит быстро, и настаивает на использовании такого уточнения, это не сбалансированное мнение, что заставляет меня подозревать все, что вы говорите. Groetjes Albert

Albert van der Horst 29.06.2017 13:40

Создание репозитория - тривиальная операция для rcs, просто mkdir RCS, и даже в этом нет необходимости. Я все время создаю «новый репозиторий» для лекций, решений проблем Эйлера и каждой простой программной идеи, которая приходит мне в голову для проверки. Так что вы можете обойтись гораздо меньшими затратами, если хотите простых вещей. Последний баг был удален более 20 лет назад. Groetjes Albert

Albert van der Horst 29.06.2017 13:56

Все сводится к следующему:

Будет ли ваше развитие линейным? Если это так, вам следует придерживаться Subversion.

Если, с другой стороны, ваша разработка не будет линейной, что означает, что вам нужно будет создать ветвление для разных изменений, а затем объединить такие изменения с основной линией разработки (известной Git как основная ветвь), тогда Git сделает НАМНОГО больше для вас.

Другие вопросы по теме