Это называется настоящей проблемой «Управления конфигурацией» (в отличие от простого «Управления исходным кодом», который включает RCS и VCS )
В большинстве случаев «конфигурация» - это запись вашего кода и его зависимости со сторонней библиотекой, но для того, чтобы действительно соблюдать принцип воспроизводимости, лежащий в основе SCM, инструменты, необходимые для перестройки продукта, также должны иметь версию.
Это означает, что вы работаете не с одним «компонентом» (вашим исходным хранилищем), а с несколькими компонентами, каждый с определенными метками, которые определяют вашу конфигурацию:
- IDE (например, вы можете создать полную версию каталога Eclipse)
- язык (вы можете создать версию каталога JDK)
- исходный код и информация о проекте (поскольку вы можете добавить некоторые специфичные для IDE файлы с вашим кодом )
Тогда, в зависимости от вашего инструмента VCS:
- вы определяете свое рабочее пространство с конкретными версиями каждого компонента (ClearCase UCM, внешние SVN, подмодули Git, ...)
- вы работаете только в одном из этих компонентов (ваш исходный код), остальные доступны только для чтения
Особенности зависят от языка, инструмента и кода, который вы используете, и вам может потребоваться объединить этот подход с ответвлениями на платформу, чтобы изолировать (мы надеемся, небольшую) часть, которая зависит от платформы.