For software developers, version control systems and configuration management tools such as Git and GitHub are essential assets at all levels of software development. By having a secure repository to store code with the assurance of an incorruptible “master” version, this configuration management tool is indeed a blessing. By providing access control, repository history, and most importantly, collaboration features such as bug tracking, feature requests, and task management tools, GitHub is a crucial tool for software developers. Thus whether working in a large team or working on small personal projects, being able to keep track of changes is critical in creating software systems.
Personally, I believe Git’s popularity is due to the popularity of GitHub. GitHub is a hosting platform for Git repositories where users are able to view open-source code, collaborate with other users, and serve as a safety net for testing new project features. Since most software development is done in teams, it is extremely important that team members have a central repository with an efficient method of implementing and testing experimental changes.
In my experiences utilizing version control systems, Git and GitHub have literally saved me. Before exposure to this cloud-based software platform, I resorted to creating local copies of files that varied depending on the machine used. Project files were transferred using USB flash drives, as files were stored in different locations. Over time, many versions appeared with some up-to-date while others were outdated. My former inefficient method of version control was complete chaos. In another instance while experimenting with the command line, I accidently used the “rm –rf [directory]” command and magically the whole project disappeared. Without a version control system in place, I had to restart from scratch. After embracing Git and GitHub, a simple pull from the cloud restored the damages the next time it happened.
In hindsight, I wish I had transitioned into a formal version control tool earlier as I eventually adopted Git and GitHub when I began working on a large embedded software project where workflow centered on pull requests and code reviews. Instead of having multiple versions of a file through incremental changes, it enabled me to work on experimental parts of the project without having to worry about breaking the entire project. With the ability to revert code and safely implement experimental features, this safety net operated analogous to “system restore” in Windows. In addition, by having access to GitHub, remote access to code was wonderful. Although there was an initial learning curve, Git and GitHub have served as valuable tools by enabling me to manage my own code and contribute to team projects.