Skip to content
A Pure Go Git Implementation
Go Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd More git fsck tests (#247) Apr 19, 2019
git Fix bug where git rev-list could return the same object multiple tim… Aug 1, 2019
issues Implement "git reset -- pathspec" and "git ls-tree" Dec 30, 2017
official-git Fix bug where getting objects for a tree always tried to get empty Sh… Aug 1, 2019
zlib Replace io.Copy with TeeReader when indexing a packfile (#159) Oct 10, 2018
.gitignore Skip the long filename test from the basic suite (#61) Jul 21, 2018
.travis.yml Fetch a remote commit (#214) Mar 7, 2019 Clarify the mnemonics of the command and remove old references to go-… Jul 15, 2018
LICENSE Update Mar 7, 2019 Fetch a remote commit (#214) Mar 7, 2019 Add stubs with default behaviour for submodule and show-ref subcomman… ( Aug 21, 2018
main.go Add basic git fsck command (#242) Mar 24, 2019

travis ci (Note: Travis currently runs dgit against (a subset of) the git 2.10.0 test suite)

This repo contains a pure Go implementation of the command line git client.

Its primary purpose is to enable users of operating systems where Go is supported but the canonical git implementation is not (ie. Plan 9) to use git.



The main goal is to enable go get to work by doing a real checkout without any hacks such as downloading a .zip from GitHub and pretending it is a checkout. (This should be done, and any breakages with go get if you rename the binary from dgit to git and put it on your path should be reported as an issue.)

The secondary goal is to enable just enough of the git command line to allow simple development (ie. simple usages of git add/commit/push/status/diff/log.)

The third, stretch goal, is to have a complete command-line compatible implementation of git that can be used as a drop-in replacement for git.


The dgit tool is pronounced dee-git. The extra letter is there to distinguish it from the standard git implementation. The letter 'd' was chosen because it is on the home row of the keyboard, which makes it easier to type.

You can’t perform that action at this time.