CodeCrafters - Advanced programming challenges
source link: https://codecrafters.io/challenges/git
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Build your own Git
Early AccessIn this challenge, you’ll build a Git implementation that can initialize a
repository, create commits and clone a public repository from GitHub. Along
the way, you’ll learn about the .git
directory,
a few of Git’s “plumbing”
commands,
Git objects
(blobs, commits, trees etc.), Git’s transfer
protocols and
more.
This challenge has 7 stages.
Initialize the .git directory
In this stage, you’ll implement the git init
command. You’ll initialize
a git repository by creating a .git
directory and some files inside it.
Read a blob object
In this stage, you’ll read a blob from your git repository by fetching its
contents from the .git/objects
directory.
You’ll do this using the first of multiple “plumbing”
commands
we’ll encounter in this challenge: git
cat-file
.
Create a blob object
In the previous stage, we learnt how to read a blob. In this stage, we’ll
persist a blob by implementing the git hash-object
command.
Read a tree object
Now that we’ve learnt how to read/write blobs, let’s move onto our next
Git object: the tree. In
this stage, you’ll read a tree object from storage by implementing the
git ls-tree
command.
Write a tree object
In this stage, you’ll write a tree to git storage by implementing the git
write-tree
command.
To keep things simple, we won’t implement an index
, we’ll just assume
that all changes in the worktree are staged.
Create a commit
Let’s move on to the last git object we’ll be dealing with in this
challenge: the commit. In this stage, you’ll create a commit by
implementing the git commit-tree
command.
Clone a repository
This is the last stage of the challenge, and probably the hardest! In this stage, you’ll clone a public repository from GitHub. To do this, you’ll use one of Git’s Transfer protocols.
Interested in trying out the Build your own Git Challenge? Checkout our early access program!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK