Git

From OLPC
Jump to navigation Jump to search
This command is run in the standard Linux environment via the Terminal Activity. The GUI will probably not integrate comfortably with the XO Laptop's Sugar environment. Your user experience may vary considerably depending on the established environment and the other programs running on the laptop, may need re-installation after an OS Update. See the Linux software category for other commands.


About Git

Git is a revision control system (sometimes called a "version control system") for programmers used to track and manage changes to code and other data. Git is a decentralized system, with no "master" tree, and was originally written by Linus Torvalds to manage the Linux kernel sources. Git is used by many open source projects to manage development among programmers, and is used by the OLPC as its preferred version control system.

A short overview of a version control system

The version control system provides the detailed information on the source code. Using the repository, a user can:

  • Browse or download the current source code and data files .
  • Browse or download any version that was ever put in the repository.
  • See the comments explaining why changes were made.
  • See what changed betweens versions.
  • See which versions were picked for which releases, also known as 'heads'.

Users that have write access (or commit access) to the repository can do more:

  • Add new files to a project.
  • Add changes back into the repository, creating new versions.
  • Edit comments to explain why changes were made.
  • Merge changes made from two different people into a single version.
  • Create a separate branch of development to keep changes separate from others.

For more information about version control systems, see Wikipedia

Installation

You will generally install Git on whatever machines you are currently using for development and testing.

First, you'll need to fetch and install Git on your machine. The tarball with the latest version is always available at the git site, and you might find your distribution provides packages. You can expect that the OLPC servers will always be running close to the latest version of the git tools.

In OpenSuSE
yast --install git
In RedHat & XO Laptop
sudo yum install git
In Ubuntu 7/Feisty and Debian Etch (and presumably earlier) "git" still refers to gitfm, an unrelated tool. To fix in feisty:
sudo apt-get install git-core cogito 
sudo update-alternatives --config git

Using Git for the OLPC Project

The OLPC Git Repository

Most projects maintain their source code in the git repository at http://dev.laptop.org/git. The allows anyone to browse and download source code for the sugar operating system, the sugar shell, activities typically installed on the XO, and activities under development. Browsing through the source code is a great way of introducing yourself to programming in general, and for programming the XO. While most projects are written in Python, some are written in other languages such as Squeak or C.

As an example, let's look at the Memorize activity. This activity is bundled with the G1G1 laptops and is reasonably complete and mature. That is, it has few bugs, most of its features, and has most of its documentation. The Git repository is only one piece of the activity's information on the OLPC websites. Here is the Memorize activity's information:

Project names are not the same as activity names. For example, the Git project name is memorygame while the activity name is Memorize.

Browsing Source Online

To browse source online, start by going to the main repository page at http://dev.laptop.org/git.

Find a project on the list. Each project has four links:

  • Summary: See a short description of the project, the owner, recent changes, and the heads.
  • Short log: One line descriptions of changes.
  • Log: Longer descriptions of the changes. Most developers only enter one line per 'commit'.
  • Tree: The directory tree of the most recent version.

Click on 'tree'. You can browse into subdirectories by clicking on the links. Download individual source code files by clicking on raw, and view the source code in your browser by clicking on blob.

Downloading Source Code

Anyone can get a project's code. Use the "git clone" :

git-clone git://dev.laptop.org/<project-directory> 

You can enter it as "git clone" or "git-clone". For instance:

git-clone git://dev.laptop.org/projects/memorygame
    OR 
git clone git://dev.laptop.org/projects/memorygame

Note that projects are in random directories of the Git repository, including 'activities', 'projects', the root directory, and individual user accounts. Check the repository at http://dev.laptop.org/git for the correct spelling and capitalization of each project.

For example, the EPals activity is listed as "activites/epals". To clone (or download a copy of the source code) for the EPals activity, use:

git-clone git://dev.laptop.org/activities/epals

While the 'sugar' project is in the root directory:

git-clone git://dev.laptop.org/sugar

When you cannot find a project in the repository, remember that the project name and the activity name are not always related. Search for the project in the wiki. Even projects that do not host their code in the OLPC Git Repository will provide information on their wiki page.

Git for Developers of New Projects

You can get a project of yours hosted in our Git instance, see Project hosting. In general, you apply after you have some amount of running code hosted on another site or source code control system. You will need to provide a public key in your application.

Some sites of interest at dev.laptop.org

OLPC GIT: http://dev.laptop.org/  (for tracking and submitting bugs and tasks)

    Wiki: http://dev.laptop.org/wiki
 Roadmap: http://dev.laptop.org/roadmap
 Sources: http://dev.laptop.org/browser
 Tickets: http://dev.laptop.org/query

Git Commands for updating code

You can update the code as follows:

git-pull (To update the code)
git-status -a  (To see the status of your commits)
git-checkout -- (To undo your commits)
git checkout HEAD -- filename (To replace filename with the one at HEAD)

See also