-
-
Notifications
You must be signed in to change notification settings - Fork 437
Expand file tree
/
Copy pathc-git-compatibility.txt
More file actions
697 lines (578 loc) · 23.7 KB
/
Copy pathc-git-compatibility.txt
File metadata and controls
697 lines (578 loc) · 23.7 KB
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
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
.. _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 subtree`` - Manage subtrees in repository
* ✓ ``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
* ◐ ``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
* ✓ ``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
* ✓ ``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
* ◐ ``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 (see also objectspec module)
* ✓ ``git show-index`` - Show packed archive index
* ✓ ``git show-ref`` - List references in local repository
* ✓ ``git var`` - Show Git logical variable
* ◐ ``git verify-pack`` - Validate packed Git archive files (API only, see pack module)
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 fully supported, 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: ✓
* ✓ push-options - Server: ✓, Client: ✓
* ✓ side-band-64k - Server: ✓, Client: ✓
General:
* ✓ object-format - Server: ✓, Client: ✓
* ✓ agent - Server: ✓, Client: ✓
Protocol v2 Specific:
* ✓ ls-refs - Server: ✗, Client: ✓
* ✓ packfile-uris - Server: ✗, Client: ✓
* ✓ bundle-uri - 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
* ✓ X509 commit signing
* ✓ X509 tag signing
* ✓ X509 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 - Check LFS pointers
* ✓ 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 - Cone mode
* ✓ git sparse-checkout add - Cone mode
* ✓ git sparse-checkout list - List current patterns
* ✓ git sparse-checkout disable - Disable sparse checkout
* ✗ 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
Subtree
-------
* ✓ git subtree add
* ✓ git subtree merge
* ✓ git subtree pull
* ✓ git subtree push
* ✓ git subtree split
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 (create, read, write, verify)
* ✓ Bundle URI support (for faster clones and fetches)
* ✓ 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)
Configuration Options
=====================
Core (core.*)
-------------
* ✓ ``core.autocrlf`` - Automatic CRLF line ending conversion
* ✓ ``core.bare`` - Bare repository flag
* ✓ ``core.commentChar`` - Comment character for commit messages
* ✓ ``core.commitGraph`` - Enable commit graph
* ✓ ``core.compression`` - Object compression level
* ✓ ``core.deltaBaseCacheLimit`` - Memory limit for delta base cache
* ✓ ``core.editor`` - Default editor
* ✓ ``core.eol`` - Line ending style
* ✓ ``core.excludesFile`` - Global gitignore file
* ✓ ``core.filemode`` - Honor executable bit
* ✓ ``core.fsyncObjectFiles`` - Fsync object files to disk
* ✓ ``core.gitProxy`` - Proxy command for git:// connections
* ✓ ``core.ignorecase`` - Case-insensitive filename matching
* ✓ ``core.looseCompression`` - Compression level for loose objects
* ✓ ``core.maxStat`` - Limit stat operations
* ✓ ``core.multiPackIndex`` - Enable multi-pack index
* ✓ ``core.packedGitLimit`` - Memory limit for mmapped pack files
* ✓ ``core.pager`` - Pager program
* ✓ ``core.precomposeunicode`` - NFD to NFC Unicode normalization (macOS)
* ✓ ``core.preloadIndex`` - Preload index for performance
* ✓ ``core.protectHFS`` - Protect against HFS+ vulnerabilities
* ✓ ``core.protectNTFS`` - Protect against NTFS vulnerabilities
* ✓ ``core.repositoryformatversion`` - Repository format version
* ✓ ``core.safecrlf`` - Safe CRLF checks
* ✓ ``core.sharedRepository`` - Shared repository permissions
* ✓ ``core.sparseCheckoutCone`` - Sparse checkout cone mode
* ✓ ``core.sshCommand`` - SSH command override
* ✓ ``core.symlinks`` - Create symlinks
* ✓ ``core.trustctime`` - Trust ctime in index
* ✗ ``core.abbrev`` - Abbreviate object names
* ✗ ``core.fsmonitor`` - File system monitor daemon
* ✗ ``core.hooksPath`` - Custom hooks location
* ✗ ``core.quotePath`` - Quoting of paths with special characters
* ✗ ``core.splitIndex`` - Enable split index
* ✗ ``core.untrackedCache`` - Enable untracked file cache
* ✗ ``core.whitespace`` - Whitespace error highlighting
* ✗ ``core.worktree`` - Working directory path override
User (user.*)
-------------
* ✓ ``user.email`` - User email address
* ✓ ``user.name`` - User name
* ✓ ``user.signingkey`` - GPG/SSH signing key
Branch (branch.*)
-----------------
* ✓ ``branch.autoSetupMerge`` - Auto setup merge tracking
* ✓ ``branch.sort`` - Branch sorting
* ✓ ``branch.<name>.merge`` - Tracking branch merge ref
* ✓ ``branch.<name>.remote`` - Tracking branch remote
* ✗ ``branch.<name>.pushRemote`` - Remote to push to
* ✗ ``branch.<name>.rebase`` - Rebase when pulling this branch
* ✗ ``branch.<name>.description`` - Branch description
Remote (remote.*)
-----------------
* ✓ ``remote.<name>.url`` - Remote URL
* ✓ ``remote.<name>.pushInsteadOf`` - Push URL rewriting
HTTP (http.*)
-------------
* ✓ ``http.extraHeader`` - Extra HTTP headers (supports per-URL)
* ✓ ``http.proxy`` - HTTP proxy server
* ✓ ``http.proxyAuthMethod`` - HTTP proxy auth method
* ✓ ``http.sslCAInfo`` - SSL CA certificate file
* ✓ ``http.sslVerify`` - Verify SSL certificates
* ✓ ``http.timeout`` - HTTP timeout
* ✓ ``http.userAgent`` - User-Agent header (supports per-URL)
* ✗ ``http.cookieFile`` - Cookie jar file
* ✗ ``http.lowSpeedLimit`` - Abort if speed falls below limit
* ✗ ``http.lowSpeedTime`` - Time for low speed detection
* ✗ ``http.postBuffer`` - Max HTTP POST buffer size
* ✗ ``http.sslBackend`` - SSL backend
* ✗ ``http.sslVersion`` - SSL version
* ✗ ``http.version`` - HTTP protocol version
Pack (pack.*)
-------------
* ✓ ``pack.bigFileThreshold`` - Large file threshold
* ✓ ``pack.deltaCacheSize`` - Delta cache size
* ✓ ``pack.deltaWindowSize`` - Delta window size
* ✓ ``pack.depth`` - Pack depth
* ✓ ``pack.indexVersion`` - Pack index version
* ✓ ``pack.threads`` - Number of pack threads
* ✓ ``pack.windowMemory`` - Window memory limit
* ✓ ``pack.writeBitmaps`` - Write bitmap indexes
* ✓ ``pack.writeBitmapHashCache`` - Write bitmap hash cache
* ✓ ``pack.writeBitmapLookupTable`` - Write bitmap lookup table
GC (gc.*)
---------
* ✓ ``gc.auto`` - Auto garbage collection
* ✓ ``gc.autoPackLimit`` - Auto pack limit
* ✓ ``gc.logExpiry`` - Log expiry period
* ✓ ``gc.pruneExpire`` - Unreachable object prune grace period
GPG/Signing (gpg.*)
--------------------
* ✓ ``commit.gpgSign`` - Sign commits by default
* ✓ ``gpg.format`` - Signature format (openpgp, x509, ssh)
* ✓ ``gpg.minTrustLevel`` - Minimum GPG trust level
* ✓ ``gpg.program`` - GPG program path
* ✓ ``gpg.ssh.allowedSignersFile`` - SSH allowed signers file
* ✓ ``gpg.ssh.defaultKeyCommand`` - SSH default key command
* ✓ ``gpg.ssh.program`` - SSH signing program
* ✓ ``gpg.ssh.revocationFile`` - SSH revocation file
* ✓ ``gpg.x509.program`` - X.509 signing program
* ✓ ``tag.gpgSign`` - Sign tags by default
Extensions (extensions.*)
-------------------------
* ✓ ``extensions.objectformat`` - Object format (SHA-1/SHA-256)
* ✓ ``extensions.relativeworktrees`` - Relative worktree paths
* ✓ ``extensions.worktreeconfig`` - Worktree-specific config
Diff/Merge/Status
------------------
* ✓ ``merge.<name>.driver`` - Merge driver command
* ✗ ``diff.algorithm`` - Diff algorithm (patience, histogram, etc.)
* ✗ ``diff.context`` - Default context lines
* ✗ ``diff.external`` - External diff tool
* ✗ ``diff.noprefix`` - Omit a/b prefixes
* ✗ ``diff.submodule`` - Submodule diff format
* ✗ ``merge.conflictStyle`` - Conflict marker style (merge, diff3, zdiff3)
* ✗ ``merge.tool`` - Default merge tool
* ✗ ``status.showUntrackedFiles`` - Show untracked files
Pull/Push/Fetch/Rebase
-----------------------
* ✗ ``fetch.fsckObjects`` - Validate object integrity on fetch
* ✗ ``fetch.prune`` - Auto-prune deleted remote branches
* ✗ ``fetch.pruneTags`` - Auto-prune deleted remote tags
* ✗ ``pull.ff`` - Fast-forward only on pull
* ✗ ``pull.rebase`` - Rebase instead of merge on pull
* ✗ ``push.default`` - Default push strategy
* ✗ ``push.followTags`` - Push annotated tags
* ✗ ``rebase.autoStash`` - Auto-stash before rebase
* ✗ ``transfer.fsckObjects`` - Validate object integrity on transfer
Credentials
-----------
* ✓ Credential store file support (``~/.git-credentials``)
* ✗ ``credential.helper`` - Credential helper programs
* ✗ ``credential.useHttpPath`` - Include path in credential lookup
Other
-----
* ✓ ``clean.requireForce`` - Require force for clean
* ✓ ``feature.manyFiles`` - Many files optimization
* ✓ ``filter.<name>.clean`` - Clean filter command
* ✓ ``filter.<name>.process`` - Long-running process filter
* ✓ ``filter.<name>.required`` - Filter required flag
* ✓ ``filter.<name>.smudge`` - Smudge filter command
* ✓ ``i18n.commitEncoding`` - Commit message encoding
* ✓ ``index.skipHash`` - Skip hash in index
* ✓ ``index.version`` - Index version
* ✓ ``init.defaultBranch`` - Default branch name
* ✓ ``lfs.url`` - LFS server URL
* ✓ ``maintenance.<task>.enabled`` - Task enabled flag
* ✓ ``maintenance.<task>.schedule`` - Task schedule
* ✓ ``maintenance.repo`` - Maintenance repository
* ✓ ``maintenance.strategy`` - Maintenance strategy
* ✓ ``notes.displayRef`` - Notes display reference
* ✓ ``rerere.autoupdate`` - Auto update rerere
* ✓ ``rerere.enabled`` - Enable rerere
* ✓ ``sequence.editor`` - Sequence editor (for interactive rebase)
* ✓ ``url.<base>.insteadOf`` - URL rewriting
* ✓ ``url.<base>.pushInsteadOf`` - Push URL rewriting
* ✗ ``advice.*`` - Advice/hint messages
* ✗ ``alias.*`` - Command aliases
* ✗ ``color.*`` - Colorization settings
* ✗ ``commit.cleanup`` - Commit message cleanup mode
* ✗ ``commit.template`` - Commit message template file
* ✗ ``format.pretty`` - Default pretty-print format
* ✗ ``log.abbrevCommit`` - Abbreviate commits in log
* ✗ ``receive.fsckObjects`` - Validate received objects
* ✗ ``tag.sort`` - Default tag sorting
Known Limitations
=================
The following Git features are not currently supported:
* Git GUIs (gitk, git-gui, git-citool)
* Email workflow tools (git-send-email)
* Interactive tools (git-difftool, git-mergetool)
* Newer features (scalar, fsmonitor--daemon)
* Full protocol v2 server support (client is fully supported)
* Some plumbing commands (mktree, http-push, upload-archive, fmt-merge-msg, merge-one-file)
* Full submodule feature parity (basic operations supported)
* Some advanced object filtering options (basic filters supported)
* Most git hooks (only pre-commit, commit-msg, post-commit, pre-receive, update, post-receive supported)
* 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