This flow has been working pretty well for me:
1. Keep a local git repo for bot development.
2. Use branches for large-scale strategy ideas (e.g. one branch for "be more aggressive", one for "improve navigation")
3. After any significant changes, save a copy of your bot's binary, named after the git SHA it was built on.
4. When uploading a bot, use "git tag v21" to mark the revision to keep it in sync with the server's version numbers.
5. Symlink the current-best binary to something like "OldBot" and write a build target / key macro to build the current source and run it against OldBot.
This makes it pretty easy to track, analyze, and compare performance of different versions of my bot both locally and on the server replays.