Skip to content

frankrolf/git-for-type-designers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

Git for Type Designers

What is Version Control?

Version control is keeping snapshots of a project at arbitrary points in time. There are multiple options to consider for version control: The simplest approach is just duplicating and dating files, or adding version numbers, but that can get quite messy and confusing.

Version control is a very common workflow for anyone working with code, and those people use dedicated version control systems like Git. Some aspects of Git make is similar to a backup system like TimeMachine, but with much more actual control.

Any creative job on a computer could make use of version control, but type design especially is an ideal candidate for version control; since type designers work with UFO files.

The UFO file format is perfect for version control, since it is text-based. A UFO is basically just a folder with many little XML-files in it. A UFO file could theoretically be created and modified in a text editor. This opens the field of digital type design for version control tools normally used only by software developers.

The UFO format is the native file format for the Robofont font editor, but (of course) version control can be used with any other file format as well:
Glyphs uses its own, text-based .glyphs file format, which has the same human-readable qualities as a UFO file, and therefore can be compared (diffed) from one revision to the other.
FontLab Studio creates binary .vfb files, which only FontLab can understand. Those files can be stored in a Git repository for the purpose of creating backup data, but the capability for diffing is lost.

Glossary

If we imagine our whole project as a single drawing on paper, the mechanisms of version control (and Git) can easily be explained:

  • working directory: desk, the drawing is on it
  • repository: filing cabinet; contains previous copies of same drawing
  • stage: the hand while holding a copy of the drawing, ready to file
  • commit: the act of filing a copy of the latest drawing in the cabinet
  • remote: a 2nd filing cabinet of drawings in the attic
  • push: copy the contents of our filing cabinet (next to the desk) to the 2nd (attic) filing cabinet
  • pull: copy the latest drawings from the cabinet in the attic, and add them to the cabinet next to the desk.
  • fork: somebody makes a copy of the complete filing cabinet; or you make a copy of the filing cabinet in somebody else’s attic. A fork can transform into something totally different, or not continue its development at all.
  • pull request: Somebody has copied my whole cabinet, done some work on my drawing, and suggests that work might be interesting to me. I might accept or reject the suggestion.
  • clone: I don’t have a filing cabinet. Let’s get one from the store, where they have many.

Benefits of a Version Control System

  • snapshots of a whole project can be created whenever needed
  • frequent commit messages can create a project log
  • possibility for server-based backup

Version Control with Git adds the following aspects:

  • commits can be made even when offline (not dependent on server)
  • complete project history is available to anyone with access to the repository (e.g. a Github user)
  • there are popular platforms for storing and exploring repositories

About this Guide

A condensed version of this guide was first presented at the TypeLab of the Typographics conference in New York. For the sake of better presentability and easier updates, it has been moved to a Git repository itself.

This guide is in no way complete. There are many general guides on git out there, and this guide cannot possibly compete with any of them. Instead, this guide tries to focus on the simple aspects of Git which are needed by a type designer.

Many UI applications are available for Git. Those are likely to change, and this guide would have a hard time keeping up. Therefore, the focus is on the bare-bones terminal commands.

If you have never used a terminal before: don’t worry – it’s easy!

Using Git locally

Start a New Git Repository

Version Control can start at any point in your project. No matter if just starting out, or if you have worked on a project for years. In the root level of your project folder, simply type:

git init

This command will initialize a new repository; and make the current folder (and its subfolders) ready for version control with Git.

Add files to the Repository