I'm just starting to read about r10k because I love the fact that it can create dynamic environments based on Git branches. Now, I just read that Puppet can do this without r10k. What does r10k provide that Puppet cannot already do? If I just want the dynamic directory-based environments based on Git branches, do I even need r10k?
R10k deploys modules into the environment you tell it to. Those modules could come from the Forge, or a git repository. That functionality is not available in Puppet.
The ways to use it are legion, but personally I tend to do something like this.