Setting up and configuring a dev environment to be disposable ie Vagrant

I just got a new machine and want to try an idea I’ve had for a while to stay sane while still being able to experiment with different languages and configurations. I mainly intend to use Vagrant for this but I was wondering what else can be done to create an environment where if something stops working I can easily revert back to a configuration where everything was good.

I’ll give a quick example of when this happens and I want to be able to fix it and then posit a few suggestions people have given me and see how others on Upcase feel about the plausibility of these working for a Rails dev.

For example, some version managers don’t want you to have a different version manager installed. It’s been a while but I think specifically rbenv will have some issues if you have previously been using RVM for instance. So if I wanted to use one of these for a few months and then be able to start using the other one to see if I like it better, or I start using something else entirely and decide I really liked one of those better and want to be able to go back to say for instance rbenv after I’ve gotten rid of it and installed other things in its place, it would be nice if I just had a disposable environment where these were installed and I could stop using one for a while and go back to the one I was used to without having to install or uninstall anything on my path. This is why a lot of people use Vagrant because they have to go back and forth from some different technologies like these for instance if they are working on two projects simultaneously and those projects have different dependencies which don’t need to be installed on the same path.

One idea I had, since I am mainly a mac developer, is using Time Machine. I don’t know much about Time Machine but I know the basics of how it works and it seems like this could be an ok solution but wouldn’t be the exact solution I need and wouldn’t cover every use case I’m looking for.

I actually went to the Genius Bar and asked someone who had experience as a dev, as a CS student and he actually said this could be a solution but he then recommended I use git for this purpose. I was intrigued by this idea because it seems simpler than learning Vagrant perhaps but I’ve also never used git for the purpose of version control for my environment but used it on an application by application basis to track changes to those projects. Has anyone used git for the purpose of being able to go back to a previous version of their development environment and has it worked?

And finally, the main topic what is the first step in using Vagrant for my case?

As an after thought, I know some people also use an online platform such as maybe so they don’t have to install local languages. What is the best solution?

After reading some topics from the past few years I have also run into people using Docker as a solution to similar issues. I am going to read this next and see if it answers any of my questions

I’m also watching this right now which was in the topic Intro to Docker

And there was one more topic which seemed relevant which I haven’t read yet DevOps: Where/how to acquire this knowledge? but the other topics I’ve read were most of the ones here