Visitar URL original
go-git/COMPATIBILITY.md at main · go-git/go-git · GitHub
Skip to content

Latest commit

 

History

History
227 lines (190 loc) · 22 KB

COMPATIBILITY.md

File metadata and controls

227 lines (190 loc) · 22 KB

Supported Features

Here is a non-comprehensive table of git commands and features and their compatibility status with go-git.

Getting and creating repositories

Feature Sub-feature Status Notes Examples
init ✅
init --bare ✅
init --template
--separate-git-dir
--shared
❌
clone ✅ - PlainClone
clone Authentication:
- none
- access token
- username + password
- ssh
✅ - clone ssh (private_key)
- clone ssh (ssh_agent)
- clone access token
- clone user + password
clone --progress
--single-branch
--depth
--origin
--recurse-submodules
--shared
✅ - recurse submodules
- progress

Basic snapshotting

Feature Sub-feature Status Notes Examples
add ✅ Plain add is supported. Any other flags aren't supported
status ✅
commit ✅ - commit
reset ✅
rm ✅
mv ✅

Branching and merging

Feature Sub-feature Status Notes Examples
branch ✅ - branch
checkout ✅ Basic usages of checkout are supported. - checkout
merge ⚠️ (partial) Fast-forward only
mergetool ❌
stash ❌
sparse-checkout ✅ - sparse-checkout
tag ✅ - tag
- tag create and push

Sharing and updating projects

Feature Sub-feature Status Notes Examples
fetch ✅
pull ✅ Only supports merges where the merge can be resolved as a fast-forward. - pull
push ✅ - push
remote ✅ - remotes
submodule ✅ - submodule
submodule deinit ❌

Inspection and comparison

Feature Sub-feature Status Notes Examples
show ✅
log ✅ - log
shortlog (see log)
describe ❌

Patching

Feature Sub-feature Status Notes Examples
apply ❌
cherry-pick ⚠️ (partial) It supports default merge strategy --strategy=ort and underlying auto-conflict resolve strategy options --strategy-option which are theirs and ours.
diff ✅ Patch object with UnifiedDiff output representation.
rebase ❌
revert ❌

Debugging

Feature Sub-feature Status Notes Examples
bisect ⚠️ Using Log, ForEach and Checkout. - See tests (search for TestCheckoutBisect in the repository)
blame ✅ - blame
grep ✅

Email

Feature Sub-feature Status Notes Examples
am ❌
apply ❌
format-patch ❌
send-email ❌
request-pull ❌

External systems

Feature Sub-feature Status Notes Examples
svn ❌
fast-import ❌
lfs ❌

Administration

Feature Sub-feature Status Notes Examples
clean ✅
gc ❌
fsck ❌
reflog ❌
filter-branch ❌
instaweb ❌
archive ❌
bundle ❌
prune ❌
repack ✅ (*git.Repository).RepackObjects.

Server admin

Feature Sub-feature Status Notes Examples
daemon ⚠️ (partial) via https://github.com/go-git/cli
update-server-info ❌ Only used by the dumb HTTP protocol, which is not supported.

Advanced

Feature Sub-feature Status Notes Examples
notes ❌
replace ❌
worktree add ⚠️ (partial) Creation and opening of linked worktrees via the x/plumbing/worktree package. Not all flags or subcommands are supported. - worktrees

GPG

Feature Sub-feature Status Notes Examples
git-verify-commit ✅
git-verify-tag ✅

Plumbing commands

Feature Sub-feature Status Notes Examples
cat-file ✅
check-ignore ❌
commit-tree ❌
count-objects ❌
diff-index ❌
for-each-ref ✅
hash-object ✅
ls-files ✅
ls-remote ✅ - ls-remote
merge-base --independent
--is-ancestor
⚠️ (partial) Calculates the merge-base only between two commits. - merge-base
merge-base --fork-point
--octopus
❌
read-tree ❌
rev-list ✅
rev-parse ❌
show-ref ✅
symbolic-ref ✅
update-index ❌
update-ref ❌
verify-pack ❌
write-tree ❌

Indexes and Git Protocols

Feature Version Status Notes
index v1 ❌
index v2 ✅
index v3 ❌
pack-protocol v1 ✅
pack-protocol v2 ❌
multi-pack-index v1 ❌
pack-*.rev files v1 ✅
pack-*.mtimes files v1 ❌
pack-*.promisor files v1 ✅ Written for packs received by a filtered fetch, and preserved across repack.
cruft packs ❌

Capabilities

Feature Status Notes
multi_ack ✅
multi_ack_detailed ✅
no-done ❌
thin-pack ❌
side-band ⚠️ (partial)
side-band-64k ⚠️ (partial)
ofs-delta ✅
agent ✅
object-format ✅ SHA-256
symref ✅
shallow ✅
deepen-since ✅
deepen-not ❌
deepen-relative ❌
no-progress ✅
include-tag ✅
report-status ✅
report-status-v2 ❌
delete-refs ✅
quiet ❌
atomic ✅
push-options ✅
allow-tip-sha1-in-want ✅
allow-reachable-sha1-in-want ❌
push-cert=<nonce> ❌
filter ⚠️ (partial) Fetching with a filter is supported and records the partial clone (promisor-marked packs, remote.<name>.promisor and partialclonefilter), so git accepts the result. go-git cannot fetch the withheld objects back on demand, so reading one fails rather than backfilling it. Not offered when serving.
session-id=<session id> ❌

Transport Schemes

Scheme Status Notes Examples
http(s):// (dumb) ❌ Not supported, neither as a client nor when serving.
http(s):// (smart) ✅
git:// ✅
ssh:// ✅
file:// ✅
Custom ✅ All existing schemes can be replaced by custom implementations. - custom_http

Other features

Feature Sub-feature Status Notes Examples
config --local ✅ Read and write per-repository (.git/config).
config --global
--system
✅ Read-only.
config --worktree ✅ Read and write per-worktree (.git/worktrees/<name>/config.worktree). Requires extensions.worktreeConfig=true.
gitignore ✅
gitattributes ✅
git-worktree add, remove and list ⚠️ (partial) Not all flags nor subcommands are supported. - worktrees
extensions worktreeConfig ✅ Per-worktree config.worktree files are read and overlaid on the common config when this extension is enabled. Supported only by storage.filesystem.
extensions relativeWorktrees ✅ Linked worktrees using relative paths can be opened with storage.filesystem.