Lecture 39

Version control

MCS 275 Spring 2023
David Dumas

Lecture 39: Version control

Reminders and announcements:

  • Please complete your course evaluations.
  • Homework 14 (the last!) due Tuesday
  • Project 4 autograder is open
  • Projects requiring subdirectories should upload as a ZIP file

Version control

A system to:

  • Track changes
  • Document changes
  • Archive previous versions
  • Allow concurrent work

Version control systems (VCS) are also known as "source code management" (SCM).

Do you have this?


        project4.py
        project4draft.py
        project4-new.py
        project4-fixed.py
        project4-fixed-debug.py
        project4final.py
        project4final2.py
        project4final3.py
        project4final3 (1).py
        project4final_fixed-new2_revised\ (1).2022-04-27.py

A version control system (VCS) can help.

VCS

Some version control systems:

  • Historically important
    • 1970s: VAX/VMS filesystem has versioning
    • 1980s: Revision Control System (RCS)
    • 1990s: Concurrent Versions Systems (CVS)
    • 2000s: Subversion (SVN)
  • Widely used today
    • git
    • fossil, mercurial, ...

git

A VCS created by Linus Torvalds* in 2005.

Key properties:

  • Open source
  • Distributed
  • Nonlinear
  • Offline-friendly

* Finnish software developer and creator of Linux (1993).

Free to use; multiple implementations available.

Everyone has a copy of full history.

Supports parallel branches of development; no concept of a single "latest" version.

Many commands operate only on local files. Sync with others when ready.

Online services

There are some popular online services that will keep a copy of your repository on a server and/or let you interact with it in a browser.

These let you voluntarily centralize a purposely decentralized system.

Project

Repository

git init

Creates a git repository in the current directory.

Initially has empty history and doesn't track any files.

Data lifecycle

git add

Put current version of the file in a staging area.

git commit

Record staged changes in the database.

(These files will be tracked from now on.)

git log

Show recent commits and descriptions.

git status

Show summary of current situation.

Another commit

git push

Contact a remote repository and send it commits that are in our database but not theirs.

Fails if remote has changed since our last push!

git pull

Contact a remote repository and get commits from its database that are not yet in ours.

May trigger a merge if there have been changes to both local and remote since we last pulled.

Looking at history

git show COMMIT:FILE

will display file contents at any commit.

git clone

Make a local copy of an existing repository (from URL, directory, ...).

Not covered today

  • checkout – change which version is seen in the filesystem
  • reset – set files and/or DB back to a previous state
  • branch – name a series of commits

References

Revision history

  • 2022-04-29 Last year's lecture on this topic finalized
  • 2023-04-23 Updated for 2023