Git

From LinuxMIPS
Revision as of 16:55, 25 November 2005 by Fbuihuu (talk | contribs) (Checking out a tagged release with git)
Jump to: navigation, search

These days the Linux world has largely switched to GIT as it's SCM. Git is a fairly low-level thing, more the backing store of an SCM - or plumbing in Linus's words - than a full-blown SCM but it's growing up very quickly. Linux-mips.org has used CVS since 1997 and so naturally is a little more conservative in switching to a new tools as we don't want to drop all the history that's hidden in these trees. However git is currently being experimented with and it is expected to eventually replace CVS for at least all kernel work.

GIT's rapid development has meant there is little high-level documentation, so here's a local page on WhatIsGit.

Accessing GIT repositories

The GIT repositories can be accessed by rsync://ftp.linux-mips.org/git or via http://www.linux-mips.org/pub/scm/. The rsync protocol is recommended for initial cloning of repositories while for later git fetch or git pull via http or the git protocol is preferable. Here are two example commands using the linux.git repository; you can substitute the name of another repository (see further below) for linux.git in the examples.

Cloning a repository

   git clone rsync://ftp.linux-mips.org/git/linux.git linux.git

Updating a repository

From the top directory of your local repository (that is, the directory which contains the .git subdirectory) run the following command:

   git pull http://www.linux-mips.org/pub/scm/linux.git

or alternatively if you want to use the git protocol:

   git pull git://ftp.linux-mips.org/pub/scm/linux.git

While the git protocol is more effective it is using port 9418 which paranoid firewall admins may have blocked, so there is http as fallback.

Status of CVS to GIT conversion

Repository Branch Status
arcboot Converted; not tested yet.
bugs Converted; not tested yet.
dvhtool Converted; not tested yet.
faq Converted; not tested yet.
gcc Converted; not tested yet.
gdb Converted; not tested yet.
libc Converted; not tested yet.
libc-devel Converted; not tested yet.
linux DECstation Dropped the branch
linux_2_2 OK
linux_2_4 OK
linux-mips OK
master OK
test11-cp7000 Dropped the branch
linux-2.2 OK
malta/linux Converted; not tested yet.
linux-vr/fbctl Converted; not tested yet.
linux-vr/hfload Converted; not tested yet.
linux-vr/linux Converted; not tested yet.
linux-vr/mkromdisk Converted; not tested yet.
linux-vr/vrboot Converted; not tested yet.
linux-vr/www Converted; not tested yet.
malta Converted; not tested yet.
modutils Converted; not tested yet.
rh_install Converted; not tested yet.
strace Converted; not tested yet.
XFree Converted; not tested yet.

At this time only the linux.git repository is in production use. For the time beeing arcboot is still being maintained via CVS; all other archives are only historical.

A note on branches in the kernel repository linux.git

Following the recent changes in the Linux development model merges with Linus are now happening much more frequently and the difference between the git archives of Linus and linux-mips.org has become much smaller and is expected to shrink further. One side effect of this is that the heads of the branches will no pick up any kind of problem much faster than it used to be in the past. It therefore is suggested to people that don't want to fight bugs on this front to only use the tagged releases. This affects primarily the master branch on which the active 2.6 development is happening and too a lesser degree the linux-2.4 branch.

Checking out a tagged release with git

Bare git doesn't make this as easy as you'd like it to. So while git-checkout does support checkout the HEAD of a branch, tags are unfortunately not supported. But first, this is how to list the available tags:

[ralf@dea linux-git]$ ls .git/refs/tags
linux-1.1.68             linux-2.4.11       linux-2.5.53
[...]
linux-2.4.10             linux-2.6.14-rc1   linux-2.6.14
[ralf@dea linux-git]$

The actual list of tags is much longer. Okay, so let's assume we want to checkout the linux-2.6.14 release:

[ralf@dea linux-git]$ git reset --hard $(cat .git/refs/tags/linux-2.6.14)

This should only take a few seconds.

Git pull and tags

Git considers tags something local. That means git clone will replicate all the tags but git pull will not pull new tags. Git-push however can be convinced to push tags by either explicitly listing then on the command line or the --all option.

Tags converted from the CVS tree

When converting the kernel CVS repository to git the tags were recreated by a script, not through conversion. As such it is possible that the CVS tag and it's equivalent git tag refer to slightly different versions; we haven't verified that. Also, CVS didn't allow the "." character to be part of a tag name, so CVS tags used to look like linux_2_6_12 - counterintuitive. Git doesn't have such restrictions and so the tags name has become linux-2.6.12.

Gitweb

Gitweb allows simple browsing of git repositories in a web browser. Git web is available at http://www.linux-mips.org/git.

External links