Supported Capabilities
======================

Here is a non-comprehensive table of git commands and features whose equivalent
is supported by go-git.

| Feature                               | Status | Notes |
|---------------------------------------|--------|-------|
| **config**                            |
| config                                | ✔ | Reading and modifying per-repository configuration (`.git/config`) is supported. Global configuration (`$HOME/.gitconfig`) is not. |
| **getting and creating repositories** |
| init                                  | ✔ | Plain init and `--bare` are supported. Flags `--template`, `--separate-git-dir` and `--shared` are not. |
| clone                                 | ✔ | Plain clone and equivalents to `--progress`,  `--single-branch`, `--depth`, `--origin`, `--recurse-submodules` are supported. Others are not. |
| **basic snapshotting** |
| add                                   | ✔ | Plain add is supported. Any other flags aren't supported |
| status                                | ✔ |
| commit                                | ✔ |
| reset                                 | ✔ |
| rm                                    | ✔ |
| mv                                    | ✔ |
| **branching and merging** |
| branch                                | ✔ |
| checkout                              | ✔ | Basic usages of checkout are supported. |
| merge                                 | ✖ |
| mergetool                             | ✖ |
| stash                                 | ✖ |
| tag                                   | ✔ |
| **sharing and updating projects** |
| fetch                                 | ✔ |
| pull                                  | ✔ | Only supports merges where the merge can be resolved as a fast-forward. |
| push                                  | ✔ |
| remote                                | ✔ |
| submodule                             | ✔ |
| **inspection and comparison** |
| show                                  | ✔ |
| log                                   | ✔ |
| shortlog                              | (see log) |
| describe                              | |
| **patching** |
| apply                                 | ✖ |
| cherry-pick                           | ✖ |
| diff                                  | ✔ | Patch object with UnifiedDiff output representation |
| rebase                                | ✖ |
| revert                                | ✖ |
| **debugging** |
| bisect                                | ✖ |
| blame                                 | ✔ |
| grep                                  | ✔ |
| **email** ||
| am                                    | ✖ |
| apply                                 | ✖ |
| format-patch                          | ✖ |
| send-email                            | ✖ |
| request-pull                          | ✖ |
| **external systems** |
| svn                                   | ✖ |
| fast-import                           | ✖ |
| **administration** |
| clean                                 | ✔ |
| gc                                    | ✖ |
| fsck                                  | ✖ |
| reflog                                | ✖ |
| filter-branch                         | ✖ |
| instaweb                              | ✖ |
| archive                               | ✖ |
| bundle                                | ✖ |
| prune                                 | ✖ |
| repack                                | ✖ |
| **server admin** |
| daemon                                | |
| update-server-info                    | |
| **advanced** |
| notes                                 | ✖ |
| replace                               | ✖ |
| worktree                              | ✖ |
| annotate                              | (see blame) |
| **gpg** |
| git-verify-commit                     | ✔ |
| git-verify-tag                        | ✔ |
| **plumbing commands** |
| cat-file                              | ✔ |
| check-ignore                          | |
| commit-tree                           | |
| count-objects                         | |
| diff-index                            | |
| for-each-ref                          | ✔ |
| hash-object                           | ✔ |
| ls-files                              | ✔ |
| merge-base                            | ✔ | Calculates the merge-base only between two commits, and supports `--independent` and `--is-ancestor` modifiers; Does not support `--fork-point` nor `--octopus` modifiers. |
| read-tree                             | |
| rev-list                              | ✔ |
| rev-parse                             | |
| show-ref                              | ✔ |
| symbolic-ref                          | ✔ |
| update-index                          | |
| update-ref                            | |
| verify-pack                           | |
| write-tree                            | |
| **protocols** |
| http(s):// (dumb)                     | ✖ |
| http(s):// (smart)                    | ✔ |
| git://                                | ✔ |
| ssh://                                | ✔ |
| file://                               | partial | Warning: this is not pure Golang. This shells out to the `git` binary. |
| custom                                | ✔ |
| **other features** |
| gitignore                             | ✔ |
| gitattributes                         | ✖ |
| index version                         | |
| packfile version                      | |
| push-certs                            | ✖ |
