It is week one of the pre-course at Makers Academy and I am working through our Git and Github tutorials.
One of the learning objectives is for us to be able to explain how git is a version control system. I thought I would delight the whole two readers I get to my blog (thanks mum and dad), by answering that question here:
What is version control?
Version control systems are ones which record changes made to files or a group of files in a directory.
YOU choose when to make these bookmarked changes. Once you have done this you can always go back to that version of the file / files.
This is useful on an individual or group basis.
As an individual it allows you to track your changes. You can compare a file against it’s earlier version so see where you may have gone wrong or how your mind was working when you made improvements.
It is very useful if you are worried a change you want to make may break something and cause it not to run the way you wanted. – Which is something which happens a lot when coding!
It allows effective collaboration!
It means that you can work with someone else at the same time on the same project but (here is the ground breaking part) on your own computer or work station!!
What is so great about being able to work from two computers on the same project… at the same time …without having to worry about replicating the work-load or clashes?
I hear you ask … :-/ (and by you I mean mum .. as I know dad has drifted off by now)
This is incredible for two reasons!
Lean Development – like an efficient ford assembly line people can work on the exact same project at the same time without having to wait for someone else to complete their part of the project.
It is like building a house by building the roof and the floor at the same time, even though there are no walls!
This also means that a mistake in one doesn’t delay or immediately effective another part. The mistake can be more efficiently identified and solved!
See told you it was mind blowing …
Better still you can both work on the roof together .. in fact everyone can work on the roof at the same time! Yay…Here is another picture of a house to celebrate …
To do it like this you start with a master copy which you pull to your computer. As you edit and add on parts you update it in a centralised system. Before adding this to the ‘master branch’ everyone on the project can check they are happy. If someone else has edited the same bit but differently you can quickly identify this and merge your changes quicker.
Think of this as two people editing an article, both correcting gramma and spelling but both doing it on the original document. When they bring these together you would have to check both documents against the original individually and it could lead to a waste of time as both editors are making the same spelling corrections.
An additional note to make here is git is NOT a centralised version control system. Versions are not held on one central server or system .. all versions are equal. The client computer (thats mine and yours) doesn’t just look at snapshots of files; they fully mirror the repositories!! This is a flat non-hierarchical system which allows you to collaborate as an equal !!
So there you have it, my explanation of how git is a (de-centralised) version control system. Thank you for reading if you are still here. I feel like here is a good time to add the disclaimer that my parents don’t even read this blog…. 🙁