My workflow goes a little something like this:
Git & Private Gitlab Server
PHPStorm (With SS plugin)
I enjoy working on Windows but hate having any sort of stacks installed under windows. I find them hard to manage and I'm just used to using Linux servers for these types of things. I'd love to be able to develop in Linux and completely drop windows but tools I use just don't work well on Linux and I'm not really willing to change my habits just yet. I’ve tried a number of times but just keep coming back to Windows.
Why a Virtual Stack:
I run LAMP stacks in a virtual machine on my workstation for all my developing. I use PHPstorms “upload on save” feature to upload files directly to the stack whenever I save a file. This isn't something I would do with remote servers (or live servers for that matter!) but it works for developing. Its basically abstracting something like WAMP off my computer and putting it into a virtual server. The benefits of this are I can easily copy the complete stack from computer to computer and it brings everything I need to sit down and get right to work. I often reformat my system too, and this makes it easy to make sure my work and setup is all safe and ready to go ASAP.
What’s on the Stack:
I have a base install of the latest debian (7.0 at time of writing) with nothing but open SSH selected during the installation. After that I just install phpmyadmin which pulls down everything needed for a complete LAMP stack, and install git along with ruby and compass (I love sass + compass for CSS). I then use git to take a branch from my master repo (which is what the my current live site is running on) and I’m ready to start work.
Using PHPstorm I just code away with files being pushed to my stack every time they are saved. Everything is contained within a host-only network setup so I can work with my stacks when I'm offline and on my laptop with ease. I use putty to monitor compass so I can easily see compile errors and problems with my CSS etc.
Pushing to Live:
When I’m happy with the changes I've made and things are working as expected I just need to merge my dev branch back with the master and hooks on my gitlab server send the command to my live web server to pull down the latest changes. I like to keep my live server automated to remove any chance of forgetting files or breaking things.
I’m sure there are many better ways of working, and better practises you should follow, but I enjoy my little workflow which gives me complete control over everything. I can take a quick snapshot of my dev stack if I’m going to do something big like try upgrading to the latest SS version, and can revert back in a flash if it all goes belly up.
It works for me.