GitNova - Enterprise Git Integration for VS Code
Visualize and manage your Git workflow with a rhythm. The heartbeat of your codebase.
Features •
Enterprise Features •
Installation •
Configuration •
Commands
A comprehensive, enterprise-grade Git plugin for Visual Studio Code that provides advanced git operations through an intuitive, performant, and modern user interface. Built for teams that demand reliability, observability, and professional-grade tooling.
Features
Core Git Operations
- Branch Management: Create, delete, rename, switch, and compare branches with ease
- Commit History: View and search commit history with detailed information
- Diff Viewer: Side-by-side and unified diff views with syntax highlighting
- Stash Management: Create, apply, pop, and drop stashes
- Interactive Rebase: Drag-and-drop commit reordering with conflict resolution
- Merge Conflict Resolution: Side-by-side conflict view with merge strategies
- Remote Operations: Fetch, pull, push, and manage remotes
- Tag Management: Create, delete, and push tags
- Status Bar Integration: Quick access to branch, status, and sync information
- Tree Views: Native VSCode tree views for branches, commits, stashes, remotes, and tags
Enterprise Features
🔒 Branch Protection
Protect critical branches from accidental changes:
- Configurable protected branch patterns (main, master, develop, release/, hotfix/)
- Warning prompts before operations on protected branches
- Admin override capability for authorized users
- Branch naming convention enforcement
📝 Commit Templates
Streamline your commit workflow with templates:
- Pre-configured conventional commit templates
- Custom template creation and management
- Interactive commit message wizard
- Placeholder system for dynamic content
- Breaking change support
👥 Git Blame
Inline blame annotations for code authorship:
- Line-by-line blame information
- Hover details with commit info
- Recent commit highlighting
- Configurable date formats (relative, short, full)
- Toggle inline blame on/off
🌳 Worktree Management
Parallel development with Git worktrees:
- List, create, and remove worktrees
- Open worktrees in new VS Code windows
- Lock/unlock worktrees
- Move worktrees to new locations
- Status bar integration
📦 Submodule Support
Enterprise-grade submodule management:
- Initialize submodules recursively
- Update submodules with various strategies
- Add new submodules with branch tracking
- Remove submodules cleanly
- Sync submodule URLs
- Status tracking and notifications
📁 Git LFS Support
Large File Storage for enterprise workflows:
- Install and configure Git LFS
- Track/untrack file patterns
- Pull LFS objects with progress
- Prune old LFS objects
- Storage statistics and status
Enterprise observability features:
- Operation timing metrics
- Cache hit/miss statistics
- Slow operation warnings
- Performance reports
🔍 Enhanced Logging
Professional-grade logging:
- VS Code Output Channel integration
- Configurable log levels (trace, debug, info, warn, error)
- Performance timing utilities
- Log rotation support
📈 Telemetry
Usage analytics (respects VS Code settings):
- Command usage tracking
- Feature adoption metrics
- Error tracking
- Performance analytics
🛡️ Error Handling
Robust error management:
- Centralized error handling
- Error classification and categorization
- Recovery strategies
- User-friendly error messages
- Retry mechanisms
Premium Features
Interactive Git Graph
Visualize your entire repository history with a native SVG-based branch graph:
- Branch lanes with color-coded commit paths
- Click any commit for details, right-click for actions (cherry-pick, revert, create branch)
- Search and filter by message, author, or SHA
- Pagination for large repositories
File History & Revision Navigation
- File History tree view in the sidebar showing all commits for the active file
- Line History (
Ctrl+Alt+H): Select lines to see how they evolved across commits
- Revision Navigation: Step through file revisions with
Alt+[ and Alt+]
Commit Details Panel
Rich webview showing full commit info, file tree with status icons, stats bar, and action buttons (cherry-pick, revert, checkout, copy SHA).
Search & Compare
- Search commits by message, author, or file content (pickaxe)
- Compare any two branches, tags, or commits side by side with a file diff list
Interactive Rebase UI
Drag-and-drop commit reordering with per-commit action dropdowns (pick, reword, edit, squash, fixup, drop) and a preview panel.
Merge Conflict Resolution UI
3-panel merge editor (Ours / Result / Theirs) with per-block Accept Current, Accept Incoming, and Accept Both actions.
Multi-Repository Support
- Auto-discovers all Git repositories in workspace folders
- Auto-switches active repo based on which file you're editing
- Repository picker (
GitNova: Switch Repository) for manual switching
- Status bar shows repo name when multiple repos are open
Auto-Fetch with Notifications
Periodic background fetch with configurable interval. Notifies you when new remote commits are available with Pull and View actions.
Statistics Dashboard
- Contributors tab: commit counts, rankings
- Activity tab: commit frequency data
- Code tab: language breakdown, most-modified files
Gutter Change Indicators
Color-coded indicators in the editor gutter: green for added lines, blue for modified, red for deleted. Updates in real-time as you type.
CodeLens Blame
See the last author and commit message above every function and class, powered by CodeLens.
Enhanced Branch Quick Picks
Branch picker with "Recent", "Local Branches", and "Remote Branches" sections, ahead/behind badges, and codicon icons.
Welcome Walkthrough
6-step onboarding guide that opens on first install, covering the sidebar, commits, branches, git graph, blame, and stash.
Technology Stack
- TypeScript 5.x - Type-safe development
- VSCode Extension API - Native integration with VSCode
- Simple-git 3.x - Git operations wrapper
- React 18.x - Modern UI components for webviews
- Zustand 4.x - Lightweight state management
- esbuild - Fast bundling and compilation
Installation
From VSCode Marketplace
Search for GitNova in the VS Code Extensions sidebar, or visit the Marketplace page.
From Source
- Clone the repository:
git clone https://github.com/sitharaj88/git-nova.git
cd git-nova
- Install dependencies:
npm install
- Build the extension:
npm run compile
- Run in development mode:
npm run watch
- Press F5 in VSCode to launch the Extension Development Host
Commands
Branch Commands
| Command |
Description |
GitNova: Create Branch |
Create a new branch |
GitNova: Delete Branch |
Delete a branch |
GitNova: Switch Branch |
Switch to another branch |
GitNova: Rename Branch |
Rename the current branch |
GitNova: Merge Branch |
Merge a branch into current |
GitNova: Compare Branches |
Compare two branches |
Commit Commands
| Command |
Description |
GitNova: Create Commit |
Create a new commit |
GitNova: View Commit History |
View commit history |
GitNova: Insert Commit Template |
Use a commit template |
GitNova: Commit Template Wizard |
Interactive template wizard |
Stash Commands
| Command |
Description |
GitNova: Create Stash |
Create a new stash |
GitNova: Apply Stash |
Apply a stash |
GitNova: Pop Stash |
Pop a stash |
GitNova: Drop Stash |
Delete a stash |
Enterprise Commands
| Command |
Description |
GitNova: Toggle Inline Blame |
Toggle inline blame annotations |
GitNova: Show File Blame |
Show blame for current file |
GitNova: List Worktrees |
List all worktrees |
GitNova: Create Worktree |
Create a new worktree |
GitNova: Initialize Submodules |
Initialize all submodules |
GitNova: Update Submodules |
Update all submodules |
GitNova: Add Submodule |
Add a new submodule |
GitNova: Install Git LFS |
Install LFS in repository |
GitNova: Track Files with LFS |
Track file patterns with LFS |
GitNova: Show Logs |
Open GitNova log output |
GitNova: Show Performance Report |
View performance metrics |
Premium Commands
| Command |
Description |
GitNova: Open Git Graph |
Open the interactive git graph |
GitNova: Show File History |
Show commit history for the active file |
GitNova: Show Line History |
Show history for selected lines |
GitNova: Previous Revision |
Navigate to previous file revision |
GitNova: Next Revision |
Navigate to next file revision |
GitNova: Pick Revision |
Pick a specific file revision |
GitNova: Toggle Gutter Indicators |
Toggle gutter change indicators |
GitNova: Toggle CodeLens |
Toggle CodeLens blame annotations |
GitNova: Search & Compare |
Open search and compare panel |
GitNova: Show Commit Detail |
Show detailed commit info |
GitNova: Interactive Rebase |
Open interactive rebase UI |
GitNova: Resolve Merge Conflicts |
Open merge conflict resolution UI |
GitNova: Show Repository Statistics |
Open statistics dashboard |
GitNova: Switch Repository |
Switch active repository (multi-repo) |
Keyboard Shortcuts
| Shortcut |
Command |
Ctrl+Alt+B / Cmd+Alt+B |
Toggle Inline Blame |
Alt+[ |
Previous File Revision |
Alt+] |
Next File Revision |
Ctrl+Alt+H / Cmd+Alt+H |
Show Line History |
Ctrl+Alt+T / Cmd+Alt+T |
Insert Commit Template |
Ctrl+Alt+W / Cmd+Alt+W |
List Worktrees |
Ctrl+Alt+L / Cmd+Alt+L |
Show Logs |
Configuration
The extension can be configured through VSCode settings:
General Settings
{
"gitNova.autoRefresh": true,
"gitNova.refreshInterval": 60000,
"gitNova.showStatusBar": true,
"gitNova.defaultBranchName": "main",
"gitNova.showRemoteBranches": true,
"gitNova.branchSortOrder": "recent"
}
Diff Settings
{
"gitNova.diffViewMode": "unified",
"gitNova.ignoreWhitespace": false,
"gitNova.showLineNumbers": true
}
Branch Protection
{
"gitNova.branchProtection.enabled": true,
"gitNova.branchProtection.protectedPatterns": [
"main", "master", "develop", "release/*", "hotfix/*"
],
"gitNova.branchProtection.requirePullRequest": true
}
Branch Naming Conventions
{
"gitNova.branchNaming.enabled": true,
"gitNova.branchNaming.pattern": "^(feature|bugfix|hotfix|release|chore)/[a-z0-9-]+$",
"gitNova.branchNaming.prefixes": [
"feature/", "bugfix/", "hotfix/", "release/", "chore/"
],
"gitNova.branchNaming.requireTicketNumber": false
}
Commit Message Settings
{
"gitNova.commitMessage.maxSubjectLength": 72,
"gitNova.commitMessage.requireType": false,
"gitNova.commitMessage.allowedTypes": [
"feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"
]
}
Blame Settings
{
"gitNova.blame.enabled": true,
"gitNova.blame.dateFormat": "relative",
"gitNova.blame.highlightRecent": true,
"gitNova.blame.recentDays": 7
}
{
"gitNova.performance.enableMetrics": true,
"gitNova.performance.slowOperationThreshold": 3000,
"gitNova.performance.showCacheStats": false
}
Logging Settings
{
"gitNova.logging.level": "info",
"gitNova.logging.includeTimestamp": true
}
Project Structure
git-nova/
├── src/ # Main source code
│ ├── commands/ # Command handlers
│ ├── core/ # Core services (GitService, RepositoryManager, EventBus)
│ ├── models/ # Data models and interfaces
│ ├── providers/ # Tree data providers
│ ├── services/ # Enterprise services
│ │ ├── telemetryService.ts
│ │ ├── errorHandler.ts
│ │ ├── performanceMonitor.ts
│ │ ├── workspaceStateManager.ts
│ │ ├── branchProtectionManager.ts
│ │ ├── commitTemplateManager.ts
│ │ ├── worktreeManager.ts
│ │ ├── gitBlameService.ts
│ │ ├── submoduleManager.ts
│ │ └── lfsManager.ts
│ ├── views/ # Webview panel managers
│ └── utils/ # Utility functions
├── webviews/ # React webview source
├── test/ # Test files
│ └── unit/ # Unit tests
└── resources/ # Icons and schemas
Architecture
The plugin follows a layered architecture with event-driven communication:
- Presentation Layer: Tree views, webviews, and status bar
- Command Layer: Command handlers for user actions
- Service Layer: GitService, RepositoryManager, EventBus, and Enterprise Services
- Data Layer: Models, interfaces, and cache
Enterprise Service Architecture
┌─────────────────────────────────────────────────────────────┐
│ Extension Entry │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Logger │ │ Telemetry │ │ Error │ │
│ │ │ │ Service │ │ Handler │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Performance │ │ Workspace │ │ Branch │ │
│ │ Monitor │ │ State │ │ Protection │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Commit │ │ Worktree │ │ Git Blame │ │
│ │ Templates │ │ Manager │ │ Service │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Submodule │ │ LFS │ │
│ │ Manager │ │ Manager │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Available Scripts
npm run compile - Build the extension
npm run watch - Build and watch for changes
npm run lint - Run ESLint
npm run lint:fix - Fix ESLint issues
npm run test - Run tests
npm run package - Package the extension for distribution
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature)
- Commit your changes using conventional commits (
git commit -m 'feat: add amazing feature')
- Push to the branch (
git push origin feature/amazing-feature)
- Open a Pull Request
Commit Message Guidelines
We follow Conventional Commits:
feat: - New features
fix: - Bug fixes
docs: - Documentation changes
style: - Code style changes (formatting, etc.)
refactor: - Code refactoring
perf: - Performance improvements
test: - Test additions or modifications
build: - Build system changes
ci: - CI configuration changes
chore: - Other changes
License
Apache-2.0 License - see LICENSE file for details
Support
Made with ❤️ for developers who love Git