Примечание. См. «РЕДАКТИРОВАТЬ» для ответа на текущий вопрос.
Прежде всего, прочитайте Subversion Re- Education Джоэла Спольски. Я думаю, что на большинство ваших вопросов там ответят.
Другая рекомендация, выступление Линуса Торвальдса на Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Этот другой может также ответить на большинство ваших вопросов, и это довольно занимательный.
Кстати, кое-что я нахожу довольно забавным: даже Брайан Фитцпатрик и Бен Коллинз-Суссман, два из первых создателей Subversion, сказали в одном из выступлений Google «извините за это», ссылаясь на то, что Subversion уступает Mercurial (и DVCS в целом).
Теперь, IMO и в целом, командная динамика развивается более естественно с любой DVCS, и выдающимся преимуществом является то, что вы можете фиксировать в автономном режиме, потому что это подразумевает следующие вещи:
- Вы не зависите от сервера и соединения, что означает более быстрые времена.
- Не быть рабом тех мест, где вы можете получить доступ к Интернету (или VPN), чтобы иметь возможность совершать коммиты.
- У каждого есть резервная копия всего (файлы, история), а не только сервер. То есть любой может стать сервером .
- Вы можете совершать компульсивно, если вам нужно, не мешая чужому коду . Комитеты местные. Вы не наступаете на пальцы друг друга, совершая. Вы не нарушаете сборки или окружение других, просто совершая действия.
- Люди без «коммитного доступа» могут коммитить (потому что коммитирование в DVCS не подразумевает загрузку кода), снижая барьер для вкладов, вы можете принять решение об их изменениях или нет как интегратор.
- Это может усилить естественное общение, так как DVCS делает это существенным ... в подрывной деятельности вы вместо этого получаете коммитные расы, которые форсируют общение, но мешают вашей работе.
- Участники могут объединиться и справиться с собственным слиянием, что в конечном итоге означает меньшую работу для интеграторов.
- Участники могут иметь свои собственные ветви, не влияя на чужие (но имея возможность делиться ими при необходимости).
О ваших баллах:
- Ад слияния не существует в DVCSland; не нужно обрабатывать Смотрите следующий пункт .
- В DVCS каждый представляет «ветвь», то есть при каждом изменении происходят слияния. Именованные ветви - это другое.
- Вы можете продолжать использовать непрерывную интеграцию, если хотите. Хотя не обязательно, зачем добавлять сложность? Просто продолжайте тестирование как часть своей культуры / политики.
- Mercurial быстрее в некоторых вещах, git быстрее в других. Не совсем до DVCS в целом, но до их конкретной реализации AFAIK.
- У каждого всегда будет полный проект, а не только у вас. Распределенная вещь связана с тем, что вы можете фиксировать / обновлять локально, обмен / получение извне вашего компьютера называется push / pull.
- Опять же, прочитайте Subversion Re-Education. DVCS проще и естественнее, но они разные, не пытайтесь думать, что cvs / svn === основа всех версий.
Я вносил некоторую документацию в проект Joomla, чтобы помочь проповедовать переход на DVCS, и здесь я сделал несколько диаграмм, чтобы проиллюстрировать централизованное и распределенное распределение.
централизованные
Распространены в общей практике
Распределяется в полной мере
Вы видите, что на диаграмме все еще есть «централизованное хранилище», и это один из любимых аргументов поклонников централизованного управления версиями: «вы все еще централизованы», и нет, так как «централизованное» хранилище - это просто хранилище все согласны (например, официальный репозиторий GitHub), но это может измениться в любое время, когда вам нужно.
Теперь это типичный рабочий процесс для проектов с открытым исходным кодом (например, проекта с широким сотрудничеством) с использованием DVCS:
Bitbucket.org - это своего рода эквивалент github для mercurial, знайте, что у них есть неограниченное количество частных репозиториев с неограниченным пространством, если ваша команда меньше пяти, вы можете использовать ее бесплатно.
Лучший способ убедить себя в использовании DVCS - это попробовать DVCS. Каждый опытный разработчик DVCS, который использовал svn / cvs, скажет вам, что оно того стоит, и что они не знают, как они выжили без него все свое время.
РЕДАКТИРОВАТЬ : Чтобы ответить на ваше второе редактирование, я могу еще раз повторить, что с DVCS у вас есть другой рабочий процесс, я бы посоветовал вам не искать причины, чтобы не попробовать его из-за лучших практик , такое чувство, что когда люди утверждают, что ООП не является необходимо, потому что они могут обойти сложные шаблоны проектирования с тем, что они всегда делают с парадигмой XYZ; Вы можете извлечь выгоду в любом случае.
Попробуйте, вы увидите, что работа в "частной ветке" на самом деле лучший вариант. Одна причина, по которой я могу сказать, почему последнее верно, заключается в том, что вы теряете страх совершать , позволяя вам совершать обязательства в любое удобное для вас время и работать более естественным образом.
Что касается «сливающегося ада», вы говорите «если мы не экспериментируем», я говорю «даже если вы экспериментируете + продолжаете работать + в обновленной версии 2.0 одновременно ». Как я говорил ранее, ад слияния не существует, потому что:
- Каждый раз, когда вы фиксируете, вы генерируете неназванную ветвь, и каждый раз, когда ваши изменения встречаются с изменениями других людей, происходит естественное слияние.
- Поскольку DVCS собирают больше метаданных для каждого коммита, во время слияния возникает меньше конфликтов ... так что вы даже можете назвать это «интеллектуальным слиянием».
- Когда вы сталкиваетесь с конфликтами слияния, вот что вы можете использовать:
Кроме того, размер проекта не имеет значения, когда я переключился с Subversion, я фактически уже видел преимущества, работая в одиночку, все просто казалось правильным. В ревизиях (не совсем пересмотр, но конкретный набор изменений для конкретных файлов включают фиксацию, выделенных из состояния кодового) позволяют визуализировать именно то , что вы имели в виде, делая то , что вы делали для определенной группы файлов, не вся кодовая база.
Относительно того, как работают наборы изменений и повышение производительности. Я попытаюсь проиллюстрировать это на примере, который мне нравится приводить: переключение проекта mootools с svn показано на их графике сети github .
До
После
Что вы видите, так это то, что разработчики могут сосредоточиться на своей работе во время коммиттинга, не опасаясь взломать чужой код, они беспокоятся о взломе чужого кода после нажатия / вытягивания (DVCS: сначала зафиксировать, затем нажать / вытянуть, затем обновить ) но так как слияние здесь более разумно, они часто этого не делают ... даже когда возникает конфликт слияния (который встречается редко), вы потратите на его устранение не более 5 минут.
Я рекомендую вам найти кого-то, кто знает, как использовать mercurial / git, и сказать ему / ей, чтобы он объяснил вам это на практике. Потратив около получаса с некоторыми друзьями в командной строке, используя mercurial с нашими рабочими столами и учетными записями битбакетов, показывая им, как объединять, и даже выдумывая конфликты для того, чтобы увидеть, как исправить это за смехотворное количество времени, я смог показать они истинная сила DVCS.
Наконец, я бы порекомендовал вам использовать mercurial + bitbucket вместо git + github, если вы работаете с людьми из Windows. Mercurial также немного проще, но git более мощный для более сложного управления репозиторием (например, git rebase ).
Некоторые дополнительные рекомендуемые чтения: