| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- .. _c-git-compatibility:
- ========================
- C Git Compatibility
- ========================
- This document lists Git functionality and indicates what Dulwich supports.
- Dulwich is a pure Python implementation of Git that provides wire-format
- and repository format compatibility with C Git.
- Legend:
- * ✓ - Fully supported
- * ◐ - Partially supported
- * ✗ - Not supported
- Main Porcelain Commands
- ========================
- Repository Management
- ---------------------
- * ✓ ``git init`` - Initialize repository
- * ✓ ``git clone`` - Clone repository
- * ✓ ``git config`` - Read and write configuration
- Working with Files
- ------------------
- * ✓ ``git add`` - Add file contents to the index
- * ✓ ``git rm`` - Remove files from working tree and index
- * ✓ ``git mv`` - Move or rename file, directory, or symlink
- * ✓ ``git restore`` - Restore working tree files
- * ✓ ``git reset`` - Reset current HEAD to specified state
- * ✓ ``git clean`` - Remove untracked files
- Commits
- -------
- * ✓ ``git commit`` - Record changes to the repository
- * ✓ ``git show`` - Show various types of objects
- * ✓ ``git log`` - Show commit logs
- * ✓ ``git shortlog`` - Summarize git log output
- * ✓ ``git describe`` - Describe a commit using the most recent tag
- * ✓ ``git annotate`` - Annotate file lines with commit information
- * ✓ ``git blame`` - Show what revision and author last modified each line
- * ✗ ``git citool`` - Graphical alternative to git-commit
- * ✗ ``gitk`` - Git repository browser
- Branches
- --------
- * ✓ ``git branch`` - List, create, or delete branches
- * ✓ ``git checkout`` - Switch branches or restore working tree files
- * ✓ ``git switch`` - Switch branches
- * ✓ ``git show-branch`` - Show branches and their commits
- * ✓ ``git worktree`` - Manage multiple working trees
- Tags
- ----
- * ✓ ``git tag`` - Create, list, delete, or verify tags
- * ✓ ``git verify-tag`` - Check GPG/SSH signature of tags
- * ✓ ``git verify-commit`` - Check GPG/SSH signature of commits
- Merging
- -------
- * ✓ ``git merge`` - Join two or more development histories
- * ✓ ``git merge-base`` - Find common ancestor for merge
- * ✗ ``git mergetool`` - Run merge conflict resolution tool interactively
- * ✓ ``git rebase`` - Reapply commits on top of another base tip
- * ◐ ``git rebase -i`` - Interactive rebase (limited support)
- * ✓ ``git cherry-pick`` - Apply changes introduced by existing commits
- * ✓ ``git revert`` - Revert existing commits
- * ✓ ``git cherry`` - Find commits not merged upstream
- Remotes
- -------
- * ✓ ``git fetch`` - Download objects and refs from another repository
- * ✓ ``git pull`` - Fetch from and integrate with another repository
- * ✓ ``git push`` - Update remote refs along with associated objects
- * ✓ ``git remote`` - Manage set of tracked repositories
- * ✓ ``git ls-remote`` - List references in a remote repository
- Inspection
- ----------
- * ✓ ``git status`` - Show the working tree status
- * ✓ ``git diff`` - Show changes between commits, commit and working tree, etc
- * ✓ ``git grep`` - Print lines matching a pattern
- * ✓ ``git bisect`` - Use binary search to find commit that introduced a bug
- Patching
- --------
- * ✓ ``git format-patch`` - Prepare patches for email submission
- * ✗ ``git am`` - Apply series of patches from mailbox
- * ✗ ``git apply`` - Apply patch to files
- * ✓ ``git mailsplit`` - Simple UNIX mbox splitter program
- * ✓ ``git mailinfo`` - Extracts patch and authorship from a single email
- * ✗ ``git send-email`` - Send collection of patches as emails
- * ✗ ``git request-pull`` - Generate summary of pending changes
- Debugging
- ---------
- * ✓ ``git fsck`` - Verify connectivity and validity of objects
- * ✓ ``git check-ignore`` - Debug gitignore / exclude files
- * ✓ ``git check-mailmap`` - Show canonical names and email addresses
- * ✗ ``git instaweb`` - Instantly browse your working repository
- Administration
- --------------
- * ✓ ``git gc`` - Cleanup unnecessary files and optimize repository
- * ✓ ``git reflog`` - Manage reflog information
- * ✓ ``git filter-branch`` - Rewrite branches
- * ✓ ``git maintenance`` - Run tasks to optimize Git repository data
- * ✓ ``git prune`` - Prune all unreachable objects
- * ✓ ``git repack`` - Pack unpacked objects in a repository
- * ✓ ``git count-objects`` - Count unpacked number of objects
- Server Side
- -----------
- * ✓ ``git daemon`` - A really simple server for Git repositories
- * ✓ ``git update-server-info`` - Update auxiliary info file
- * ✓ ``git upload-pack`` - Send objects packed back to git-fetch-pack
- * ✓ ``git receive-pack`` - Receive what is pushed into the repository
- Other
- -----
- * ✓ ``git archive`` - Create archive of files from named tree
- * ✓ ``git bundle`` - Create, unpack, and manipulate bundle files
- * ✓ ``git stash`` - Stash changes in dirty working directory
- * ✓ ``git submodule`` - Initialize, update or inspect submodules
- * ✓ ``git notes`` - Add or inspect object notes
- * ✓ ``git replace`` - Create, list, delete refs to replace objects
- * ✓ ``git rerere`` - Reuse recorded resolution of conflicted merges
- * ✓ ``git help`` - Display help information
- * ◐ ``git fast-export`` - Export repository data (API only, see fastexport module)
- * ◐ ``git fast-import`` - Import repository data (API only, see fastexport module)
- * ✗ ``git gui`` - Portable graphical interface to Git
- * ✗ ``git web--browse`` - Launch web browser to view HTML documentation
- * ✗ ``git difftool`` - Show changes using external diff tool
- * ✗ ``git range-diff`` - Compare two commit ranges
- * ✗ ``git bugreport`` - Collect information for bug reports
- * ✓ ``git diagnose`` - Display diagnostic information about the environment
- * ✗ ``git fsmonitor--daemon`` - Filesystem monitor daemon
- * ✗ ``git scalar`` - Manage large Git repositories
- Plumbing Commands
- =================
- Manipulation
- ------------
- * ✗ ``git apply`` - Apply patch to files
- * ◐ ``git checkout-index`` - Copy files from index to working tree (API only)
- * ✓ ``git commit-tree`` - Create new commit object
- * ◐ ``git hash-object`` - Compute object ID (API only)
- * ◐ ``git index-pack`` - Build pack index file (API only)
- * ◐ ``git merge-file`` - Run three-way file merge (API only)
- * ✓ ``git merge-tree`` - Show three-way merge without touching index
- * ◐ ``git mktag`` - Create tag object (API only)
- * ✓ ``git pack-objects`` - Create packed archive of objects
- * ◐ ``git prune-packed`` - Remove extra objects (API only)
- * ◐ ``git read-tree`` - Read tree information into index (API only)
- * ✓ ``git symbolic-ref`` - Read, modify and delete symbolic refs
- * ✓ ``git unpack-objects`` - Unpack objects from packed archive
- * ◐ ``git update-index`` - Register file contents in working tree to index (API only)
- * ◐ ``git update-ref`` - Update object name stored in a ref (API only)
- * ✓ ``git write-tree`` - Create tree object from current index
- * ✗ ``git mktree`` - Build tree object from ls-tree formatted text
- Interrogation
- -------------
- * ◐ ``git cat-file`` - Provide content or type and size information (API only)
- * ◐ ``git diff-files`` - Compare files in working tree and index (API only)
- * ◐ ``git diff-index`` - Compare content and mode of blobs (API only)
- * ✓ ``git diff-tree`` - Compare content and mode of trees
- * ✓ ``git for-each-ref`` - Output information on each ref
- * ✓ ``git ls-files`` - Show information about files in index and working tree
- * ✓ ``git ls-remote`` - List references in remote repository
- * ✓ ``git ls-tree`` - List contents of tree object
- * ✓ ``git merge-base`` - Find common ancestor
- * ◐ ``git name-rev`` - Find symbolic names for revisions (API only)
- * ✓ ``git pack-refs`` - Pack heads and tags for efficient repository access
- * ✓ ``git rev-list`` - List commit objects in reverse chronological order
- * ◐ ``git rev-parse`` - Pick out and massage parameters (API only, see objectspec module)
- * ◐ ``git show-index`` - Show packed archive index (API only)
- * ✓ ``git show-ref`` - List references in local repository
- * ✓ ``git var`` - Show Git logical variable
- * ◐ ``git verify-pack`` - Validate packed Git archive files (API only)
- Syncing
- -------
- * ◐ ``git fetch-pack`` - Receive missing objects from another repository (CLI available)
- * ◐ ``git http-fetch`` - Download from remote Git repository via HTTP (API only)
- * ◐ ``git send-pack`` - Push objects over Git protocol to another repository (API only)
- * ✓ ``git update-server-info`` - Update auxiliary info for dumb servers
- * ✗ ``git http-push`` - Push objects over HTTP to another repository
- * ✗ ``git upload-archive`` - Send archive back to git-archive
- Pack Management
- ---------------
- * ◐ ``git multi-pack-index`` - Manage multi-pack-index (API only, see midx module)
- Internal Helpers
- ----------------
- * ◐ ``git check-attr`` - Display gitattributes information (API only, see attrs module)
- * ✓ ``git check-ignore`` - Debug gitignore / exclude files
- * ✓ ``git check-mailmap`` - Show canonical names and email addresses
- * ✓ ``git column`` - Display data in columns
- * ◐ ``git credential`` - Retrieve and store user credentials (basic support)
- * ✗ ``git fmt-merge-msg`` - Produce merge commit message
- * ✓ ``git interpret-trailers`` - Add or parse structured information in commit messages
- * ✓ ``git mailinfo`` - Extract patch and authorship from single email message
- * ✓ ``git mailsplit`` - Simple UNIX mbox splitter
- * ✗ ``git merge-one-file`` - Standard helper program to use with git-merge-index
- * ◐ ``git patch-id`` - Compute unique ID for patch (API only, see patch module)
- * ✓ ``git stripspace`` - Remove unnecessary whitespace
- * ✗ ``git sh-setup`` - Common Git shell script setup code
- * ✗ ``git sh-i18n`` - Git's i18n setup code for shell scripts
- File Formats & Protocols
- =========================
- Repository Format
- -----------------
- * ✓ Object storage (loose objects)
- * ✓ Pack files (.pack)
- * ✓ Pack indexes (.idx)
- * ✓ Multi-pack index (.midx)
- * ✓ Pack bitmaps
- * ✓ Commit graphs
- * ✓ SHA-1 object format
- * ✓ SHA-256 object format
- * ✓ Reftable format
- Configuration Files
- -------------------
- * ✓ .git/config
- * ✓ .gitignore
- * ✓ .gitattributes
- * ✓ .mailmap
- * ✓ .git/info/exclude
- * ✓ .git/info/attributes
- * ✓ .gitmodules
- Ref Storage
- -----------
- * ✓ Loose refs (refs/heads/, refs/tags/, etc.)
- * ✓ Packed refs (packed-refs)
- * ✓ Reflog
- * ✓ Reftable
- Network Protocols
- -----------------
- * ✓ SSH protocol
- * ✓ Git protocol (git://)
- * ✓ HTTP/HTTPS (smart protocol)
- * ✓ HTTP/HTTPS (dumb protocol)
- * ✓ File protocol (file://)
- * ✓ Local repositories
- * ◐ Protocol v2 (client fetch only, server limited)
- Transfer Capabilities
- ---------------------
- Fetch/Upload-Pack:
- * ✓ thin-pack - Server: ✓, Client: ✓
- * ✓ ofs-delta - Server: ✓, Client: ✓
- * ✓ multi_ack - Server: ✓, Client: ✓
- * ✓ multi_ack_detailed - Server: ✓, Client: ✓
- * ✓ side-band-64k - Server: ✓, Client: ✓
- * ✓ shallow - Server: ✓, Client: ✓
- * ✓ deepen-since - Server: ✓, Client: ✓
- * ✓ deepen-not - Server: ✓, Client: ✓
- * ✓ deepen-relative - Server: ✓, Client: ✓
- * ✓ include-tag - Server: ✓, Client: ✓
- * ◐ no-progress - Server: ✓, Client: ✗
- * ✓ symref - Server: ✓, Client: ✓
- * ◐ filter - Server: ✓, Client: ◐ (basic support)
- Push/Receive-Pack:
- * ✓ report-status - Server: ✓, Client: ✓
- * ✓ delete-refs - Server: ✓, Client: ✓
- * ✓ quiet - Server: ✓, Client: ✓
- * ✓ atomic - Server: ✓, Client: ✓
- * ✓ ofs-delta - Server: ✓, Client: ✓
- * ✓ side-band-64k - Server: ✓, Client: ✓
- General:
- * ✓ object-format - Server: ✓, Client: ✓
- * ✓ agent - Server: ✓, Client: ✓
- Advanced Features
- =================
- Signatures
- ----------
- * ✓ GPG commit signing
- * ✓ GPG tag signing
- * ✓ GPG signature verification (verify-commit, verify-tag)
- * ✓ SSH commit signing
- * ✓ SSH tag signing
- * ✓ SSH signature verification
- Filters & Attributes
- --------------------
- * ✓ Clean/smudge filters
- * ✓ Text/binary detection
- * ✓ End-of-line conversion (CRLF/LF)
- * ✓ .gitattributes processing
- * ✗ Working tree encoding
- * ✓ Whitespace handling
- Hooks
- -----
- * ✓ Hook execution
- * ✓ pre-commit
- * ✗ prepare-commit-msg
- * ✓ commit-msg
- * ✓ post-commit
- * ✗ pre-rebase
- * ✗ post-checkout
- * ✗ post-merge
- * ✗ pre-push
- * ✗ pre-receive
- * ✗ update
- * ✓ post-receive
- * ✗ post-update
- * ✗ push-to-checkout
- Git LFS
- -------
- * ✓ git-lfs init
- * ✓ git-lfs track
- * ✓ git-lfs untrack
- * ✓ git-lfs ls-files
- * ✓ git-lfs fetch
- * ✓ git-lfs pull
- * ✓ git-lfs push
- * ✗ git-lfs checkout
- * ✓ git-lfs clean (filter)
- * ✓ git-lfs smudge (filter)
- * ◐ git-lfs pointer (API only via lfs_pointer_check)
- * ✓ git-lfs migrate
- * ✓ git-lfs status
- * ✓ LFS server implementation
- * ✓ LFS batch API
- Sparse Checkout
- ---------------
- * ✓ Sparse checkout patterns
- * ✓ Cone mode
- * ✓ git sparse-checkout init (cone mode)
- * ✓ git sparse-checkout set
- * ✓ git sparse-checkout add
- * ◐ git sparse-checkout list (via API only)
- * ◐ git sparse-checkout disable (via API only)
- * ✗ git sparse-checkout reapply
- Worktrees
- ---------
- * ✓ git worktree add
- * ✓ git worktree list
- * ✓ git worktree remove
- * ✓ git worktree prune
- * ✓ git worktree lock
- * ✓ git worktree unlock
- * ✓ git worktree move
- * ✓ git worktree repair
- Submodules
- ----------
- * ✓ git submodule add
- * ✓ git submodule init
- * ✓ git submodule update
- * ◐ git submodule status (basic)
- * ✗ git submodule summary
- * ✗ git submodule foreach
- * ✗ git submodule sync
- * ✗ git submodule deinit
- * ✗ git submodule absorbgitdirs
- Notes
- -----
- * ✓ git notes add
- * ✓ git notes list
- * ✓ git notes show
- * ✓ git notes remove
- * ✗ git notes append
- * ✗ git notes copy
- * ✗ git notes merge
- * ✗ git notes prune
- * ✗ git notes get-ref
- Other Advanced Features
- -----------------------
- * ✓ Rerere (reuse recorded resolution)
- * ✓ Commit graph
- * ✓ Replace objects
- * ✓ Grafts
- * ✓ Info/alternates (alternate object databases)
- * ✓ Partial clone/fetch
- * ✓ Shallow clone/fetch
- * ✓ Bundle files
- * ✓ Fast-import/fast-export
- * ✗ Scalar
- * ◐ Partial clone with object filters (basic blob:none support)
- Web Interface
- =============
- * ✓ Gitweb-like interface (dulwich.web)
- * ✓ WSGI application support
- * ✗ cgit
- * ✗ GitWeb (Perl implementation)
- Known Limitations
- =================
- The following Git features are not currently supported:
- * Git GUIs (gitk, git-gui, git-citool)
- * Email workflow tools (git-send-email, git-request-pull)
- * Patch application (git-am, git-apply)
- * Interactive tools (git-difftool, git-mergetool)
- * Newer features (range-diff, scalar, fsmonitor--daemon)
- * Full protocol v2 server support (client is fully supported for fetch)
- * Some plumbing commands (mktree, http-push, upload-archive, fmt-merge-msg, merge-one-file)
- * Full submodule feature parity
- * Some advanced object filtering options
- * Most git hooks (only pre-commit, commit-msg, post-commit, post-receive)
- * Working tree encoding attribute
- Compatibility Notes
- ===================
- Repository Compatibility
- ------------------------
- Dulwich maintains full wire-format and on-disk repository format compatibility
- with C Git. This means:
- * Dulwich can read and write repositories created by C Git
- * C Git can read and write repositories created by Dulwich
- * Dulwich and C Git can be used interchangeably on the same repository
- * Network protocols are fully compatible
- See Also
- ========
- * :ref:`tutorial-index` - Tutorial for using Dulwich
- * :ref:`protocol` - Git protocol documentation
- * :mod:`dulwich.porcelain` - High-level API reference
|