~sircmpwn/shit

ref: dc3799706ada630669f3da8edb550e51ea09b683 shit/README.md -rw-r--r-- 1.4 KiB
dc379970Drew DeVault Add usage example to README.md 8 months ago

#shit

shit == Shell Git

This is an implementation of Git using (almost) entirely POSIX shell.

Caveats:

  • There are a couple of GNU coreutilsisms, which are marked with "XXX: GNUism" throughout. They have been tested on BusyBox as well.
  • A native zlib implementation is required: zlib
  • Why the fuck would you use this

#Status

Enough plumbing commands are written to make this write the initial commit with itself, which is how the initial commit was written. Huzzah.

#How to use

  1. Don't

Okay, fine. Because only plumbing commands are implemented, you have to live with a garbage manual process. Do something like this:

git clone https://git.sr.ht/~sircmpwn/shit
mkdir my-project
cd my-project
../shit/init
# Write some code

So we'll assume shit is at ../shit.

To create a new index from all of your files (note, subdirectories aren't working yet):

../shit/update-index *

Then to create a tree object from these:

../shit/write-tree | ./hash-object -t tree -w

This will print the tree ID to stdout. Use that to make a commit:

export GIT_AUTHOR_NAME="Your Name"
export GIT_AUTHOR_EMAIL="you@example.org"
../shit/commit-tree <tree sha> | ./hash-object -t commit -w

This will print out the new commit's SHA. To update master to point to this new commit:

echo <commit sha> > .git/refs/heads/master

Tada.