Что касается случая с Бобом и Джоном, кооперативные системы, такие как svn, не предотвращают этот сценарий больше, чем система блокировки. Я могу «обновить» FooBar.java, который удовлетворяет svn тем, что у меня последняя версия, затем удалить этот файл локально и перезаписать его своей собственной личной копией, которую я сделал, не обращая внимания на базовую версию, и проверить это, счастливо уничтожив изменения другого парня.
Никакая система, блокирующая или нет, не мешает этому, поэтому я не вижу смысла даже вовлекать ее в дискуссию.
Реальная проблема заключается в определении баланса между
вероятность ошибки слияния
против
неудобства, вызванные блокировкой файлов людьми
Представление о том, что система с блокировкой или без блокировки является «превосходящей», - нонсенс.
Я использовал VSS в режиме полной блокировки по умолчанию с 6 разработчиками, и он работал как
мечта. Иногда кто-то может забыть снять блокировку, и нам придется выследить их или сломать замок вручную и слить вручную, когда они вернутся, но
это было очень минимально. Я видел, как svn испортил автоматическое слияние несколько раз, так что я не очень доверяю ему. Не всегда помечается «конфликт», когда два человека изменили один и тот же файл так, что их нельзя автоматически объединить.
С другой стороны, я видел, как люди нетерпеливы с замками VSS, редактируют свои собственные копии,
и небрежно проверить их поверх кода других людей, и я видел
svn ловко ловит меня, когда я могу случайно попытаться проверить что-то, что было изменено кем-то другим с тех пор, как я в последний раз проверял это.
Я хочу сказать, что это не разумная дискуссия. Успех любой системы сводится
на то, как вы управляете конфликтными точками, когда они происходят, а не на одной системе
или другой лучше.