π NOTE: For detailed Git 2.49+ features (git-backfill, path-walk API, zlib-ng), see git-2-49-features.md skill.
π¨ CRITICAL GUIDELINES
Windows File Path Requirements
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (
) in file paths, NOT forward slashes (/
).
Examples:
-
β WRONG: D:/repos/project/file.tsx
-
β CORRECT: D:\repos\project\file.tsx
This applies to:
-
Edit tool file_path parameter
-
Write tool file_path parameter
-
All file operations on Windows systems
Documentation Guidelines
NEVER create new documentation files unless explicitly requested by the user.
-
Priority: Update existing README.md files rather than creating new documentation
-
Repository cleanliness: Keep repository root clean - only README.md unless user requests otherwise
-
Style: Documentation should be concise, direct, and professional - avoid AI-generated tone
-
User preference: Only create additional .md files when user specifically asks for documentation
Git 2025 Features - Advanced Capabilities
Git 2.49 (March 2025) - Latest
Major additions: git-backfill, path-walk API, zlib-ng performance, improved delta compression.
See git-2-49-features.md for complete coverage.
Git 2.48-2.49 Features
Reftables Migration (Completed in 2.48)
What: New reference storage format replacing loose ref files and packed-refs.
Benefits:
-
Faster ref operations (50-80% improvement)
-
Atomic ref updates
-
Better scalability for repositories with many refs
-
Reflogs fully migratable (completed in 2.48)
Migration:
Check current ref storage format
git config core.refStorage
Migrate to reftables
git refs migrate --ref-storage=reftables
Verify migration
git fsck --full git log --oneline -5
Roll back if needed (before critical operations)
git refs migrate --ref-storage=files
When to use:
-
Repositories with 10,000+ refs
-
High-frequency branch operations
-
CI/CD systems creating many temporary refs
-
Monorepos with extensive branching
Performance Milestones (2.48-2.49)
Git 2.48:
-
Memory leak free status achieved
-
Stable memory usage in long-running operations
Git 2.49:
-
zlib-ng integration: 20-30% faster compression
-
Path-walk API: 50-70% better delta compression
-
New name-hashing algorithm for optimal packfiles
Benefits automatically in:
-
Large repository clones
-
Extended rebase sessions
-
Bulk operations (filter-repo, GC, repack)
Sparse-Checkout (Enhanced in 2.48)
What: Check out only a subset of files from repository.
Use cases:
-
Monorepos (work on one service)
-
Large repositories (reduce disk usage)
-
Build systems (fetch only needed files)
Cone Mode (Default - Recommended):
Clone with sparse-checkout
git clone --filter=blob:none --sparse <repo-url> cd <repo>
Initialize sparse-checkout in cone mode
git sparse-checkout init --cone
Add directories to checkout
git sparse-checkout set src/api src/shared docs
Add more directories
git sparse-checkout add tests/integration
View current patterns
git sparse-checkout list
Check what would be matched
git sparse-checkout check-rules src/api/users.ts
Disable sparse-checkout
git sparse-checkout disable
Advanced Patterns (Non-Cone Mode):
Enable pattern mode
git sparse-checkout init --no-cone
Add patterns (one per line)
git sparse-checkout set
".md"
"src/api/"
"!src/api/legacy/*"
Read patterns from file
git sparse-checkout set --stdin < patterns.txt
Reapply Rules:
After merge/rebase that materialized unwanted files
git sparse-checkout reapply
Partial Clone
What: Clone repository without downloading all objects initially.
Filters:
-
blob:none - Defer all blobs (fastest, smallest)
-
tree:0 - Defer all trees and blobs
-
blob:limit=1m - Defer blobs larger than 1MB
Usage:
Clone without blobs (fetch on demand)
git clone --filter=blob:none <repo-url>
Clone without large files
git clone --filter=blob:limit=10m <repo-url>
Combine with sparse-checkout
git clone --filter=blob:none --sparse <repo-url> cd <repo> git sparse-checkout set src/api
Convert existing repository to partial clone
git config extensions.partialClone origin git config remote.origin.promisor true git fetch --filter=blob:none
Prefetch all missing objects
git fetch --unshallow
Combine Partial Clone + Sparse-Checkout:
Ultimate efficiency: Only objects for specific directories
git clone --filter=blob:none --sparse <repo-url> cd <repo> git sparse-checkout set --cone src/api git checkout main
Result: Only have objects for src/api
Check promisor objects:
Verify partial clone status
git config extensions.partialClone
See promisor packfiles
ls -lah .git/objects/pack/*.promisor
Force fetch specific object
git rev-list --objects --missing=print HEAD | grep "^?"
Git Worktrees
What: Multiple working directories from one repository.
Benefits:
-
Work on multiple branches simultaneously
-
No need to stash/commit before switching
-
Parallel work (review PR while coding)
-
Shared .git (one fetch updates all)
Basic Operations:
List worktrees
git worktree list
Create worktree for existing branch
git worktree add ../project-feature feature-branch
Create worktree with new branch
git worktree add -b new-feature ../project-new-feature
Create worktree from remote branch
git worktree add ../project-fix origin/fix-bug
Remove worktree
git worktree remove ../project-feature
Clean up stale worktree references
git worktree prune
Advanced Patterns:
Worktree for PR review while coding
git worktree add ../myproject-pr-123 origin/pull/123/head cd ../myproject-pr-123
Review PR in separate directory
cd -
Continue coding in main worktree
Worktree for hotfix
git worktree add --detach ../myproject-hotfix v1.2.3 cd ../myproject-hotfix
Make hotfix
git switch -c hotfix/security-patch git commit -am "fix: patch vulnerability" git push -u origin hotfix/security-patch
Worktree organization
mkdir -p ~/worktrees/myproject git worktree add ~/worktrees/myproject/feature-a -b feature-a git worktree add ~/worktrees/myproject/feature-b -b feature-b git worktree add ~/worktrees/myproject/pr-review origin/pull/42/head
Best Practices:
- Organize directory structure:
~/projects/ myproject/ # Main worktree myproject-feature/ # Feature worktree myproject-review/ # Review worktree
- Clean up regularly:
Remove merged worktrees
git worktree list | grep feature | while read wt branch commit; do if git branch --merged | grep -q "$branch"; then git worktree remove "$wt" fi done
-
Shared configuration:
-
.git/config applies to all worktrees
-
.git/info/exclude applies to all worktrees
-
Each worktree has own index and HEAD
Scalar (Large Repository Tool)
What: Tool for optimizing very large repositories (Microsoft-developed).
Install scalar (comes with Git 2.47+)
scalar register <path>
Clone with scalar optimizations
scalar clone --branch main <repo-url>
Enables automatically:
- Sparse-checkout (cone mode)
- Partial clone (blob:none)
- Multi-pack-index
- Commit-graph
- Background maintenance
Unregister
scalar unregister <path>
Delete repository
scalar delete <path>
Git Backfill (Experimental)
What: Background process to fetch missing objects in partial clone.
Fetch missing blobs in background
git backfill
Configure batch size
git backfill --min-batch-size=1000
Respect sparse-checkout patterns
git backfill --sparse
Performance Comparison
Traditional Clone:
git clone large-repo
Size: 5GB, Time: 10 minutes
Sparse-Checkout:
git clone --sparse large-repo git sparse-checkout set src/api
Size: 500MB, Time: 3 minutes
Partial Clone:
git clone --filter=blob:none large-repo
Size: 100MB, Time: 1 minute
Partial Clone + Sparse-Checkout:
git clone --filter=blob:none --sparse large-repo git sparse-checkout set src/api
Size: 50MB, Time: 30 seconds
When to Use Each Feature
Sparse-Checkout:
-
β Monorepos
-
β Working on specific services/modules
-
β Limited disk space
-
β Need entire codebase often
Partial Clone:
-
β CI/CD pipelines
-
β Large repositories
-
β Good network connectivity
-
β Offline work frequently
Worktrees:
-
β Parallel development
-
β PR reviews during work
-
β Multiple branch testing
-
β Low disk space
Combine All:
-
β Massive monorepos (Google scale)
-
β Multiple simultaneous tasks
-
β Minimal local storage
-
β Fast network connection
Troubleshooting
Sparse-checkout not working:
Verify configuration
git config core.sparseCheckout git config core.sparseCheckoutCone
Re-apply patterns
git sparse-checkout reapply
Check patterns
git sparse-checkout list
Missing objects in partial clone:
Fetch specific object
git fetch origin <commit>
Fetch all missing
git fetch --unshallow
Verify promisor config
git config extensions.partialClone
Worktree issues:
Locked worktree
git worktree unlock <path>
Corrupted worktree
git worktree remove --force <path> git worktree prune
Branch already checked out
git checkout --ignore-other-worktrees <branch>
Migration Guide
From traditional to optimized workflow:
1. Current large clone
cd large-project du -sh .git # 5GB
2. Create optimized new clone
cd .. git clone --filter=blob:none --sparse large-project-new cd large-project-new git sparse-checkout set src/api src/shared
3. Verify size
du -sh .git # 50MB
4. Switch workflow
cd ../large-project-new
5. Delete old clone when comfortable
rm -rf ../large-project
Resources
-
Git Partial Clone Documentation
-
Git Sparse-Checkout Guide
-
Git Worktree Best Practices
-
Scalar Documentation