Version control (a.k.a. version management is concerned with the management of change in the software artifacts being developed.
The issues addressed by version control are:
The issues addressed by version control are:
History
The issues addressed by version control are:
History
How has the software changed since date-or-version-number? Who made those changes? Why were they made? Can we go back?
The issues addressed by version control are:
History
How has the software changed since date-or-version-number? Who made those changes? Why were they made? Can we go back?
Exploration
The issues addressed by version control are:
History
How has the software changed since date-or-version-number? Who made those changes? Why were they made? Can we go back?
Exploration
The issues addressed by version control are:
History
How has the software changed since date-or-version-number? Who made those changes? Why were they made? Can we go back?
Exploration
Collaboration
The issues addressed by version control are:
History
How has the software changed since date-or-version-number? Who made those changes? Why were they made? Can we go back?
Exploration
Collaboration
Local version control systems manage history by setting aside directories on the same file system where the software under control is housed.
Centralized version control systems keep the system history at a centralized location accessible via the network.
Developers check out a copy of the current (or a desired older) version of the software onto their own machines.
Distributed version control systems allow developers to keep the full system history on their own machines.
git, Mercurial
VC (Version Control) systems keep code in a repository.
The primary operations of a VC repository are
Each commit results in a new revision (version) of the code:
Early VC systems made a big deal about only keeping “diffs” of the changes instead of entire copies of the differnet file versions.
That probably matters less now, but modern VC systems still like to describe each version in temrs of “diffs” from the prior one.
We can start a branch to explore our idea while others continue work on the main trunk.
If the idea in the branch does not pay off, the branch can simply be abandoned.
If you decide to adopt the changes in the branch, you can elect to merge it back into the trunk.
Over time, a long-running branch can get so far out of sync with changes being made to the trunk that the final merge becomes difficult or even impossible.
Early VC systems managed collaboration via locking
This approach was cumbersome at best.
Modern VC systems inspect a proposed commit from a checked out revision rev to see if it alters any files that have changed in the repository since rev was checked out.
Because different branches are often edited in parallel, conflicts are most often detected when attempting to merge branches.
Popularly known as merge hell
In early VC systems, this was a powerful disincentive to using branches.
In modern distributed VC systems, branches are unavoidable – we’re swimming in branches
Software Forges provide a collection of project management tools for software development.
Examples include github, gitlab
Usually built around a service of hosting version control repositories.
Forges differ from artifact repositories (e.g., Maven Central & JCenter) in their emphasis on