How do I keep in development add-ons under source control and easily reload changes in Blender?
This is my workflow for developing add-ons outside of the Blender add-on directory:


Save script files in text editor
Run a script to copy script files into Blender add-on directory
Reload script files in Blender


Run a script to copy script files into Blender add-on directory

When you install a .zip add-on installation file inside of Blender, the application simply unzips the file and places the contents into your Blender add-on directory. You can also install the add-on by placing the script files manually or using a script to copy the files.

The add-on directory location depends on your operating system. A quick way to find the location of a specific add-on is to select the add-on in the Preferences > Addons menu and look at the File attribute:



There are many ways to create a script that will copy files from one location to another. Some examples are:


A Windows batch script (.bat) using the xcopy command
A MacOS/Linux shell script (.sh) using the cp command
A Python script (.py) using the shutil module


Reload script files in Blender

Once you have your scripts copied over, you can reload your scripts in Blender using the Reload Scripts operator: 


in Blender 2.79: F8 hotkey 
in Blender 2.8x: F3 > Reload Scripts


An important thing to note is that the reload scripts operator will only reload your __init__.py script and will not reload other add-on script files. See this answer for how to structure your __init__.py script to reload other scripts and modules: https://blender.stackexchange.com/a/28505/81365

You can also restart Blender to update all script files.