1. Docker или какие-нибудь ещё контейнеры для запуска окружения.
2. Git для передачи исходников.
3. Решается при помощи предыдущих пунктов
P.S. Основной пулл задач это вёрстка поэтому особой нагрузки на виртуальную машину не будет производится
Тогда твои проблемы надуманы. Никакого засорения рабочей машины или конфликтов ПО быть не может.
Из ПО тебе нужен только редактор кода.
Сам код между машинами передавай через git.
Если совсем не хочется что-то ставить и синхронизировать - попробуй какой-нибудь сервис типа github codespaces
Какие есть минусы у данного подхода
У подхода с виртуалками есть следующие минусы:
1. Образ виртуальной машины весит несколько гигабайт (а может разрастись до нескольких десятков) => синхронизация такого огромного куска данных будет занимать много времени, да и на диске много места займёт.
2. Настройка компьютера для запуска виртуальных машин может занять время.
+ ты так всё равно засоряешь компьютер софтом для ВМ.
3. Запущенная виртуальная машина требует много ресурсов. Для комфортной работы в ней тебе нужно будет выделить на неё 4 ядра и 8г озу => тебе нужен достаточно мощный комп, чтобы даже после такого отжора он не тормозил.
И то даже тогда UX у тебя будет страдать, тк в виртуалке не будет видеокарты.