Skip to content

Instantly share code, notes, and snippets.

@mindjiver
Last active December 19, 2015 07:59
Show Gist options
  • Save mindjiver/5922618 to your computer and use it in GitHub Desktop.
Save mindjiver/5922618 to your computer and use it in GitHub Desktop.
Git from scratch. How to create a git repository and a first commit by only using plumbing commands.
$ mkdir git-from-scratch
$ cd git-from-scratch
$ mkdir -p .git/refs/{heads,tags}
$ mkdir -p .git/objects/
$ echo "ref: refs/heads/master" >> .git/HEAD
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
$ echo "Hello, this is my first commit" | git hash-object -w --stdin
a93cc606fd7975c75562182a67bddd55bbff566f
$ find .git
.git
.git/HEAD
.git/objects
.git/objects/a9
.git/objects/a9/3cc606fd7975c75562182a67bddd55bbff566f
.git/refs
.git/refs/heads
.git/refs/tags
$ git write-tree 100644 blob a93cc606fd7975c75562182a67bddd55bbff566f my_first_git_file.txt
4b825dc642cb6eb9a060e54bf8d69288fbee4904
$ find .git
.git
.git/HEAD
.git/index
.git/objects
.git/objects/4b
.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
.git/objects/a9
.git/objects/a9/3cc606fd7975c75562182a67bddd55bbff566f
.git/refs
.git/refs/heads
.git/refs/tags
$ git commit-tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 -m "initial commit."
48139d14e5cd5314b0c66badffe11ade1992770e
$ find .git
.git
.git/HEAD
.git/index
.git/objects
.git/objects/4b
.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
.git/objects/79
.git/objects/79/57b464814b97dd14c1f2a0b82fb930433ca9b3
.git/objects/a9
.git/objects/a9/3cc606fd7975c75562182a67bddd55bbff566f
.git/refs
.git/refs/heads
.git/refs/tags
$ git update-ref refs/heads/master 48139d14e5cd5314b0c66badffe11ade1992770e
$ git log
commit 48139d14e5cd5314b0c66badffe11ade1992770e
Author: Peter Jönsson <peter.joensson@gmail.com>
Date: Wed Jul 3 22:38:30 2013 +0200
initial commit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment