Helping you practise a new programming language
It is difficult to master a language by practising small examples from documentation page, systematic practice is needed.
We hope to provide a good project, Dit - the simple content tracker as Git does, to get you off the ground and master a new programming language as quickly as possible.
- From the love of Git and worship of Linus.
- "Do it together", hope more guys participate in.
- Learn more about Git.
- More practice when come to learning a new programming language.
Dit has already been implemented by below programming languages:
Dit only implements minimal repository as below:
.dit/
├── HEAD
├── index
├── objects
└── refs
└── heads
└── master
3 directories, 3 files
Dit is a content-addressable filesystem. It has three objects: blob, tree and commit. Each object is named with a 40-character checksum hash and stored under objects
folder. The subdirectory is named with the first 2 characters of the SHA-1, and the filename is the remaining 38 characters.
Stored content includes object type + size + \0 + actual content
, Dit compresses the content with zlib
.
Sha1 can be calculated like below:
# git
$ echo dit | git hash-object --stdin
8f2c96ad676d7423d2c319fffb78cfb87c78c3e2
# shasum
$ echo -e "blob 4\0dit" | shasum
8f2c96ad676d7423d2c319fffb78cfb87c78c3e2 -
# openssl sha1
$ echo -e "blob 4\0dit" | openssl sha1
(stdin)= 8f2c96ad676d7423d2c319fffb78cfb87c78c3e2
# go
fmt.Printf("%x\n", sha1.Sum([]byte("blob 4\x00dit\n")))
- blob
- tree
- commit
Dit is a mini Git, the basical dit must support the below commands:
Command | Description |
---|---|
dit init | Create an empty Dit repository or reinitialize an existing one |
dit add | Add file contents to the index |
dit commit | Record changes to the repository |
dit log | Show commit logs |
dit checkout | Restore working tree files |
dit diff | Show changes between commits, commit and working tree, etc |
dit status | Show the working tree status |
Dit only has master branch.
Everything in this repo is under MIT License unless otherwise specified.
MIT © zddhub