Примітка. Для відповіді на поточне запитання див. "Редагування"
Перш за все, прочитайте реверсію Subversion Джоела Спольського. Я думаю, що більшість ваших запитань там відповідуть.
Ще одна рекомендація - розмова Лінуса Торвальда на Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Цей інший також може відповісти на більшість ваших запитань, і це дуже цікаво.
До речі, щось мені здається досить смішним: навіть Брайан Фітцпатрік та Бен Коллінз-Суссман, два оригінальних творців підриву, в одному з розмов Google сказали, що "вибачте за це", посилаючись на те, що субверсія поступається меркуріальній (і DVCS взагалі).
Тепер IMO та загалом динаміка роботи команди розвиваються більш природно з будь-яким DVCS, і надзвичайною перевагою є те, що ви можете здійснювати офлайн, оскільки це передбачає наступні речі:
- Ви не залежите від сервера та з'єднання, тобто швидші часи.
- Не будучи рабом у місцях, де можна отримати доступ до Інтернету (або VPN) лише для того, щоб мати змогу скористатися.
- У кожного є резервна копія всього (файлів, історії), а не лише сервера. Це означає, що кожен може стати сервером .
- Ви можете робити примусово, якщо вам потрібно, не псуючи інший код . Коміти місцеві. Ви не наступаєте один на одного пальцями ніг під час вчинення. Ви не руйнуєте чужі конструкції чи оточення лише виконуючи обов'язки.
- Люди, які не мають "доступу на доступ", можуть взяти на себе зобов’язання (оскільки обмін інформацією в DVCS не передбачає завантаження коду), знизивши бар'єр для внесків, ви можете вирішити, чи не змінювати їх як зміни.
- Це може посилити природну комунікацію, оскільки DVCS робить це важливим ... в підриві, те, що ви натомість, здійснюєте гонки, які змушують спілкуватися, але заважаючи вашій роботі.
- Дописувачі можуть об'єднатися та вирішити свої злиття, що означає менше роботи інтеграторів.
- Співробітники можуть мати свої відділення, не зачіпаючи інших людей (але при необхідності мати можливість ділитися ними).
Про ваші бали:
- Пекло злиття не існує в DVCSland; не потрібно обробляти. Дивіться наступний пункт .
- У DVCS кожен представляє "гілку", тобто є злиття щоразу, коли зміни витягуються. Названі гілки - інша річ.
- Ви можете продовжувати використовувати безперервну інтеграцію, якщо хочете. Не обов'язково IMHO, чому додавати складність? Просто продовжуйте тестування як частину своєї культури / політики.
- Меркуріал швидше в одних речах, git - швидше в інших. Не дуже до DVCS загалом, але до їх конкретної реалізації AFAIK.
- Кожен завжди матиме повний проект, не лише ви. Розподілена річ пов'язана з тим, що ви можете здійснювати / оновлювати локально, обмін / виведення з-за комп'ютера називається натисканням / витягуванням.
- Знову читайте Subversion Re-Education. DVCS простіші та природніші, але вони різні, не намагайтеся думати, що cvs / svn === база всіх версій.
Я надавав деяку документацію до проекту Joomla, щоб допомогти проповідувати міграцію до DVCS, і тут я створив кілька діаграм, щоб проілюструвати централізований vs розподілений.
Централізований
Поширений у загальній практиці
Поширений в повній мірі
Як ви бачите, на діаграмі все ще є "централізоване сховище", і це один з улюблених аргументів шанувальників централізованої версії: "ви все ще централізований", і ні, ви ні, оскільки "централізоване" сховище просто сховище ви всі погоджуються (наприклад, офіційна програма github repo), але це може змінитися в будь-який час, коли вам потрібно.
Тепер це типовий робочий процес для проектів з відкритим кодом (наприклад, проект з широкою співпрацею) з використанням DVCS:
Bitbucket.org є дещо еквівалентом github для mercurial, знайте, що вони мають необмежену кількість приватних сховищ з необмеженим простором, якщо ваша команда менше п'яти, ви можете користуватися нею безкоштовно.
Найкращий спосіб переконатись у використанні DVCS - це випробувати DVCS, кожен досвідчений розробник DVCS, який використовує svn / cvs, скаже вам, що цього варто, і що вони не знають, як вижили весь свій час без цього.
EDIT : Щоб відповісти на вашу другу редакцію, я можу просто повторити, що з DVCS у вас є інший робочий процес, я б радив вам не шукати причин, щоб не спробувати це через кращі практики , це здається, коли люди стверджують, що OOP не є необхідні, оскільки вони можуть обійти складні дизайнерські зразки з тим, що вони завжди роблять з парадигмою XYZ; ви можете отримати вигоду в будь-якому випадку.
Спробуйте, ви побачите, як робота в "приватному відділенні" насправді є кращим варіантом. Однією з причин я можу сказати про те, чому останнє справжнє - це те, що ви втрачаєте страх перед вчиненням , дозволяючи виконувати зобов'язання в будь-який час, коли вважаєте за потрібне і працювати більш природним способом.
Щодо "злиття пекла", ви говорите "якщо ми не експериментуємо", я кажу "навіть якщо ви експериментуєте + maintaing + працюєте в оновленому v2.0 одночасно ". Як я вже говорив раніше, пекельне злиття не існує, оскільки:
- Кожного разу, коли ви здійснюєте створення, ви створюєте неназвану гілку, і кожного разу, коли ваші зміни відповідають змінам інших осіб, відбувається природне злиття.
- Оскільки DVCS збирає більше метаданих на кожну фіксацію, під час злиття виникає менше конфліктів ... тож ви навіть можете назвати це "розумним злиттям".
- Коли ви стикаєтеся з конфліктами злиття, це те, що ви можете використовувати:
Крім того, розмір проекту не має значення, коли я перейшов з підривної роботи, я фактично вже бачив переваги, працюючи в самоті, все просто відчував себе правильно. У ревізіях (не зовсім перегляд, але конкретний набір змін для конкретних файлів включають фіксацію, виділених зі стану кодового) дозволяють візуалізувати саме те , що ви мали в вигляді, роблячи те , що ви робили для певної групи файлів, не вся кодова база.
Щодо роботи наборів змін та підвищення продуктивності. Я спробую проілюструвати це на прикладі, який я хотів би навести: проект mootools перемикається зі svn, проілюстрованого в їхньому графіку мережі github .
Раніше
Після
Що ви бачите, це те, що розробники зможуть зосередитись на власній роботі під час здійснення комутації, не боячись порушити код інших людей, вони турбуються про порушення коду інших людей після натискання / витягування (DVCS: спочатку здійснюють, потім натискають / тягнуть, потім оновлюють ) але оскільки злиття тут розумніше, вони часто ніколи не роблять ... навіть коли виникає конфлікт злиття (що трапляється рідко), ви витрачаєте лише 5 хвилин або менше на його виправлення.
Моя рекомендація вам - шукати когось, хто знає, як використовувати mercurial / git, і сказати йому / їй, щоб він пояснив це вам рукою. Провівши близько півгодини з друзями в командному рядку, використовуючи mercurial з нашими настільними комп’ютерами та обліковими записами bitbucket, показуючи їм, як злитися, навіть створюючи конфлікти для них, щоб побачити, як виправити смішну кількість часу, я зміг показати їм справжня сила DVCS.
Нарешті, я б рекомендував вам використовувати mercurial + bitbucket замість git + github, якщо ви працюєте з Windows. Mercurial також є більш простим, але git є більш потужним для складнішого управління сховищами (наприклад, git rebase ).
Деякі додаткові рекомендовані читання: