GitNova - Advanced Git Integration
A comprehensive git plugin for Visual Studio Code that provides advanced git operations through an intuitive, performant, and modern user interface.
Features
- 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
- Status Bar Integration: Quick access to branch, status, and sync information
- Tree Views: Native VSCode tree views for branches, commits, stashes, and remotes
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
Coming soon!
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
Development
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
│ ├── views/ # Webview panel managers
│ ├── webview/ # Webview UI code
│ ├── utils/ # Utility functions
│ ├── types/ # TypeScript type definitions
│ └── constants/ # Constants and enums
├── webviews/ # React webview source
│ ├── components/ # React components
│ ├── state/ # State management
│ ├── utils/ # Utility functions
│ └── styles/ # CSS/SCSS files
├── test/ # Test files
├── resources/ # Icons and schemas
└── .vscode/ # VSCode configuration
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
Configuration
The extension can be configured through VSCode settings:
{
"gitNova.autoRefresh": true,
"gitNova.refreshInterval": 60000,
"gitNova.showStatusBar": true,
"gitNova.defaultBranchName": "main",
"gitNova.showRemoteBranches": true,
"gitNova.branchSortOrder": "recent",
"gitNova.showCommitGraph": true,
"gitNova.diffViewMode": "unified",
"gitNova.ignoreWhitespace": false,
"gitNova.showLineNumbers": true,
"gitNova.autoStashBeforeRebase": false,
"gitNova.autoFetch": false
}
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
- Data Layer: Models, interfaces, and cache
For detailed architecture information, see the architecture documentation in the plans/ directory.
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature)
- Commit your changes (
git commit -m 'Add amazing feature')
- Push to the branch (
git push origin feature/amazing-feature)
- Open a Pull Request
License
Apache-2.0 License - see LICENSE file for details