Introduction to Git –- Fall 2023
In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections of information.
–- Wikipedia
… systems responsible for managing changes …
In an ideal world, things develop linearly:
digraph {
rankdir=LR
Mon[label="Monday's\n improvements"] [fixedsize=circle]
Tue[label="Tuesday's\n improvements"] [fixedsize=circle]
Wed[label="Wednesday's\n improvements"] [fixedsize=circle]
Mon -> Tue
Tue -> Wed
}
In the real world, things develop non-linearly:
digraph {
rankdir=LR
Mon[label="Monday's\n improvements"] [fixedsize=circle]
Tue[label="Tuesday's\n mistakes"] [fixedsize=circle]
Wed[label="Wednesday's\n corrections"] [fixedsize=circle]
Mon -> Tue
Tue -> Wed
}
Sometimes, it is easier to simply backtrack to an earlier version…
digraph {
rankdir=LR
Mon[label="Monday's\n improvements"] [fixedsize=circle]
Tue[label="Tuesday's\n mistakes"] [fixedsize=circle]
Wed[label="Wednesday's\n improvements"] [fixedsize=circle]
Mon -> Tue
Mon -> Wed
}
Overall, difficult to manage!
digraph {
rankdir=LR
subgraph cluster1 {
t1a [label="Component A\n improvement"] [fixedsize=circle]
t1b [label="Component B\n mistake"] [fixedsize=circle]
t1c [label="Component C\n improvement"] [fixedsize=circle]
label="Mondays's changes"
}
subgraph cluster2 {
t2a [label="Component A\n improvement"] [fixedsize=circle]
t2b [label="Component B\n correction"] [fixedsize=circle]
t2c [label="Component C\n mistake"] [fixedsize=circle]
label="Tuesday's changes"
}
subgraph cluster3 {
t3a [label="Component A\n mistake"] [fixedsize=circle]
t3b [label="Component B\n improvement"] [fixedsize=circle]
t3c [label="Component C\n correction"] [fixedsize=circle]
label="Wednesday's changes"
}
t1a -> t2a
t1b -> t2b
t1c -> t2c
t2a -> t3a
t2b -> t3b
t2c -> t3c
}
This compounds the problems!
Version control systems
What are the practical use cases for VCS?