File: c-git-compatibility.txt

package info (click to toggle)
dulwich 1.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,388 kB
  • sloc: python: 99,991; makefile: 163; sh: 67
file content (481 lines) | stat: -rw-r--r-- 15,684 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
.. _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