views:

52

answers:

2

I will start building libraries on different operating-systems since they will run on different mobile platforms.
Is there a way to version control a whole development environment, containing both the version of the operating system as well as all the development tools, etc.?

I need this information to be able to rebuild a Lib from a freeze on the source with the same result and this might not be the case if the environment is not the same.

+1  A: 

This is called a true "Configuration Management" issue (as oppose to simple "Source Code Management" which include RCS and VCS)

Most of the time "configuration" is the recording of your code and its dependency with third-party library, but to really respect the reproducibility principle behind SCM, the tools necessary to rebuild a product ought to be versioned as well.

That means you are not working with just one "component" (your source repository), but with several components, each at certain labels which define your configuration:

  • the IDE (for example you could version a full Eclipse directory)
  • the language (you can version a JDK directory)
  • the source code and project information (since you can add some IDE-specific files with your code)

Then, depending your VCS tool:

  • you define your workspace with specific versions of each component (ClearCase UCM, SVN external, Git submodules, ...)
  • you work only in one of those component (your source code), the other ones being read-only

The specifics depend on the language, tool and code you are using, and you may need to combine that approach with branches per platform to isolate the (hopefully small) part which is platform-specific.

VonC
+1  A: 

We actually use VMWare to achieve that result. Every version that is important we keep a snapshot of the complete enviroment. Then when we have to go back, it is easy to fire up the image and it is right where you left it.

Kevin