Сравнение между централизованными и распределенными [закрытыми] системами управления версиями

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
77
задан 6 revs, 4 users 51% 20 June 2017 в 09:56
поделиться

15 ответов

От мой ответ к различному вопрос :

Распределенные системы управления версиями (DVCSs) решают различные проблемы, чем Централизованный VCSs. Сравнение их похоже на сравнение молотков и отверток.

Централизованный VCS системы разработаны с намерением, что существует Один Истинный Источник, который Благословлен, и поэтому Хороший. Все разработчики работают (контроль) из того источника, и затем добавляют (фиксируют) их изменения, которые тогда становятся столь же Счастливыми. Единственная реальная разница между CVS, Подрывной деятельностью, ClearCase, По необходимости, VisualSourceSafe и всеми другими CVCSes находится в рабочем процессе, производительности и интеграции, которую предлагает каждый продукт.

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

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

56
ответ дан Community 24 November 2019 в 10:51
поделиться

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

, Что это действительно обычно означает, то, что репозиторием централизованно управляют - но это обычно - преимущество в компании с компетентным отделом ИТ, потому что это означает, что существует только одно место для резервного копирования и только одно место для управления устройством хранения данных в.

0
ответ дан MarkR 24 November 2019 в 10:51
поделиться

W. Ответ Craig Trader подводит итог большей части из него, однако, я нахожу, что персональный стиль работы имеет огромное значение также. Где я в настоящее время работаю, мы используем подрывную деятельность в качестве нашей Истинный Источник, однако, многие разработчики используют мерзавца-svn на своих персональных машинах для компенсации проблемы рабочего процесса, которую мы имеем (отказ управления, но это - другая история). В любом случае. действительно о балансировке, какие наборы функций делают Вас самыми продуктивными с тем, в чем организация нуждается (централизованная аутентификация, например).

0
ответ дан Mark Kegel 24 November 2019 в 10:51
поделиться

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

1
ответ дан Roman Plášil 24 November 2019 в 10:51
поделиться

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

3
ответ дан Vadim Kotov 24 November 2019 в 10:51
поделиться

Основная проблема (кроме очевидной проблемы пропускной способности) владение .

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

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

Для ответа на комментарии этого ответа Вы действительно хотите, чтобы инструмент сказал Вам, кто владеет тем, что, и тогда передают (по телефону, IM или почте) с удаленным сайтом.
, Если у Вас нет механизма владения..., Вы "свяжетесь", но часто слишком поздно;) (т.е.: сделав параллельную разработку на идентичном наборе файлов в том же ответвлении. Фиксация может стать грязной)

3
ответ дан VonC 24 November 2019 в 10:51
поделиться

В некоторой степени эти две схемы эквивалентны:

  • распределенный VCS А может тривиально эмулировать централизованный, если Вы просто всегда продвигаете свои изменения в некотором обозначенном восходящем репозитории после каждой локальной фиксации.
  • централизованный VCS А обычно не будет в состоянии эмулировать распределенный вполне как естественно, но можно получить что-то очень похожее при использовании чего-то как стеганое одеяло сверху его. Стеганое одеяло, если Вы не знакомы с ним, является инструментом для управления большими наборами патчей сверху некоторого восходящего проекта. Идея здесь состоит в том, что команда фиксации DVCS реализована путем создания нового патча, и команда нажатия реализована путем передачи каждого выдающегося патча к централизованному VCS и затем отбрасывания файлов исправления. Это звучит немного неловким, но на практике это на самом деле работает скорее приятно.

Однако существует несколько вещей, которые DVCSes традиционно делают очень хорошо и из которых наиболее централизованные VCSes делают что-то вроде хеша. Самый важный из них, вероятно, переходит: DVCS сделает очень легким перейти репозиторий или объединить ответвления, которые больше не необходимы и будут отслеживать историю, в то время как Вы делаете так. Нет никакой конкретной причины, почему централизованная схема испытала бы затруднения из-за этого, но исторически никто, кажется еще, вполне не разобрался в нем. Является ли это на самом деле проблемой для Вас, зависит от того, как Вы собираетесь организовать разработку, но для многих людей это - значительное соображение.

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

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

8
ответ дан 24 November 2019 в 10:51
поделиться

Во время моего поиска правильного SCM я нашел, что следующие ссылки очень помогли:

  1. Лучше Инициатива SCM: Сравнение . Сравнение приблизительно 26 систем управления версиями.
  2. Сравнение программного обеспечения управления версиями . Статья Wikipedia, сравнивающая приблизительно 38 систем управления версиями, затрагивающих темы как технические различия, функции, пользовательские интерфейсы, и т.д.
  3. Распределенные системы управления версиями . Другое сравнение, но сфокусированный главным образом на распределенных системах.
10
ответ дан Nobby 24 November 2019 в 10:51
поделиться

Едва ли сравнение, но вот то, что используют большие проекты:

Централизованная подрывная деятельность VCSes

  • Apache, GCC, Ruby, MPlayer, Zope, Plone, Xiph, FreeBSD, WebKit...

  • CVS

    CVS

Распределенный мерзавец VCSes

  • ядро Linux, KDE, Perl, Ruby on Rails, Android, Вино, Fedora, X.org, Mediawiki, Django, VLC, Моно, Gnome, Samba, CUPS, GnuPG, Emacs ELPA...

  • подвижный (hg)

    Mozilla и Mozdev, OpenJDK (Java), OpenSolaris, ALSA, 3G NTFS, Голубятня, MoinMoin, дурак, PETSc, Октава, FEniCS, Способность, Python, XEmacs, Xen, Vim, Xine...

  • bzr

    Emacs, Склонный, Почтальон, MySQL, Сквид... также продвинутый в Ubuntu.

  • darcs

    ghc, ион, xmonad... популярный в сообществе Haskell.

  • окаменелость

    SQLite

