Зачем избегать пессимистической блокировки в системе контроля версий?

StackOverflow https://stackoverflow.com/questions/140409

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Интеграция одновременных изменений кода — утомительный и подверженный ошибкам процесс, даже несмотря на то, что хорошая система контроля версий предоставляет инструменты, облегчающие этот процесс.Я считаю, что этого следует избегать, если это вообще возможно.Итак, почему пессимистическая блокировка не рекомендуется?

Это было полезно?

Решение

Это зависит от вашего проекта и команды в целом.Пессимистическая блокировка хороша тем, что ее легко понять — по одной разработке за раз, и слияние не требуется!

Однако самое плохое именно в этом — по одному разработчику за раз.У меня сейчас ситуация, когда коллега выехал на место и перед уходом все проверил, чтобы, если ему придется исправить какие-либо ошибки, он мог вернуться и проверить все свои изменения в....отлично для него, но паршиво для меня и остальной команды разработчиков.

Если вы можете обойти пессимистическую блокировку в своей команде, то ее можно использовать, на самом деле, самая большая причина, по которой люди ее ненавидят, заключается в том, что это стандартная практика Visual SourceSafe.Если вы не уверены в слиянии большого количества изменений, то у вас есть еще одна причина использовать его — если вы когда-либо использовали SCM с оптимистической блокировкой и выполняли слияние, вы знаете, как трудно это восстановить.

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

Другие советы

  1. Идите поиграйтесь с Source Safe и отправьте разработчика в двухнедельный отпуск.Добавьте к этому отсутствие администраторов VSS.Теперь у вас есть исправление, которое нужно опубликовать, но вы не можете это сделать из-за разработчика.
  2. Если у вас есть несколько функций и/или исправлений ошибок, над которыми вы работаете.Независимо от того, насколько мал ваш код, у вас все равно будет борьба за центральный файл.
  1. Бобу нужно отредактировать FooBar.java
  2. Джон проверил это на редактирование
  3. Боб все равно редактирует свою локальную копию и сохраняет ее как FooBar.java.bak.
  4. Когда Джон регистрирует свою запись, Боб проверяет ее.
  5. Боб копирует поверх него FooBar.java.bak и возвращает его.
  6. Джону предстоит переопределить свою функцию

Я видел, как это происходило снова и снова.Разработчики делают это, потому что этот процесс раздражает:

  1. Бобу нужно отредактировать FooBar.java
  2. Джон проверил это на редактирование
  3. Бобу приходится ждать, вертя большими пальцами, пока Джон не закончит

Пессимистическая блокировка выглядит как любительский час, извините.

  • У вас не всегда есть возможность разбить файлы на части
    • Конфигурационные файлы
    • XML-файлы
  • Даже относительно небольшие файлы могут содержать отдельные части, к которым необходим доступ более чем одному разработчику.
    • Библиотеки
    • Утилиты
  • Инструменты слияния стали намного умнее, чем когда-либо.
    • Конфликты довольно редки
  • Уменьшает задержки из-за того, что разработчики «случайно» извлекают файлы.

Если разработчик не умеет справляться со слиянием и исправлением конфликтов, его следует переобучить.

Конфликты часто возникают даже в небольших файлах, например, в JSP один человек (веб-разработчик) может изменить код макета, а кто-то другой может изменить API для модели, которую использует JSP.

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

Настоящая проблема заключается в том, чтобы решить, каков ваш баланс между

вероятность слияния ошибок противнеудобства, вызванные тем, что люди блокируют файлы

Представление о том, что система с блокировкой или без блокировки является «лучшей», является абсурдом.

Я использовал VSS в режиме полной блокировки по умолчанию, с 6 разработчиками, и это работало как мечта.Иногда кто-то забудет выпустить замок, и нам придется охотиться на них или разбить замок вручную и вручную, когда они вернулись, но это было очень минимально.Я видел, как svn несколько раз испортил автоматическое слияние, так что я ему не очень доверяю.Это не всегда означает «конфликт», когда два человека изменили один и тот же файл таким образом, что его невозможно автоматически объединить.
И наоборот, я видел, как люди терпят нетерпеливые с замками VSS, редактировали свои копии и небрежно проверяли их над кодом других людей, и я видел SVN легко поймать меня, когда я мог бы случайно попытаться что -то проверить Это было изменено кем -то другим с тех пор, как я в последний раз проверял это.

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

Пессимистическая блокировка (личный опыт) на пути к сотрудничеству.Иногда его легко заменить хорошим командным общением.Просто сказав: «Эй, я собираюсь немного поработать над этими несколькими файлами».

Я работал в командах от 2 до 6 человек без блокировок, и у нас никогда не возникало проблем, за исключением некоторых обычных и необходимых мержей.

Я тоже однажды работал с блокировкой Визуальный исходный код размещенный проект.ИМХО это было контрпродуктивно.

Разработчики программного обеспечения всегда оптимисты — просто посмотрите на их навыки оценки!

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

если ваши файлы кода настолько велики, что над ними одновременно работает несколько человек

Если это так, то пришло время «человеческим существам» взять на себя ответственность и координировать любые изменения.В идеальном случае, если вы хорошо управляете проектом, вы редко будете пытаться изменить заблокированный файл, потому что кто-то будет координировать действия, так что этого практически не произойдет.

Другими словами, вы будете знать, что «Боб» вносит большой набор изменений в компоненты X/Y/Z. Если у вас есть исправление ошибки в компоненте X, вы должны поговорить с Бобом, прежде чем пытаться отправить свои изменения.

Как я уже сказал, это идеальный вариант ;)

Пессимистическая блокировка — хорошая идея, если вероятны серьезные конфликты.В большинстве программ вы не увидите серьезных конфликтов, поэтому пессимистическая блокировка совершенно бессмысленна.Исключением могут быть случаи, если вы:

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

В противном случае...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top