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