Да, вы можете использовать DVCS точно так же, как и в централизованном режиме, и в большинстве случаев вы получаете только скорость, но для полного использования преимуществ DVCS необходимо изменить свои взгляды на управление версиями.
Хороший вопрос, который нужно задать: «Если бы у меня было столько веток, сколько я хотел, фиксировал так часто, как хотел, и делился этими ветками и коммитами только с тем, кому я хочу, что бы я с ним делал?»
В качестве примера "столько веток, сколько вы хотите", у меня сейчас около 5 веток только для меня. Одним из них является основная ветвь, которую я использую для слияний, чтобы поделиться с коллегами. Один для задачи, над которой я сейчас работаю. Один из них - для ранее выполненного задания, которое я жду, чтобы коллеги рассмотрели его. Два предназначены для более долгосрочных задач, которые я начал, но пришлось отложить из-за приоритетов графика и возобновит работу после следующего выпуска.
В качестве примера преимуществ «коммитить так часто, как вы хотите», коллега сегодня внес несколько небольших изменений в инструмент статического анализа, сделав около 15 локальных коммитов, из которых только один будет выполнен с помощью CVCS. Он случайно ввел серьезную ошибку, которую не обнаружил, пока не сделал, но с помощью git bisect
смог быстро сузить ее.
В качестве примера того, «кого именно я хочу», рассмотрим, как два разработчика работают над функцией вместе. Они должны часто делиться, но часто то, что они делят, нарушает основную сборку. С помощью DVCS они могут извлекать данные только друг от друга, не делясь с кем-либо, а затем регистрировать полностью работающую функцию в одно связное нажатие. Другим примером является долгосрочное задание, которое мне пришлось отложить. Если мой босс решит передать эту задачу кому-то еще, кто освободился, я могу легко передать ему свою частично завершенную работу со всей ее историей.