I wouldn't use hard links. Some editors break hard links when they save files, others don't, and some can be configured. However, preserving hard links when saving a file implies that the file is written in place, which means that if the system crashes during the write, you will be left with an incomplete file. This is why the save-to-new-file-and-move-in-place is preferable — but this breaks hard links.
In particular, most version control software breaks hard links. So hard links are out.
A forest of symbolic links (created with cp -as with GNU coreutils) doesn't have this problem. You need to ensure that you point your editor to the master copy or that the editor follows symlinks.
You can create the symlink forest with cp -as. However, if you create new files, cp -as is inconvenient to create the corresponding symlinks (it'll do the job, but drown you in complaints that the target already exists). You can use a simple shell loop.
for env in environement1 environment2 environment3; do cd "../$env" find ../src \ -type d -exec mkdir {} + \ -o -exec sh -c 'ln -s "$@" .' _ {} + done