25
ответ дан 11 revs, 5 users 77% 24 November 2019 в 10:51
поделиться

Вт. Craig Trader сказал это о DVCS и CVCS:

при необходимости в обоих Вы - fsck'd.

я не сказал бы, что Вы fsck'd при использовании обоих. Практически разработчики, которые используют инструменты DVCS обычно, пытаются объединить свои изменения (или отправить запросы получения по запросу) против центрального расположения (обычно к ответвлению выпуска в репозитории выпуска). Существует некоторая ирония с разработчиками, которые используют DVCS, но в палке конца с централизованным рабочим процессом, можно начать задаваться вопросом, лучше ли Распределенный подход действительно, чем Централизованный.

существуют некоторые преимущества с DVCS по CVCS:

  • понятие исключительно распознаваемых фиксаций делает передающие патчи между коллегами безболезненными. Т.е. Вы делаете патч как фиксацию и совместно используете его с разработчиками других, которым нужен он. Позже, когда все хотят объединиться вместе, что конкретная фиксация распознана и может быть сравнена между ответвлениями, имея меньше шанса конфликта слияния. Разработчики склонны отправлять патчи друг другу картой с интерфейсом USB или электронной почтой независимо от инструмента управления версиями, который Вы используете. К сожалению, в случае CVCS, управление версиями зарегистрирует фиксации как отдельные, не удаваясь распознать, что изменения являются тем же, ведя к более высокому шансу конфликта слияния.

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

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

†¦ и некоторые недостатки, которые обычно имеют обходные решения:

  • , у Кого есть последний пересмотр? В CVCS, соединительная линия обычно имеет последний пересмотр, но в DVCS это не может быть явно очевидно. Обходное решение использует правила поведения, что разработчики в проекте должны прийти к соглашению в который repo объединить их работу против.

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

  • В собственных проектах это имело бы катастрофические последствия, если целый репозиторий становится публично доступным. Еще больше, если раздраженный или злонамеренный программист овладевает клонированным репозиторием. Утечка исходного кода является тяжелой болью для собственных компаний. DVCS's разъясняет это простое, поскольку только необходимо клонировать репозиторий, в то время как некоторые системы CM (такие как ClearCase) пытаются ограничить тот доступ. Однако, по-моему, если у Вас будет достаточно суммы дисфункциональности в Вашей культуре компании тогда, то никакое управление версиями в мире не поможет Вам против утечки исходного кода.

20
ответ дан Community 24 November 2019 в 10:51
поделиться

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

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

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

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

Не говоря уже о другой хорошей вещи о распределенном repos: полная история, доступная всегда. Необходимо ли посмотреть на журналы пересмотра когда далеко от сети? Необходимо ли аннотировать источник, чтобы видеть, как ошибка была представлена? Все возможные с распределенным repos.

не полагайте, что распределенный по сравнению с централизованным о владении или авторитетных копиях или чем-либо как этот. Действительность распределяется, следующий шаг в эволюции SCM's.

46
ответ дан MKY 24 November 2019 в 10:51
поделиться

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

Тогда запущенный шум МЕРЗАВЦА и я просто должен был протестировать его. И для меня, переходил основной коммерческий аргумент.Вот это да. Теперь я больше не должен чистить свой репозиторий, возвратитесь некоторые версия или любая из глупых вещей, которые я сделал при использовании подрывной деятельности. Все дешево в dvcs. Я только попробовал окаменелость и мерзавца, хотя, но я использовал по необходимости, cvs и подрывная деятельность и она похожа на dvcs, у всех есть действительно дешевое ветвление и метки. Больше не должен копировать весь код в одну сторону, и поэтому слияние является просто бризом.

Любой dvcs может быть установкой с центральным сервером, но что Вы получаете, среди прочего

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

И можно работать без сети.

Так короче говоря, с помощью управления версиями всегда хорошая вещь. Используя dvcs является более дешевым (в КБ и пропускной способности), и я думаю, что это представляет больший интерес для использования.

Мерзавцу контроля: http://git-scm.com/
К Окаменелости контроля: http://www.fossil-scm.org
К Подвижному контролю: https://www.mercurial-scm.org

Теперь, я могу только рекомендовать dvcs системы, и легко можно использовать центральный сервер

4
ответ дан Vadim Kotov 24 November 2019 в 10:51
поделиться

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

Допустим, у вас есть набор общие скрипты. Если на каждой машине, на которой вы работаете, есть клон, вы можете по запросу обновлять и изменять свои сценарии. Это дает вам:

  1. экономию времени, особенно с помощью ключей ssh ​​
  2. , способ разветвления различий между разными системами (например, Red Hat vs Debian, BSD vs Linux и т. д.)
1
ответ дан 24 November 2019 в 10:51
поделиться

Распределенные VCS привлекательны во многих отношениях, но один недостаток, который будет важен для моей компании, - это проблема управления не объединяемыми файлами (обычно двоичными, например, документами Excel). Subversion решает эту проблему, поддерживая свойство "svn: needs-lock", что означает, что вы должны получить блокировку для файла без объединения, прежде чем редактировать его. Это работает хорошо. Но этот рабочий процесс требует модели централизованного репозитория, что противоречит концепции DVCS.

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

4
ответ дан 24 November 2019 в 10:51
поделиться

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

2
ответ дан 24 November 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: