Revision control
chill
Posts: 186
I'm looking to implement some sort of revision control at my company. I know some of you are doing this, and I'd like to know what you're using, how well it's working for you, etc. I'm looking at subversion and git, and know something of the pros and cons of these. Anybody using either one, or do you recommend something else? Why?
We typically have many small projects - probably a dozen or two going at any one time, plus hundreds or thousands archived. In many cases, we'll have an upgrade to a system that we did years ago. Personnel are three each senior and junior programmers, plus the occasional subcontractor.
Thanks!
.
We typically have many small projects - probably a dozen or two going at any one time, plus hundreds or thousands archived. In many cases, we'll have an upgrade to a system that we did years ago. Personnel are three each senior and junior programmers, plus the occasional subcontractor.
Thanks!
.
0
Comments
On the other hand, our guys often don't have internet access in the field, so I like the 'local repo' that you get with git.
.
Don't get me wrong, subversion is fantastic and a highly useful tool however, the centralized approach can be somewhat of a pain as soon as techs are without a persistent connection to the repository.
Where git really shines is when you have multiple programmers working on site. They may or may not have a network connection to the outside world but they can easily set up a connection with each other (or if they can't, do a bare clone to a thumb drive and throw it across the room to each other) then push, pull, fetch and merge at will. Even if there's only one guy working away he can continue to commit locally, retain a nice granular history then push this elsewhere when a connection is available.
Workflow wise we use this branching model and have a bare clone sitting on a network share that is considered the 'central' repo. Every device module and set of common libraries gets its own repository and is versioned using Semantic Versioning with each 'release' (aka merge into the master branch) tagged with an appropriate version. Every system / system type then gets its own repo to store system specific guff in and pulls in the required modules and libraries via git submodules that reference the release tag. This removes any duplication of common components, provides uncluttered and project specific logs and ensures changes to one module will never break a system that links to it.
-Ryan