The Goal :
To establish and maintain a GIT environment for the purpose of project collaboration, primarily in C.
What is GIT ?
GIT is a DRCS (Distributed Revision Control System) also commonly known as Distributed Version Control and or DVCS (Decentralized Version Control System).
GIT vs. Traditional CVS (Concurrent Versions System)
CVS:
First let's start off by exploring the traditional CVS setup:
CVS uses a client - server architecture, where-in current versions of the "project" and it's associated history of changes are stored on a server. Client(s)/developers then connect to the server in order to "check out" a complete copy of the project. Once checked out, the developer is able to modify this copy of the project, and once completed "check-in" their changes.
Multiple developers are able to collaborate/work on the same project concurrently (occuring simultaneously or side by side). However, there are limitations.
For example:
Developer A logs into the server and "check's out" an updated copy of the project file. Simultaneously, Developer B also logs into the server and "check's out" a copy of the project file also. Developer A is quick to make a few changes to the files and "commits" or "checks in" the changes to the server to update the server copy. Shortly after, Developer B has finalized changes to his/her local copy and attempts to "commit / check-in" his completed work.
However ! The server will only accept changes to the most updated files. Hence, because Developer A has already submitted changes and updated the server side files, the copy that has been modified by Developer B is no longer associated with the most "updated" version of the files. This is where manual intervention is required to accommodate the conflict in the CVS repository.
"Clients can also compare versions, request a complete history of
changes, or check out a historical snapshot of the project as of a given
date or as of a revision number."
GIT:
Git adopts a peer - to - peer style of version control as opposed to the client - server (centralized) approach. Therefore, each local copy stored on the machines of contributors to the "project" are all considered official respositories. Syncronization of the core files (Project) occur through a process of patch updates (change-sets) amongst developers/peers.
Must Read: http://git-scm.com/book/en/Getting-Started-About-Version-Control