Do both,
Local development until whatever your working on is done and all tested.
Push to the Shared Server at the end of the day and run integration tests to ensure you didn't break anything.
Why?
Its faster to code locally. Less steps between tests, less integration worries.
Fault isolation is easier when something breaks only after you push it to the shared server. You know it works fine locally, so it must be something to do with how it integrates with the shared server. If you worked directly on the shared server, then it would be especially difficult to narrow down bugs.
I would do it something like this:
After each person pushes there changes at the end of the day, all integration tests are run, and if any fail, then you know exactly who's code broke to project. Roll back the changes, get the problem fixed locally, then attempt to push it again, repeat until all tests pass, then onto the next person.