Muchos sistemas de control de fuente de segunda generación funcionan utilizando un "checkout" conectado que informa al servidor que tiene la intención de modificar un archivo. Los ejemplos incluyen TFS, SourceGear Vault y muchos otros. De esta manera, técnicamente puede cumplir con su requisito. Sin embargo, como señaló Adam Butler, este tipo de herramientas vienen con sus propios problemas (sin entrar en un largo debate: soporte limitado para el trabajo fuera de línea y, en general, flujo de trabajo de desarrollo contraproducente).
Definitivamente sugeriría algún tipo de enfoque jerárquico para asignar el trabajo de refactorización. Los desarrolladores podrían agruparse lógicamente en sub-equipos, cada uno responsable de áreas específicas del código. Dependiendo de cómo le guste estructurar los equipos, cada uno podría tener un rol de "líder" responsable del diseño de alto nivel del área del equipo. Esta estructura debería ser bien conocida por los desarrolladores, y debería simplificar la comunicación para la refactorización. Estoy seguro de que este enfoque parece demasiado formal y al revés para algunos, pero creo que es preferible que más de 20 desarrolladores utilicen un enfoque "gratuito para todos" para refactorizar un sistema grande. Algunas refactorizaciones se realizarán a un alto nivel (por ejemplo, cómo se comunicará el módulo X con el módulo Y), en cuyo caso necesitará personas que puedan hacer llamadas al nivel apropiado. No todos los desarrolladores del equipo deberían tomar decisiones arquitectónicas, por lo que casi se impone una jerarquía en cualquier caso, incluso si se elige ignorarla.
Básicamente, existen herramientas para cumplir con los requisitos básicos que usted establece, pero ninguna herramienta reemplazará las comunicaciones adecuadas y tendrá un pequeño número de personas que dirigen la arquitectura general de su proyecto.