Example: The Linux Kernel Repository

As our first example, let’s clone a copy of the Linux kernel into /tmp/linux-2.6:

$ cd /tmp
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/
linux-2.6.git linux-2.6
Initialized empty Git repository in /tmp/linux-2.6/.git/
remote: Counting objects: 1177432, done.
remote: Compressing objects: 100% (189064/189064), done.
remote: Total 1177432 (delta 982454), reused 1176803 (delta 981879)
Receiving objects: 100% (1177432/1177432), 288.00 MiB | 406 KiB/s, done.
Resolving deltas: 100% (982454/982454), done.
Checking out files: 100% (27842/27842), done.

Now you have a copy of the entire Linux kernel and its development history, including many different tags and branches. You’ve started out on branch master, which is the latest version. Check out the v2.6.20 tag to get an older version:

$ cd linux-2.6
$ git checkout v2.6.20
Checking out files: 100% (33554/33554), done.
Note: moving to 'v2.6.20' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 62d0cfc... Linux 2.6.20

You can’t make changes to tags, and you haven’t created a local branch for your work, so Git has given you what it calls a disconnected HEAD. You can make commits, but they won’t be attached to any branch at all. That’s a bit dangerous, since it’s easy to lose track of your work that way. Let’s name our work so ...

Get Linux in a Nutshell, 6th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.