Многие системы контроля версий 2-го поколения работают с использованием подключенной «проверки», которая сообщает серверу, что вы собираетесь изменить файл. Примеры включают TFS, SourceGear Vault и многие другие. Таким образом, вы можете технически выполнить ваше требование. Однако, как отметил Адам Батлер, эти типы инструментов имеют свои собственные проблемы (без долгих споров - ограниченная поддержка автономной работы и, как правило, контрпродуктивный рабочий процесс разработки).
Я бы определенно предложил какой-то иерархический подход к распределению работы по рефакторингу. Разработчики могут быть логически сгруппированы в подгруппы, каждая из которых отвечает за определенные области кода. В зависимости от того, как вам нравится структурировать команды, у каждого из них может быть «ведущая» роль, которая отвечает за высокоуровневый дизайн области команды. Эта структура должна быть хорошо известна разработчикам, и она должна упростить взаимодействие для рефакторинга. Я уверен, что этот подход для некоторых кажется слишком формальным и обратным, но я думаю, что более 20 разработчиков должны использовать «бесплатный для всех» подход к рефакторингу большой системы. Некоторые рефакторинги будут проходить на высоком уровне (например, как модуль X будет взаимодействовать с модулем Y), в этом случае вам понадобятся люди, которые могут звонить на соответствующем уровне. Не каждый разработчик в команде должен принимать архитектурные решения, поэтому иерархия почти навязывается в любом случае, даже если кто-то не знает об этом.
Таким образом, в основном, есть инструменты для удовлетворения основных требований, которые вы выдвинули, но ни один инструмент не заменит надлежащих коммуникаций и будет иметь небольшое количество людей, управляющих общей архитектурой вашего проекта.