|
1 | | -Supported Capabilities |
2 | | -====================== |
3 | | - |
4 | | -Here is a non-comprehensive table of git commands and features whose equivalent |
5 | | -is supported by go-git. |
6 | | - |
7 | | -| Feature| Status| Notes| |
8 | | -|---------------------------------------|--------|-------| |
9 | | -|**config**| |
10 | | -| config| ✔| Reading and modifying per-repository configuration (`.git/config`) is supported. Global configuration (`$HOME/.gitconfig`) is not.| |
11 | | -|**getting and creating repositories**| |
12 | | -| init| ✔| Plain init and`--bare` are supported. Flags`--template`,`--separate-git-dir` and`--shared` are not.| |
13 | | -| clone| ✔| Plain clone and equivalents to`--progress`,`--single-branch`,`--depth`,`--origin`,`--recurse-submodules` are supported. Others are not.| |
14 | | -|**basic snapshotting**| |
15 | | -| add| ✔| Plain add is supported. Any other flags aren't supported| |
16 | | -| status| ✔| |
17 | | -| commit| ✔| |
18 | | -| reset| ✔| |
19 | | -| rm| ✔| |
20 | | -| mv| ✔| |
21 | | -|**branching and merging**| |
22 | | -| branch| ✔| |
23 | | -| checkout| ✔| Basic usages of checkout are supported.| |
24 | | -| merge| ✖| |
25 | | -| mergetool| ✖| |
26 | | -| stash| ✖| |
27 | | -| tag| ✔| |
28 | | -|**sharing and updating projects**| |
29 | | -| fetch| ✔| |
30 | | -| pull| ✔| Only supports merges where the merge can be resolved as a fast-forward.| |
31 | | -| push| ✔| |
32 | | -| remote| ✔| |
33 | | -| submodule| ✔| |
34 | | -|**inspection and comparison**| |
35 | | -| show| ✔| |
36 | | -| log| ✔| |
37 | | -| shortlog| (see log)| |
38 | | -| describe|| |
39 | | -|**patching**| |
40 | | -| apply| ✖| |
41 | | -| cherry-pick| ✖| |
42 | | -| diff| ✔| Patch object with UnifiedDiff output representation| |
43 | | -| rebase| ✖| |
44 | | -| revert| ✖| |
45 | | -|**debugging**| |
46 | | -| bisect| ✖| |
47 | | -| blame| ✔| |
48 | | -| grep| ✔| |
49 | | -|**email**|| |
50 | | -| am| ✖| |
51 | | -| apply| ✖| |
52 | | -| format-patch| ✖| |
53 | | -| send-email| ✖| |
54 | | -| request-pull| ✖| |
55 | | -|**external systems**| |
56 | | -| svn| ✖| |
57 | | -| fast-import| ✖| |
58 | | -|**administration**| |
59 | | -| clean| ✔| |
60 | | -| gc| ✖| |
61 | | -| fsck| ✖| |
62 | | -| reflog| ✖| |
63 | | -| filter-branch| ✖| |
64 | | -| instaweb| ✖| |
65 | | -| archive| ✖| |
66 | | -| bundle| ✖| |
67 | | -| prune| ✖| |
68 | | -| repack| ✖| |
69 | | -|**server admin**| |
70 | | -| daemon|| |
71 | | -| update-server-info|| |
72 | | -|**advanced**| |
73 | | -| notes| ✖| |
74 | | -| replace| ✖| |
75 | | -| worktree| ✖| |
76 | | -| annotate| (see blame)| |
77 | | -|**gpg**| |
78 | | -| git-verify-commit| ✔| |
79 | | -| git-verify-tag| ✔| |
80 | | -|**plumbing commands**| |
81 | | -| cat-file| ✔| |
82 | | -| check-ignore|| |
83 | | -| commit-tree|| |
84 | | -| count-objects|| |
85 | | -| diff-index|| |
86 | | -| for-each-ref| ✔| |
87 | | -| hash-object| ✔| |
88 | | -| ls-files| ✔| |
89 | | -| 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.| |
90 | | -| read-tree|| |
91 | | -| rev-list| ✔| |
92 | | -| rev-parse|| |
93 | | -| show-ref| ✔| |
94 | | -| symbolic-ref| ✔| |
95 | | -| update-index|| |
96 | | -| update-ref|| |
97 | | -| verify-pack|| |
98 | | -| write-tree|| |
99 | | -|**protocols**| |
100 | | -| http(s):// (dumb)| ✖| |
101 | | -| http(s):// (smart)| ✔| |
102 | | -| git://| ✔| |
103 | | -| ssh://| ✔| |
104 | | -| file://| partial| Warning: this is not pure Golang. This shells out to the`git` binary.| |
105 | | -| custom| ✔| |
106 | | -|**other features**| |
107 | | -| gitignore| ✔| |
108 | | -| gitattributes| ✖| |
109 | | -| index version|| |
110 | | -| packfile version|| |
111 | | -| push-certs| ✖| |
| 1 | +#Supported Features |
| 2 | + |
| 3 | +Here is a non-comprehensive table of git commands and features and their |
| 4 | +compatibility status with go-git. |
| 5 | + |
| 6 | +##Getting and creating repositories |
| 7 | + |
| 8 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 9 | +|---|---|---|---|---| |
| 10 | +|`init`|| ✅||| |
| 11 | +|`init`|`--bare`| ✅||| |
| 12 | +|`init`|`--template` <br/>`--separate-git-dir` <br/>`--shared`| ❌||| |
| 13 | +|`clone`|| ✅|| -[PlainClone](_examples/clone/main.go)| |
| 14 | +|`clone`| Authentication: <br/> - none <br/> - access token <br/> - username + password <br/> - ssh| ✅|| -[clone ssh](_examples/clone/auth/ssh/main.go) <br/> -[clone access token](_examples/clone/auth/basic/access_token/main.go) <br/> -[clone user + password](_examples/clone/auth/basic/username_password/main.go)| |
| 15 | +|`clone`|`--progress` <br/>`--single-branch` <br/>`--depth` <br/>`--origin` <br/>`--recurse-submodules`| ✅|| -[recurse submodules](_examples/clone/main.go) <br/> -[progress](_examples/progress/main.go)| |
| 16 | + |
| 17 | +##Basic snapshotting |
| 18 | + |
| 19 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 20 | +|---|---|---|---|---| |
| 21 | +|`add`|| ✅| Plain add is supported. Any other flags aren't supported|| |
| 22 | +|`status`|| ✅||| |
| 23 | +|`commit`|| ✅|| -[commit](_examples/commit/main.go)| |
| 24 | +|`reset`|| ✅||| |
| 25 | +|`rm`|| ✅||| |
| 26 | +|`mv`|| ✅||| |
| 27 | + |
| 28 | +##Branching and merging |
| 29 | + |
| 30 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 31 | +|---|---|---|---|---| |
| 32 | +|`branch`|| ✅|| -[branch](_examples/branch/main.go)| |
| 33 | +|`checkout`|| ✅| Basic usages of checkout are supported.| -[checkout](_examples/checkout/main.go)| |
| 34 | +|`merge`|| ❌||| |
| 35 | +|`mergetool`|| ❌||| |
| 36 | +|`stash`|| ❌||| |
| 37 | +|`tag`|| ✅|| -[tag](_examples/tag/main.go) <br/> -[tag create and push](_examples/tag-create-push/main.go)| |
| 38 | + |
| 39 | +##Sharing and updating projects |
| 40 | + |
| 41 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 42 | +|---|---|---|---|---| |
| 43 | +|`fetch`|| ✅||| |
| 44 | +|`pull`|| ✅| Only supports merges where the merge can be resolved as a fast-forward.| -[pull](_examples/pull/main.go)| |
| 45 | +|`push`|| ✅|| -[push](_examples/push/main.go)| |
| 46 | +|`remote`|| ✅|| -[remotes](_examples/remotes/main.go)| |
| 47 | +|`submodule`|| ✅|| -[submodule](_examples/submodule/main.go)| |
| 48 | +|`submodule`| deinit| ❌||| |
| 49 | + |
| 50 | +##Inspection and comparison |
| 51 | + |
| 52 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 53 | +|---|---|---|---|---| |
| 54 | +|`show`|| ✅||| |
| 55 | +|`log`|| ✅|| -[log](_examples/log/main.go)| |
| 56 | +|`shortlog`|| (see log)||| |
| 57 | +|`describe`|| ❌||| |
| 58 | + |
| 59 | +##Patching |
| 60 | + |
| 61 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 62 | +|---|---|---|---|---| |
| 63 | +|`apply`|| ❌||| |
| 64 | +|`cherry-pick`|| ❌||| |
| 65 | +|`diff`|| ✅| Patch object with UnifiedDiff output representation.|| |
| 66 | +|`rebase`|| ❌||| |
| 67 | +|`revert`|| ❌||| |
| 68 | + |
| 69 | +##Debugging |
| 70 | + |
| 71 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 72 | +|---|---|---|---|---| |
| 73 | +|`bisect`|| ❌||| |
| 74 | +|`blame`|| ✅|| -[blame](_examples/blame/main.go)| |
| 75 | +|`grep`|| ✅||| |
| 76 | + |
| 77 | +##Email |
| 78 | + |
| 79 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 80 | +|---|---|---|---|---| |
| 81 | +|`am`|| ❌||| |
| 82 | +|`apply`|| ❌||| |
| 83 | +|`format-patch`|| ❌||| |
| 84 | +|`send-email`|| ❌||| |
| 85 | +|`request-pull`|| ❌||| |
| 86 | + |
| 87 | +##External systems |
| 88 | + |
| 89 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 90 | +|---|---|---|---|---| |
| 91 | +|`svn`|| ❌||| |
| 92 | +|`fast-import`|| ❌||| |
| 93 | +|`lfs`|| ❌||| |
| 94 | + |
| 95 | +##Administration |
| 96 | + |
| 97 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 98 | +|---|---|---|---|---| |
| 99 | +|`clean`|| ✅||| |
| 100 | +|`gc`|| ❌||| |
| 101 | +|`fsck`|| ❌||| |
| 102 | +|`reflog`|| ❌||| |
| 103 | +|`filter-branch`|| ❌||| |
| 104 | +|`instaweb`|| ❌||| |
| 105 | +|`archive`|| ❌||| |
| 106 | +|`bundle`|| ❌||| |
| 107 | +|`prune`|| ❌||| |
| 108 | +|`repack`|| ❌||| |
| 109 | + |
| 110 | +##Server admin |
| 111 | + |
| 112 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 113 | +|---|---|---|---|---| |
| 114 | +|`daemon`|| ❌||| |
| 115 | +|`update-server-info`|| ❌||| |
| 116 | + |
| 117 | +##Advanced |
| 118 | + |
| 119 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 120 | +|---|---|---|---|---| |
| 121 | +|`notes`|| ❌||| |
| 122 | +|`replace`|| ❌||| |
| 123 | +|`worktree`|| ❌||| |
| 124 | +|`annotate`|| (see blame)||| |
| 125 | + |
| 126 | +##GPG |
| 127 | + |
| 128 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 129 | +|---|---|---|---|---| |
| 130 | +|`git-verify-commit`|| ✅||| |
| 131 | +|`git-verify-tag`|| ✅||| |
| 132 | + |
| 133 | +##Plumbing commands |
| 134 | + |
| 135 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 136 | +|---|---|---|---|---| |
| 137 | +|`cat-file`|| ✅||| |
| 138 | +|`check-ignore`|| ❌||| |
| 139 | +|`commit-tree`|| ❌||| |
| 140 | +|`count-objects`|| ❌||| |
| 141 | +|`diff-index`|| ❌||| |
| 142 | +|`for-each-ref`|| ✅||| |
| 143 | +|`hash-object`|| ✅||| |
| 144 | +|`ls-files`|| ✅||| |
| 145 | +|`ls-remote`|| ✅|| -[ls-remote](_examples/ls-remote/main.go)| |
| 146 | +|`merge-base`|`--independent` <br/>`--is-ancestor`| ⚠️ (partial)| Calculates the merge-base only between two commits.| -[merge-base](_examples/merge_base/main.go)| |
| 147 | +|`merge-base`|`--fork-point` <br/>`--octopus`| ❌||| |
| 148 | +|`read-tree`|| ❌||| |
| 149 | +|`rev-list`|| ✅||| |
| 150 | +|`rev-parse`|| ❌||| |
| 151 | +|`show-ref`|| ✅||| |
| 152 | +|`symbolic-ref`|| ✅||| |
| 153 | +|`update-index`|| ❌||| |
| 154 | +|`update-ref`|| ❌||| |
| 155 | +|`verify-pack`|| ❌||| |
| 156 | +|`write-tree`|| ❌||| |
| 157 | + |
| 158 | +##Indexes and Git Protocols |
| 159 | + |
| 160 | +| Feature| Version| Status| Notes| |
| 161 | +|---|---|---|---| |
| 162 | +| index|[v1](https://github.com/git/git/blob/master/Documentation/gitformat-index.txt)| ❌|| |
| 163 | +| index|[v2](https://github.com/git/git/blob/master/Documentation/gitformat-index.txt)| ✅|| |
| 164 | +| index|[v3](https://github.com/git/git/blob/master/Documentation/gitformat-index.txt)| ❌|| |
| 165 | +| pack-protocol|[v1](https://github.com/git/git/blob/master/Documentation/gitprotocol-pack.txt)| ✅|| |
| 166 | +| pack-protocol|[v2](https://github.com/git/git/blob/master/Documentation/gitprotocol-v2.txt)| ❌|| |
| 167 | +| multi-pack-index|[v1](https://github.com/git/git/blob/master/Documentation/gitformat-pack.txt)| ❌|| |
| 168 | +| pack-*.rev files|[v1](https://github.com/git/git/blob/master/Documentation/gitformat-pack.txt)| ❌|| |
| 169 | +| pack-*.mtimes files|[v1](https://github.com/git/git/blob/master/Documentation/gitformat-pack.txt)| ❌|| |
| 170 | +| cruft packs|| ❌|| |
| 171 | + |
| 172 | +##Capabilities |
| 173 | + |
| 174 | +| Feature| Status| Notes| |
| 175 | +|---|---|---| |
| 176 | +|`multi_ack`| ❌|| |
| 177 | +|`multi_ack_detailed`| ❌|| |
| 178 | +|`no-done`| ❌|| |
| 179 | +|`thin-pack`| ❌|| |
| 180 | +|`side-band`| ⚠️ (partial)|| |
| 181 | +|`side-band-64k`| ⚠️ (partial)|| |
| 182 | +|`ofs-delta`| ✅|| |
| 183 | +|`agent`| ✅|| |
| 184 | +|`object-format`| ❌|| |
| 185 | +|`symref`| ✅|| |
| 186 | +|`shallow`| ✅|| |
| 187 | +|`deepen-since`| ✅|| |
| 188 | +|`deepen-not`| ❌|| |
| 189 | +|`deepen-relative`| ❌|| |
| 190 | +|`no-progress`| ✅|| |
| 191 | +|`include-tag`| ✅|| |
| 192 | +|`report-status`| ✅|| |
| 193 | +|`report-status-v2`| ❌|| |
| 194 | +|`delete-refs`| ✅|| |
| 195 | +|`quiet`| ❌|| |
| 196 | +|`atomic`| ✅|| |
| 197 | +|`push-options`| ✅|| |
| 198 | +|`allow-tip-sha1-in-want`| ✅|| |
| 199 | +|`allow-reachable-sha1-in-want`| ❌|| |
| 200 | +|`push-cert=<nonce>`| ❌|| |
| 201 | +|`filter`| ❌|| |
| 202 | +|`session-id=<session id>`| ❌|| |
| 203 | + |
| 204 | +##Transport Schemes |
| 205 | + |
| 206 | +| Scheme| Status| Notes| Examples| |
| 207 | +|---|---|---|---| |
| 208 | +|`http(s)://` (dumb)| ❌||| |
| 209 | +|`http(s)://` (smart)| ✅||| |
| 210 | +|`git://`| ✅||| |
| 211 | +|`ssh://`| ✅||| |
| 212 | +|`file://`| ⚠️ (partial)| Warning: this is not pure Golang. This shells out to the`git` binary.|| |
| 213 | +| Custom| ✅| All existing schemes can be replaced by custom implementations.| -[custom_http](_examples/custom_http/main.go)| |
| 214 | + |
| 215 | +##SHA256 |
| 216 | + |
| 217 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 218 | +|---|---|---|---|---| |
| 219 | +|`init`|| ✅| Requires building with tag sha256.| -[init](_examples/sha256/main.go)| |
| 220 | +|`commit`|| ✅| Requires building with tag sha256.| -[commit](_examples/sha256/main.go)| |
| 221 | +|`pull`|| ❌||| |
| 222 | +|`fetch`|| ❌||| |
| 223 | +|`push`|| ❌||| |
| 224 | + |
| 225 | +##Other features |
| 226 | + |
| 227 | +| Feature| Sub-feature| Status| Notes| Examples| |
| 228 | +|---|---|---|---|---| |
| 229 | +|`config`|`--local`| ✅| Read and write per-repository (`.git/config`).|| |
| 230 | +|`config`|`--global` <br/>`--system`| ✅| Read-only.|| |
| 231 | +|`gitignore`|| ✅||| |
| 232 | +|`gitattributes`|| ✅||| |
| 233 | +|`git-worktree`|| ❌| Multiple worktrees are not supported.|| |