Matador
Well-known member
I was thinking about this, based on a thread I saw on Facebook.
For those who aren't using source-control software in their everyday lives, it is one of the most immensely useful tools in the programmers arsenal. For me personally, I am a big fan of Git (and more specifically Github), as it solves multiple problems without much up-front investment.
Here are just a few of the benefits:
1) A method of backing up your projects: services like GitHub allow you to centralize versions of your software, which means you have a backup performed every time time you 'git push'. It also means it is trivially easy to upload and version all of your projects, then seamlessly pull those bits back down to other systems, each of which can be points of development.
2) A centralized way of tracking bugs: GitHub provides bug tracking services as well, where you can write about things you think aren't working correctly, and then associate these ideas to code changes. The issues can be 'todo's as well, to remind yourself of work that you need to do.
3) A seamless way of collaborating with other people: CVS's allow you to work with multiple people and merge their changes in with yours on a line-by-line basis.
4) A way of tracking 'known-good' configurations of code: this is one of the most useful features. If you arrive at a point where things are working well, you can tag a release, and always give you an easy way to go back to that point with a few simple commands.
5) A way of testing ideas without easy ways of un-doing them: this is also very useful: you can create a branch in Git in about 100 ms. You can test out an idea, and if it bombs, you can undue it back to a known state without error or ambiguity. If you idea works out, you can merge your experiment back into a known good branch of development, and have access to all points in-between.
I know some reading are thinking "I'll never work with another person - what's the point?' I'll answer with another question: how many times have you got to a good place with things working well, then made a few slight changes, at which point it all fell apart, but then you were left wondering exactly what you had changed in order to cause the breakage.
Git (and most CVS tools) make it trivial to diff against the last known version, or any version that was seen in the past. It will tell you exactly which files were changed and how, and you can undo them individually or just go back and try again with a simple command.
Most all CVS systems deal equally well with anything that is ASCII text based: for example, I also version my BOM's along side code, as Eagle exports TXT based BOM's. It means I can also see how BOM's have changed over time.
They can also work with binaries: all of my Eagle projects are Git projects as well, so it means that I can version my schematics and layouts with tags as well. I very often will version an Eagle project right after I get done drawing a schematic but before I start a board. I also can maintain multiple versions of a board layout in parallel with Git, as I can so an SMD layout in one branch, and a PTH layout in another (for initial samples or debugging). Then, all I have to do is switch to the appropriate branch before starting Eagle, and all of my edits are in the right place.
So I encourage everyone reading to start using these tools: they will make you better programmers, and more productive over the long haul. And then will save much hair-tearing if you mess something up, as you can go back to a sane state very quickly. And if you couple it with an online service like GitHub, if your 7-year old drops your laptop, you can pull your projects to another system in a few seconds.
For those who aren't using source-control software in their everyday lives, it is one of the most immensely useful tools in the programmers arsenal. For me personally, I am a big fan of Git (and more specifically Github), as it solves multiple problems without much up-front investment.
Here are just a few of the benefits:
1) A method of backing up your projects: services like GitHub allow you to centralize versions of your software, which means you have a backup performed every time time you 'git push'. It also means it is trivially easy to upload and version all of your projects, then seamlessly pull those bits back down to other systems, each of which can be points of development.
2) A centralized way of tracking bugs: GitHub provides bug tracking services as well, where you can write about things you think aren't working correctly, and then associate these ideas to code changes. The issues can be 'todo's as well, to remind yourself of work that you need to do.
3) A seamless way of collaborating with other people: CVS's allow you to work with multiple people and merge their changes in with yours on a line-by-line basis.
4) A way of tracking 'known-good' configurations of code: this is one of the most useful features. If you arrive at a point where things are working well, you can tag a release, and always give you an easy way to go back to that point with a few simple commands.
5) A way of testing ideas without easy ways of un-doing them: this is also very useful: you can create a branch in Git in about 100 ms. You can test out an idea, and if it bombs, you can undue it back to a known state without error or ambiguity. If you idea works out, you can merge your experiment back into a known good branch of development, and have access to all points in-between.
I know some reading are thinking "I'll never work with another person - what's the point?' I'll answer with another question: how many times have you got to a good place with things working well, then made a few slight changes, at which point it all fell apart, but then you were left wondering exactly what you had changed in order to cause the breakage.
Git (and most CVS tools) make it trivial to diff against the last known version, or any version that was seen in the past. It will tell you exactly which files were changed and how, and you can undo them individually or just go back and try again with a simple command.
Most all CVS systems deal equally well with anything that is ASCII text based: for example, I also version my BOM's along side code, as Eagle exports TXT based BOM's. It means I can also see how BOM's have changed over time.
They can also work with binaries: all of my Eagle projects are Git projects as well, so it means that I can version my schematics and layouts with tags as well. I very often will version an Eagle project right after I get done drawing a schematic but before I start a board. I also can maintain multiple versions of a board layout in parallel with Git, as I can so an SMD layout in one branch, and a PTH layout in another (for initial samples or debugging). Then, all I have to do is switch to the appropriate branch before starting Eagle, and all of my edits are in the right place.
So I encourage everyone reading to start using these tools: they will make you better programmers, and more productive over the long haul. And then will save much hair-tearing if you mess something up, as you can go back to a sane state very quickly. And if you couple it with an online service like GitHub, if your 7-year old drops your laptop, you can pull your projects to another system in a few seconds.