ugit-cli


Nameugit-cli JSON
Version 1.3.0 PyPI version JSON
download
home_pageNone
SummaryA minimal Git implementation in Python
upload_time2025-10-19 06:09:34
maintainerNone
docs_urlNone
authornight-slayer18
requires_python>=3.9
licenseNone
keywords git version-control vcs educational minimal
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ugit ๐Ÿš€

[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

A minimal Git implementation in Python that demonstrates the core concepts of version control systems. Perfect for learning how Git works under the hood!

## โœจ Features

### Core Git Functionality
- **Repository initialization** - Create new ugit repositories
- **File staging** - Add files to the staging area  
- **Committing** - Create commits from staged changes
- **History viewing** - Browse commit history with detailed logs
- **Checkout** - Restore files from specific commits
- **Status checking** - See which files are modified, staged, or untracked
- **Branching** - Create, switch, and manage branches
- **Merging** - Merge branches with conflict resolution
- **Remotes** - Work with remote repositories (clone, fetch, pull, push)
- **Stashing** - Temporarily save changes for later (save, list, pop, apply, drop)
- **Diffing** - Compare changes between commits, files, or working directory

### ๐ŸŒ Web Interface
- **Beautiful Dark Mode Interface** - Modern, professional repository browser
- **File Explorer** - Navigate repository files and directories with ease
- **Code Viewer** - Syntax-highlighted file viewing with line numbers
- **Commit History** - Visual commit timeline with detailed information  
- **Real-time Updates** - Dynamic loading of repository data
- **Responsive Design** - Works perfectly on desktop and mobile devices

## ๏ฟฝ Documentation

- **[Installation Guide](docs/installation.md)** - How to install and set up ugit
- **[User Guide](docs/user-guide.md)** - Complete guide to using ugit commands
- **[Examples](docs/examples.md)** - Practical examples and use cases
- **[API Reference](docs/api-reference.md)** - Technical documentation
- **[Developer Guide](docs/developer-guide.md)** - Guide for contributors
- **[Architecture](docs/architecture.md)** - System design overview
- **[FAQ](docs/faq.md)** - Frequently asked questions
- **[Troubleshooting](docs/troubleshooting.md)** - Common issues and solutions

## ๏ฟฝ๐Ÿš€ Quick Start

### Installation Options

#### Option 1: Basic Installation (CLI Only)
```bash
pip install ugit-cli
```
This installs the core ugit functionality for command-line usage.

#### Option 2: Full Installation (CLI + Web Interface)
```bash
pip install ugit-cli[web]
```
This includes the beautiful web interface for browsing repositories.

#### Option 3: Development Installation
```bash
# Clone the repository
git clone https://github.com/night-slayer18/ugit.git
cd ugit

# Install in development mode (CLI only)
pip install -e .

# Or install with web interface support
pip install -e .[web]
```

pip install -e .[web]
```

### Basic Usage

#### Command Line Interface
```bash
# Initialize a new repository
ugit init

# Add files to staging area
ugit add file.txt
ugit add .

# Create a commit
ugit commit -m "Initial commit"
ugit commit -m "Commit message" --author "Name <email@example.com>"

# Check repository status
ugit status

# View commit history
ugit log                    # Full history
ugit log --oneline         # Compact view
ugit log --graph           # ASCII graph
ugit log -n 5              # Limit to 5 commits
ugit log --since "2025-01-01"  # Since date

# Checkout commits and branches
ugit checkout <commit-sha>  # Checkout specific commit
ugit checkout <branch>      # Switch to branch
ugit checkout -b <branch>   # Create and switch to branch

# Branch management
ugit branch                 # List branches
ugit branch <name>          # Create branch
ugit branch -d <name>       # Delete branch

# Merge branches
ugit merge <branch>         # Merge branch
ugit merge <branch> --no-ff # Force merge commit

# Show differences
ugit diff                   # Working directory changes
ugit diff --staged          # Staged changes
ugit diff <commit1> <commit2>  # Between commits

# Reset operations
ugit reset                  # Unstage all files
ugit reset <commit>         # Reset to commit (soft)
ugit reset --hard <commit>  # Reset to commit (hard)
ugit reset --soft <commit>  # Reset to commit (keep staged)

# Stash operations
ugit stash                  # Stash current changes
ugit stash save "message"   # Stash with message
ugit stash list             # List all stashes
ugit stash pop              # Apply and remove latest stash
ugit stash pop 1            # Apply specific stash by index
ugit stash apply            # Apply stash without removing
ugit stash drop             # Remove stash without applying
ugit stash -u               # Include untracked files

# Remote repository operations
ugit clone <url> [directory]     # Clone repository
ugit remote                      # List remotes
ugit remote -v                   # List remotes with URLs
ugit remote add origin <url>     # Add remote
ugit remote remove <name>        # Remove remote
ugit remote show <name>          # Show remote details

# Fetch, pull, and push
ugit fetch                       # Fetch from origin
ugit fetch <remote>              # Fetch from specific remote
ugit pull                        # Pull from origin/current branch
ugit pull <remote> <branch>      # Pull specific branch
ugit push                        # Push to origin/current branch
ugit push <remote> <branch>      # Push specific branch
ugit push -f                     # Force push

# Configuration
ugit config user.name "Your Name"
ugit config user.email "you@example.com"
ugit config --list           # List all configuration
```

#### ๐ŸŒ Web Interface
```bash
# Start the web interface (requires ugit[web] installation)
ugit serve

# Custom host and port
ugit serve --host 0.0.0.0 --port 8080

# Don't open browser automatically
ugit serve --no-browser
```

The web interface provides:
- **Beautiful file browser** with syntax highlighting
- **Interactive commit history** with timeline view
- **Responsive design** that works on all devices
- **Real-time repository exploration** without command line

## ๐Ÿ“ Project Structure

```
ugit/
โ”œโ”€โ”€ ugit/                   # Main package
โ”‚   โ”œโ”€โ”€ __init__.py        # Package initialization
โ”‚   โ”œโ”€โ”€ cli.py             # Command-line interface
โ”‚   โ”œโ”€โ”€ core/              # Core functionality
โ”‚   โ”‚   โ”œโ”€โ”€ objects.py     # Object storage and hashing
โ”‚   โ”‚   โ””โ”€โ”€ repository.py  # Repository and index management
โ”‚   โ”œโ”€โ”€ commands/          # Command implementations
โ”‚   โ”‚   โ”œโ”€โ”€ init.py        # Repository initialization
โ”‚   โ”‚   โ”œโ”€โ”€ add.py         # File staging
โ”‚   โ”‚   โ”œโ”€โ”€ commit.py      # Commit creation
โ”‚   โ”‚   โ”œโ”€โ”€ log.py         # History viewing
โ”‚   โ”‚   โ”œโ”€โ”€ checkout.py    # File restoration
โ”‚   โ”‚   โ”œโ”€โ”€ status.py      # Status checking
โ”‚   โ”‚   โ”œโ”€โ”€ serve.py       # Web interface server
โ”‚   โ”‚   โ”œโ”€โ”€ branch.py      # Branch management
โ”‚   โ”‚   โ”œโ”€โ”€ merge.py       # Branch merging
โ”‚   โ”‚   โ”œโ”€โ”€ remote.py      # Remote repositories
โ”‚   โ”‚   โ”œโ”€โ”€ clone.py       # Repository cloning
โ”‚   โ”‚   โ”œโ”€โ”€ fetch.py       # Fetch from remotes
โ”‚   โ”‚   โ”œโ”€โ”€ pull.py        # Pull changes
โ”‚   โ”‚   โ”œโ”€โ”€ push.py        # Push changes
โ”‚   โ”‚   โ”œโ”€โ”€ stash.py       # Stash management
โ”‚   โ”‚   โ”œโ”€โ”€ reset.py       # Reset operations
โ”‚   โ”‚   โ”œโ”€โ”€ diff.py        # Show differences
โ”‚   โ”‚   โ””โ”€โ”€ config.py      # Configuration management
โ”‚   โ”œโ”€โ”€ web/               # Web interface components
โ”‚   โ”‚   โ”œโ”€โ”€ server.py      # FastAPI web server
โ”‚   โ”‚   โ”œโ”€โ”€ templates/     # HTML templates
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ index.html # Main interface template
โ”‚   โ”‚   โ””โ”€โ”€ static/        # Static assets
โ”‚   โ”‚       โ”œโ”€โ”€ css/       # Stylesheets
โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ style.css  # Main dark theme styles
โ”‚   โ”‚       โ””โ”€โ”€ js/        # JavaScript files
โ”‚   โ”‚           โ””โ”€โ”€ app.js     # Frontend application logic
โ”‚   โ””โ”€โ”€ utils/             # Utility functions
โ”œโ”€โ”€ tests/                 # Unit tests
โ”œโ”€โ”€ docs/                  # Documentation
โ”œโ”€โ”€ pyproject.toml        # Project configuration
โ”œโ”€โ”€ requirements.txt      # Basic dependencies
โ”œโ”€โ”€ web-requirements.txt  # Web interface dependencies
โ””โ”€โ”€ README.md            # This file
```

## ๐Ÿ”ง How It Works

ugit implements the core Git concepts:

### Object Storage
- **Blobs**: Store file contents
- **Trees**: Store directory structures  
- **Commits**: Store snapshots with metadata
- Objects are stored by SHA-1 hash in `.ugit/objects/`

### Repository Structure
```
.ugit/
โ”œโ”€โ”€ objects/           # Object storage (blobs, trees, commits)
โ”œโ”€โ”€ refs/heads/        # Branch references
โ”œโ”€โ”€ HEAD              # Current branch pointer
โ””โ”€โ”€ index             # Staging area
```

### Commands

| Command | Description | Example |
|---------|-------------|---------|
| `init` | Initialize repository | `ugit init` |
| `add` | Stage files | `ugit add file.txt` |
| `commit` | Create commit | `ugit commit -m "message"` |
| `status` | Show status | `ugit status` |
| `config` | Configuration | `ugit config user.name "John"` |
| `log` | Show history | `ugit log --oneline --graph` |
| `checkout` | Restore files/switch branches | `ugit checkout -b feature` |
| `branch` | Manage branches | `ugit branch -d old-feature` |
| `merge` | Merge branches | `ugit merge feature --no-ff` |
| `diff` | Show changes | `ugit diff --staged` |
| `reset` | Reset changes | `ugit reset --hard HEAD~1` |
| **`stash`** | **Temporarily save changes** | **`ugit stash save "WIP"`** |
| **`stash list`** | **List all stashes** | **`ugit stash list`** |
| **`stash pop`** | **Apply and remove stash** | **`ugit stash pop 1`** |
| **`stash apply`** | **Apply stash (keep it)** | **`ugit stash apply`** |
| **`stash drop`** | **Remove stash** | **`ugit stash drop 0`** |
| `clone` | Clone repository | `ugit clone <url>` |
| `remote` | Manage remotes | `ugit remote add origin <url>` |
| `fetch` | Fetch from remote | `ugit fetch origin` |
| `pull` | Pull changes | `ugit pull origin main` |
| `push` | Push changes | `ugit push -f origin main` |
| **`serve`** | **Start web interface** | **`ugit serve --port 8080`** |

## ๐Ÿงช Development

### Setup Development Environment

```bash
# Clone and install in development mode
git clone https://github.com/night-slayer18/ugit.git
cd ugit
pip install -e .[dev]

# Install pre-commit hooks
pre-commit install
```

### Running Tests

```bash
# Run all tests
pytest

# Run with coverage
pytest --cov=ugit

# Run specific test file
pytest tests/test_commands.py
```

### Code Quality

```bash
# Format code
black ugit/ tests/

# Sort imports  
isort ugit/ tests/

# Type checking
mypy ugit/

# Linting
flake8 ugit/ tests/
```

## ๐Ÿค Contributing

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

### Quick Contribution Guide

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass (`pytest`)
6. Format your code (`black .` and `isort .`)
7. Commit your changes (`git commit -m 'Add amazing feature'`)
8. Push to your branch (`git push origin feature/amazing-feature`)
9. Open a Pull Request

## ๐Ÿ“š Learning Resources

- [Git Internals](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain)
- [Building Git by James Coglan](https://shop.jcoglan.com/building-git/)
- [Git from the Bottom Up](https://jwiegley.github.io/git-from-the-bottom-up/)

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ™ Acknowledgments

- Inspired by the excellent Git internals documentation
- Built for educational purposes to understand version control systems
- Thanks to all contributors who help improve this project

## ๐Ÿ“ž Support

- ๐Ÿ“ซ Create an [issue](https://github.com/night-slayer18/ugit/issues) for bug reports or feature requests
- ๐Ÿ’ฌ Start a [discussion](https://github.com/night-slayer18/ugit/discussions) for questions
- โญ Star this repository if you find it helpful!

---

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ugit-cli",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "git, version-control, vcs, educational, minimal",
    "author": "night-slayer18",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/86/33/a90a6715c53f9f15130da68cbdc3f3477534ff16e031f922743b3d723778/ugit_cli-1.3.0.tar.gz",
    "platform": null,
    "description": "# ugit \ud83d\ude80\n\n[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nA minimal Git implementation in Python that demonstrates the core concepts of version control systems. Perfect for learning how Git works under the hood!\n\n## \u2728 Features\n\n### Core Git Functionality\n- **Repository initialization** - Create new ugit repositories\n- **File staging** - Add files to the staging area  \n- **Committing** - Create commits from staged changes\n- **History viewing** - Browse commit history with detailed logs\n- **Checkout** - Restore files from specific commits\n- **Status checking** - See which files are modified, staged, or untracked\n- **Branching** - Create, switch, and manage branches\n- **Merging** - Merge branches with conflict resolution\n- **Remotes** - Work with remote repositories (clone, fetch, pull, push)\n- **Stashing** - Temporarily save changes for later (save, list, pop, apply, drop)\n- **Diffing** - Compare changes between commits, files, or working directory\n\n### \ud83c\udf10 Web Interface\n- **Beautiful Dark Mode Interface** - Modern, professional repository browser\n- **File Explorer** - Navigate repository files and directories with ease\n- **Code Viewer** - Syntax-highlighted file viewing with line numbers\n- **Commit History** - Visual commit timeline with detailed information  \n- **Real-time Updates** - Dynamic loading of repository data\n- **Responsive Design** - Works perfectly on desktop and mobile devices\n\n## \ufffd Documentation\n\n- **[Installation Guide](docs/installation.md)** - How to install and set up ugit\n- **[User Guide](docs/user-guide.md)** - Complete guide to using ugit commands\n- **[Examples](docs/examples.md)** - Practical examples and use cases\n- **[API Reference](docs/api-reference.md)** - Technical documentation\n- **[Developer Guide](docs/developer-guide.md)** - Guide for contributors\n- **[Architecture](docs/architecture.md)** - System design overview\n- **[FAQ](docs/faq.md)** - Frequently asked questions\n- **[Troubleshooting](docs/troubleshooting.md)** - Common issues and solutions\n\n## \ufffd\ud83d\ude80 Quick Start\n\n### Installation Options\n\n#### Option 1: Basic Installation (CLI Only)\n```bash\npip install ugit-cli\n```\nThis installs the core ugit functionality for command-line usage.\n\n#### Option 2: Full Installation (CLI + Web Interface)\n```bash\npip install ugit-cli[web]\n```\nThis includes the beautiful web interface for browsing repositories.\n\n#### Option 3: Development Installation\n```bash\n# Clone the repository\ngit clone https://github.com/night-slayer18/ugit.git\ncd ugit\n\n# Install in development mode (CLI only)\npip install -e .\n\n# Or install with web interface support\npip install -e .[web]\n```\n\npip install -e .[web]\n```\n\n### Basic Usage\n\n#### Command Line Interface\n```bash\n# Initialize a new repository\nugit init\n\n# Add files to staging area\nugit add file.txt\nugit add .\n\n# Create a commit\nugit commit -m \"Initial commit\"\nugit commit -m \"Commit message\" --author \"Name <email@example.com>\"\n\n# Check repository status\nugit status\n\n# View commit history\nugit log                    # Full history\nugit log --oneline         # Compact view\nugit log --graph           # ASCII graph\nugit log -n 5              # Limit to 5 commits\nugit log --since \"2025-01-01\"  # Since date\n\n# Checkout commits and branches\nugit checkout <commit-sha>  # Checkout specific commit\nugit checkout <branch>      # Switch to branch\nugit checkout -b <branch>   # Create and switch to branch\n\n# Branch management\nugit branch                 # List branches\nugit branch <name>          # Create branch\nugit branch -d <name>       # Delete branch\n\n# Merge branches\nugit merge <branch>         # Merge branch\nugit merge <branch> --no-ff # Force merge commit\n\n# Show differences\nugit diff                   # Working directory changes\nugit diff --staged          # Staged changes\nugit diff <commit1> <commit2>  # Between commits\n\n# Reset operations\nugit reset                  # Unstage all files\nugit reset <commit>         # Reset to commit (soft)\nugit reset --hard <commit>  # Reset to commit (hard)\nugit reset --soft <commit>  # Reset to commit (keep staged)\n\n# Stash operations\nugit stash                  # Stash current changes\nugit stash save \"message\"   # Stash with message\nugit stash list             # List all stashes\nugit stash pop              # Apply and remove latest stash\nugit stash pop 1            # Apply specific stash by index\nugit stash apply            # Apply stash without removing\nugit stash drop             # Remove stash without applying\nugit stash -u               # Include untracked files\n\n# Remote repository operations\nugit clone <url> [directory]     # Clone repository\nugit remote                      # List remotes\nugit remote -v                   # List remotes with URLs\nugit remote add origin <url>     # Add remote\nugit remote remove <name>        # Remove remote\nugit remote show <name>          # Show remote details\n\n# Fetch, pull, and push\nugit fetch                       # Fetch from origin\nugit fetch <remote>              # Fetch from specific remote\nugit pull                        # Pull from origin/current branch\nugit pull <remote> <branch>      # Pull specific branch\nugit push                        # Push to origin/current branch\nugit push <remote> <branch>      # Push specific branch\nugit push -f                     # Force push\n\n# Configuration\nugit config user.name \"Your Name\"\nugit config user.email \"you@example.com\"\nugit config --list           # List all configuration\n```\n\n#### \ud83c\udf10 Web Interface\n```bash\n# Start the web interface (requires ugit[web] installation)\nugit serve\n\n# Custom host and port\nugit serve --host 0.0.0.0 --port 8080\n\n# Don't open browser automatically\nugit serve --no-browser\n```\n\nThe web interface provides:\n- **Beautiful file browser** with syntax highlighting\n- **Interactive commit history** with timeline view\n- **Responsive design** that works on all devices\n- **Real-time repository exploration** without command line\n\n## \ud83d\udcc1 Project Structure\n\n```\nugit/\n\u251c\u2500\u2500 ugit/                   # Main package\n\u2502   \u251c\u2500\u2500 __init__.py        # Package initialization\n\u2502   \u251c\u2500\u2500 cli.py             # Command-line interface\n\u2502   \u251c\u2500\u2500 core/              # Core functionality\n\u2502   \u2502   \u251c\u2500\u2500 objects.py     # Object storage and hashing\n\u2502   \u2502   \u2514\u2500\u2500 repository.py  # Repository and index management\n\u2502   \u251c\u2500\u2500 commands/          # Command implementations\n\u2502   \u2502   \u251c\u2500\u2500 init.py        # Repository initialization\n\u2502   \u2502   \u251c\u2500\u2500 add.py         # File staging\n\u2502   \u2502   \u251c\u2500\u2500 commit.py      # Commit creation\n\u2502   \u2502   \u251c\u2500\u2500 log.py         # History viewing\n\u2502   \u2502   \u251c\u2500\u2500 checkout.py    # File restoration\n\u2502   \u2502   \u251c\u2500\u2500 status.py      # Status checking\n\u2502   \u2502   \u251c\u2500\u2500 serve.py       # Web interface server\n\u2502   \u2502   \u251c\u2500\u2500 branch.py      # Branch management\n\u2502   \u2502   \u251c\u2500\u2500 merge.py       # Branch merging\n\u2502   \u2502   \u251c\u2500\u2500 remote.py      # Remote repositories\n\u2502   \u2502   \u251c\u2500\u2500 clone.py       # Repository cloning\n\u2502   \u2502   \u251c\u2500\u2500 fetch.py       # Fetch from remotes\n\u2502   \u2502   \u251c\u2500\u2500 pull.py        # Pull changes\n\u2502   \u2502   \u251c\u2500\u2500 push.py        # Push changes\n\u2502   \u2502   \u251c\u2500\u2500 stash.py       # Stash management\n\u2502   \u2502   \u251c\u2500\u2500 reset.py       # Reset operations\n\u2502   \u2502   \u251c\u2500\u2500 diff.py        # Show differences\n\u2502   \u2502   \u2514\u2500\u2500 config.py      # Configuration management\n\u2502   \u251c\u2500\u2500 web/               # Web interface components\n\u2502   \u2502   \u251c\u2500\u2500 server.py      # FastAPI web server\n\u2502   \u2502   \u251c\u2500\u2500 templates/     # HTML templates\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 index.html # Main interface template\n\u2502   \u2502   \u2514\u2500\u2500 static/        # Static assets\n\u2502   \u2502       \u251c\u2500\u2500 css/       # Stylesheets\n\u2502   \u2502       \u2502   \u2514\u2500\u2500 style.css  # Main dark theme styles\n\u2502   \u2502       \u2514\u2500\u2500 js/        # JavaScript files\n\u2502   \u2502           \u2514\u2500\u2500 app.js     # Frontend application logic\n\u2502   \u2514\u2500\u2500 utils/             # Utility functions\n\u251c\u2500\u2500 tests/                 # Unit tests\n\u251c\u2500\u2500 docs/                  # Documentation\n\u251c\u2500\u2500 pyproject.toml        # Project configuration\n\u251c\u2500\u2500 requirements.txt      # Basic dependencies\n\u251c\u2500\u2500 web-requirements.txt  # Web interface dependencies\n\u2514\u2500\u2500 README.md            # This file\n```\n\n## \ud83d\udd27 How It Works\n\nugit implements the core Git concepts:\n\n### Object Storage\n- **Blobs**: Store file contents\n- **Trees**: Store directory structures  \n- **Commits**: Store snapshots with metadata\n- Objects are stored by SHA-1 hash in `.ugit/objects/`\n\n### Repository Structure\n```\n.ugit/\n\u251c\u2500\u2500 objects/           # Object storage (blobs, trees, commits)\n\u251c\u2500\u2500 refs/heads/        # Branch references\n\u251c\u2500\u2500 HEAD              # Current branch pointer\n\u2514\u2500\u2500 index             # Staging area\n```\n\n### Commands\n\n| Command | Description | Example |\n|---------|-------------|---------|\n| `init` | Initialize repository | `ugit init` |\n| `add` | Stage files | `ugit add file.txt` |\n| `commit` | Create commit | `ugit commit -m \"message\"` |\n| `status` | Show status | `ugit status` |\n| `config` | Configuration | `ugit config user.name \"John\"` |\n| `log` | Show history | `ugit log --oneline --graph` |\n| `checkout` | Restore files/switch branches | `ugit checkout -b feature` |\n| `branch` | Manage branches | `ugit branch -d old-feature` |\n| `merge` | Merge branches | `ugit merge feature --no-ff` |\n| `diff` | Show changes | `ugit diff --staged` |\n| `reset` | Reset changes | `ugit reset --hard HEAD~1` |\n| **`stash`** | **Temporarily save changes** | **`ugit stash save \"WIP\"`** |\n| **`stash list`** | **List all stashes** | **`ugit stash list`** |\n| **`stash pop`** | **Apply and remove stash** | **`ugit stash pop 1`** |\n| **`stash apply`** | **Apply stash (keep it)** | **`ugit stash apply`** |\n| **`stash drop`** | **Remove stash** | **`ugit stash drop 0`** |\n| `clone` | Clone repository | `ugit clone <url>` |\n| `remote` | Manage remotes | `ugit remote add origin <url>` |\n| `fetch` | Fetch from remote | `ugit fetch origin` |\n| `pull` | Pull changes | `ugit pull origin main` |\n| `push` | Push changes | `ugit push -f origin main` |\n| **`serve`** | **Start web interface** | **`ugit serve --port 8080`** |\n\n## \ud83e\uddea Development\n\n### Setup Development Environment\n\n```bash\n# Clone and install in development mode\ngit clone https://github.com/night-slayer18/ugit.git\ncd ugit\npip install -e .[dev]\n\n# Install pre-commit hooks\npre-commit install\n```\n\n### Running Tests\n\n```bash\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=ugit\n\n# Run specific test file\npytest tests/test_commands.py\n```\n\n### Code Quality\n\n```bash\n# Format code\nblack ugit/ tests/\n\n# Sort imports  \nisort ugit/ tests/\n\n# Type checking\nmypy ugit/\n\n# Linting\nflake8 ugit/ tests/\n```\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n### Quick Contribution Guide\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass (`pytest`)\n6. Format your code (`black .` and `isort .`)\n7. Commit your changes (`git commit -m 'Add amazing feature'`)\n8. Push to your branch (`git push origin feature/amazing-feature`)\n9. Open a Pull Request\n\n## \ud83d\udcda Learning Resources\n\n- [Git Internals](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain)\n- [Building Git by James Coglan](https://shop.jcoglan.com/building-git/)\n- [Git from the Bottom Up](https://jwiegley.github.io/git-from-the-bottom-up/)\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Inspired by the excellent Git internals documentation\n- Built for educational purposes to understand version control systems\n- Thanks to all contributors who help improve this project\n\n## \ud83d\udcde Support\n\n- \ud83d\udceb Create an [issue](https://github.com/night-slayer18/ugit/issues) for bug reports or feature requests\n- \ud83d\udcac Start a [discussion](https://github.com/night-slayer18/ugit/discussions) for questions\n- \u2b50 Star this repository if you find it helpful!\n\n---\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A minimal Git implementation in Python",
    "version": "1.3.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/night-slayer18/ugit/issues",
        "Documentation": "https://github.com/night-slayer18/ugit/blob/main/README.md",
        "Homepage": "https://github.com/night-slayer18/ugit",
        "Source Code": "https://github.com/night-slayer18/ugit"
    },
    "split_keywords": [
        "git",
        " version-control",
        " vcs",
        " educational",
        " minimal"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cc30fcd6db5316545a8d2e21ac9acbd5154ed7a39e4183277e89befecea2ef80",
                "md5": "44677868fe02baee6b304baca908c59b",
                "sha256": "3f6c5a5c1288c3b5a5d072037956c0cf13fda9fcc45f06352b732b2a6aa6d57e"
            },
            "downloads": -1,
            "filename": "ugit_cli-1.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "44677868fe02baee6b304baca908c59b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 71186,
            "upload_time": "2025-10-19T06:09:32",
            "upload_time_iso_8601": "2025-10-19T06:09:32.968603Z",
            "url": "https://files.pythonhosted.org/packages/cc/30/fcd6db5316545a8d2e21ac9acbd5154ed7a39e4183277e89befecea2ef80/ugit_cli-1.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8633a90a6715c53f9f15130da68cbdc3f3477534ff16e031f922743b3d723778",
                "md5": "81c9d48956e171715c9881c46bab6bb1",
                "sha256": "4cdf0e64ff12f6d1025bb6e25a0abd6ebdd7f88862b11c32ee7dad2a228129c4"
            },
            "downloads": -1,
            "filename": "ugit_cli-1.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "81c9d48956e171715c9881c46bab6bb1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 73678,
            "upload_time": "2025-10-19T06:09:34",
            "upload_time_iso_8601": "2025-10-19T06:09:34.737591Z",
            "url": "https://files.pythonhosted.org/packages/86/33/a90a6715c53f9f15130da68cbdc3f3477534ff16e031f922743b3d723778/ugit_cli-1.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-19 06:09:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "night-slayer18",
    "github_project": "ugit",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "ugit-cli"
}
        
Elapsed time: 2.29002s