I know there are similar questions asked on other StackExchange sites, but I think development in Computational Science may work differently because of the computing environments that are common. I often can not run reasonable tests on my local machine due to time or memory constraints (or maybe I'm developing for intel coprocessors). I also can't really test distributed parallelism on my local machine, Thus I log in to a remote cluster and run my software there.
Developing locally is good because I usually have root on my own machine and can install nice tools like valgrind, gdb, libclang (for source code completion), ranger, and others. However, my computer likely has different compiler and library versions than are available on a remote machine (which is shared and I don't have privileges on).
Developing remotely ensures that compiler and library versions are the same and that I can edit, compile and run without having to sync my changes in some way. I can sync easily with git, but it can be a pain to commit, push and then pull just to fix a semicolon I forgot.
Ideally, I'd have all my tools on the remote machine, but without privileges some can be really annoying to install when they have several of dependencies and I can't use a package manager without root.
What's the best way to develop using a remote machine that I don't have privileges on?