I run my production software from production branch, working copies. I have been told many times that this is a grave sin. Yet, I have been doing this for over six years in my current gig (out of twenty-eight years as a professional), which includes scores of deployments to production and hundreds to stage, without a single problem related to this practice.
At my most previous job, I was required to export from our VCS (initially svn and then git) to generate the executable production copy. All this seemed to do was to add extra steps to deployment, making more room for mistakes or things to break. It also made hot fixes that required work on the production platform (for example, as the very last resort when the error cannot be replicated anywhere else) frustrating and unnecessarily complex right during the middle of a time when developers or devops need be the least distracted.
The only argument I've encountered against this practice that was even slightly compelling to me is that I might mistakingly deploy updates from that branch. Well, what if I were to mistakenly do anything? I can do a lunkheaded export from git just as easily as I can do a lunkheaded update from git. From what I can see, rolling back, moving among branches, etc., are far easier to intentionally accomplish with my scheme and yet no more or less as error prone than any other scheme. After all, I do not merge into my production branch until stringent testing and multiple sign-offs have been collected through dev and stage.
What do you think?
Allow me to finish by saying that I'm not intending this to be a discussion that intersects this question with the larger topic of deployment strategies, such as using things like Docker or various forms of CI, and so on. We're just talking VCS, keeping it simple and focused.
Thanks for taking a look.