Atlas of Lie Groups and Representations

More information on google code and git

The atlas software is distributed via google code, using the git version control system. Here is the atlas code home page.

If all you want to do is download the software the main software download page is probably all you need. Here are instructions on installing the atlas software.

Git References

The main git site, with links to lots of other documenation.
Git Reference
Some handy git tips
git and google code
The O'Reilly book Version Control with Git, by John Loeliger is quite useful.

The software is maintained in a central repository (we're using
git differs from cvs in several critical respects.

  • When you check out the software from the repository, you get a complete copy of the repository, including all revisions, branches, tagging, etc.
  • cvs changes are per file, git works with the entire directory. When you do a commit in git, it takes a snapshot of the entire directory, and stores a commit object which is referenced by a 40 digit hex number (which is a hash of the contents). This object has a complete record of the directory (cvs, and subversion, just keep a record of diffs). See more on the git objects below.

There is a lot of browsing you can do at the Atlas page at google (click on Source), including looking at different branches and tags.

Primary git commands

To download the software:

%git clone

This downloads the software. One key difference between git and other version control systems like cvs and subversion, is that git downloads the entire repository, including all branches. Once you have done git clone, most other commands operate locally.

Everything is done from within the atlasofliegroups directory, using meta-information in the .git subdirectory. To update the software

%git pull origin

will update your local copy of the software with the any changes on


There are several branches (versions) of the atlas code. The main branch is named master. Most users never need any other branch.

%git branch

will show you which branch you are on (the default is master).

%git branch -r

lists the remote branches (on The primary are master, unitarity, and latest.

%git checkout unitarity  switches you to the unitarity branch, and
%git checkout master   switches you back again.

Other helpful commands

%git status

gives the status of your local repository, compared to the remote one.

%git log
%git log --oneline

give a lot of information about the repository (--oneline for more succint output).


launches a graphical git browser.

%git tag

shows a list of tages, and

%git checkout version_0_4_4

checks out the code with this tag. Many commands have help options:

%git --help
%git tag --help

give short git help, longer git help, and help on tagging. Some commands have dry-run versions:

%git pull origin --dry-run

says what the command will do, but doesn't do anything.

Getting unstuck

If all you ever do is pull code, from a single branch, hopefully you won't run in to trouble.

Suppose this happens:

%git pull origin master
file test.rx not up to date, cannot merge

and the update from google will not execute (at all). Do this:

%git stash
%git pull origin master

to stash your local changes, and execute the update from google. The do

%git stash pop

to bring back your modified files. There are other variants of git stash, see the references.

If you are not making changes to the code, but have a problem, it is always easy to start from scratch. Delete your current directory (don't forget to delete the invisible .git directory), or start a new directory, and start over with a fresh git clone.

More on git objects

This is a quick overview. See
The Git Object Model for more detail.

The main git object is a commit.

A commit contains a tree, which is a snapshot of a directory, together with some meta-information.
Here are some commands for working with git objects:

%git log
%git log --oneline [show list of commits]

You can refer to each commit by the first few letters of the hex name. For example:

%git log commit b1c0fddf14858da715379b1e2e59ab75c50cb696
Author: Jeffrey Adams
Date: Thu Nov 17 09:44:24 2011 -0500

Updated version to 0.4.6 in version.h

%git show b1c0 [information about the commit b1c0fddf14858da715379b1e2e59ab75c50cb696]
commit b1c0fddf14858da715379b1e2e59ab75c50cb696
Author: Jeffrey Adams
Date: Thu Nov 17 09:44:24 2011 -0500

Updated version to 0.4.6 in version.h ...
%git ls-tree b1c0 [information about the tree underlying this commit]
040000 tree 1cb381b8c7f24c1caea6128f9c35c7a751d4102f error
040000 tree e8ef0ed891294c6fd773c0162a2b950b7dc5aaaf gkmod
040000 tree d8eb4b0e05bba5db576d42eb7209f565e3f0b936 interface

Tagging and Branches

Tags are (mainly) a way to give user-friendly names to commits.

%git tag [print list of tags]
%git tag -n [print list of tags with more information]

Here is how I created the version_0_4_6 tag:

%git log --oneline
b1c0fdd Updated version to 0.4.6 in version.h
bbca5d3 deleted README-git
bb64257 edited README-git
%git tag version_0_4_6 b1c0f
%git push --tags [to make the changes on the server]