Little context: We are a team of 6 developers working a web application. Since launch we have been using CVS as our source control system on a Windows server using ColdFusion w/ Eclipse. With all the hype around Git and distributed systems lately we thought we would check it out.
As a standard web application we have our local environment where we develop new features/bug fixes. A development environment where we push everything for initial testing by QA. Staging where we send features/fixes that have been tested already this environment is to mimic as much as possible our production servers. Finally everything goes on the live system out in the wilderness...
This process is fairly painful sometime as most of it is done with FTP and what not and often we encounter conflicts when committing since something is taking longer than usual to test or when a quick bug fix is required urgently.
I am a little confused as to how Git would work in this case, it's obviously not an uncommon scenario but most of what I've found didn't talk about it in details.
If I understand correctly local branches play a significant roles with Git, I clone the git repository first then branch out fix something and commit it back all locally?
Then I get to commit it back to the main repository under the trunk dealing with merges conflicts if there are any?
If my assumptions are correct then the main question is what happen with staging. Obviously some features/fix take longer to test, some are more urgent, etc. Would I be able to simply do something like a pull of certain features/branches onto staging for final sign-off and then do the same from the live server (pull as they are signed off)?
It's quite a lot to take in coming from a CVS background...any help would be greatly appreciated!