We keep sensitive and/or machine-specific configuration in separate config files, then use configSource to include them like so...
<connectionStrings configSource="cstrings.config"/>
This way you can check in Web.config and a cstrings.config file that has a generic value that can be used on a dev machine. (e.g., (local),...MyAppNameDb...)
For production environments, mark the cstrings.config file as read-only and set up your deployment script so that you don't attempt to write over it. Your production connection string is protected by whatever security you have on that box. This keeps your sensitive strings out of version control.
cstrings.config:
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="Default" connectionString="Server=localhost"/>
</connectionStrings>