Yes, I've had good luck with branches for trunk, qc, and production. The production branch is always a copy of qc as it existed at some point in the past, so that guarantees that everything's been tested together and without anything extra.
Beyond the benefits of just automating deployment (independent of source control and continuous integration), it's convenient to use source control as a historical record about the state of the production systems, and it's good not to have to remember rarely-used combinations of parameter values in deployment scripts.
Beyond the benefits of just automating deployment (independent of source control and continuous integration), it's convenient to use source control as a historical record about the state of the production systems, and it's good not to have to remember rarely-used combinations of parameter values in deployment scripts.