Programming Fundamentals/Version Control

Overview
Version control, also known as revision control or source control, is the management of changes to documents, computer programs, large websites, and other collections of information. Each revision is associated with a timestamp and the person making the change. Revisions can be compared, restored, and with some types of files, merged.

Version control systems (VCS) most commonly run as stand-alone applications, but may also be embedded in various types of software, including integrated development environments (IDEs).

Discussion
Version control implements a systematic approach to recording and managing changes in files. At its simplest, version control involves taking ‘snapshots’ of your file at different stages. This snapshot records information about when the snapshot was made, and also about what changes occurred between different snapshots. This allows you to ‘rewind’ your file to an older version. From this basic aim of version control, a range of other possibilities is made available.

Version control allows you to:


 * Track developments and changes in your files
 * Record the changes you made to your file in a way that you will be able to understand later
 * Experiment with different versions of a file while maintaining the original version
 * ‘Merge’ two versions of a file and manage conflicts between versions
 * Revert changes, moving ‘backward’ through your history to previous versions of your file

Version control is particularly useful for facilitating collaboration. One of the original motivations behind version control systems was to allow different people to work on large projects together. Using version control to collaborate allows for a greater deal of flexibility and control than many other solutions. As an example, it would be possible for two people to work on a file at the same time and then merge these together. If there were ‘conflicts’ between the two versions, the version control system would allow you to see these conflicts and make an active decision about how to ‘merge’ these different versions into a new ‘third’ document. With this approach you would also retain a ‘history’ of the previous version should you wish to revert back to one of these later on.

Popular version control systems include:


 * Git
 * Helix VCS
 * Microsoft Team Foundation Server
 * Subversion

The remainder of this lesson focuses on using the Git version control system.

Git
Git is a version control system for tracking changes in computer files and coordinating work on those files among multiple people. It is primarily used for source code management in software development, but it can be used to keep track of changes in any set of files. Git was created by Linus Torvalds in 2005 for development of the Linux kernel and is free and open source software.

Free public git repositories are available from:


 * Bitbucket
 * GitHub

Initializes a new Git repository by creating a .git subdirectory in the current working directory:



Cloning an existing repository requires only a URL to the repository and the following git command:



Once cloned, repositories are synchronized by pushing and pulling changes. If the original source repository has been modified, the following git command is used to pull those changes to the local repository:



Local changes must be added and committed, and then pushed to the remote repository. Note the period (dot) at the end of the first command.



If there are conflicts between the local and remote repositories, the changes should be merged and then pushed. If necessary, local changes may be forced upon the remote server using:



Key Terms

 * branch
 * A separate working copy of files under version control which may be developed independently from the origin.


 * clone
 * Create a new repository containing the revisions from another repository.


 * commit
 * To write or merge the changes made in the working copy back to the repository.


 * merge
 * An operation in which two sets of changes are applied to a file or set of files.


 * push
 * Copy revisions from the current repository to a remote repository.


 * pull
 * Copy revisions from a remote repository to the current repository.


 * version control
 * The management of changes to documents, computer programs, large websites, and other collections of information.


 * version control systems
 * Most commonly run as stand-alone applications, but may also be embedded in various types of software, including integrated development environments