Skip to main content

Automated, paranoid git backups for students and casual coding.

Project description

🔭 Git Pulsar (v0.3.0)

Tests Python 3.12+ License: MIT Ruff Pre-commit

Automated, paranoid git backups for students and casual coding.

Git Pulsar is a background daemon that wakes up every 15 minutes, commits your work to a secluded wip/pulsar branch, and pushes it to your remote. It ensures that even if your laptop dies, your uncommitted work is safe on the server—without polluting your main history.


⚡ Features

  • Set & Forget: Runs silently in the background via launchd (macOS) or systemd (Linux).
  • Non-Intrusive: Commits are pushed to a separate branch (wip/pulsar). Your main branch stays clean.
  • Smart Checks:
    • Detects if the repo is busy (merging/rebasing) and yields.
    • Prevents accidental upload of large files (>100MB).
    • Auto-generates .gitignore for Python/LaTeX projects if missing.
  • System Integration: Native desktop notifications on success or failure.

📦 Installation

macOS (Recommended)

Install via Homebrew to handle the daemon registration automatically.

brew tap jacksonfergusondev/tap
brew install git-pulsar
brew services start git-pulsar

Linux / Generic

Install via uv (or pipx) to isolate the environment, then register the systemd service.

uv tool install git-pulsar
git-pulsar install-service

🚀 Usage

1. Activate a Repository

Navigate to any project you want to back up and initialize Pulsar.

cd ~/University/Astro401
git-pulsar

This registers the path in the local registry (~/.git_pulsar_registry) and ensures the wip/pulsar branch exists.

2. Work Normally

You do not need to do anything else. Pulsar wakes up every 15 minutes to:

  1. Check for changes.
  2. Commit them to wip/pulsar.
  3. Push to origin.

3. Retrieve Your Work

When you are ready to finalize your work, you can squash the backup history into your main branch:

git checkout main
git merge --squash wip/pulsar
git commit -m "Finalized assignment submission"

🛑 Stopping the Service

To deregister the background daemon and stop all backups:

git-pulsar uninstall-service

🔧 Requirements

  • Python 3.12+
  • Headless Auth: Your git authentication must be non-interactive (SSH keys or a cached Credential Helper). Pulsar runs in the background and cannot prompt for passwords.

🛠️ Development

This project uses modern Python tooling.

  1. Clone and Install Dependencies:

    git clone [https://github.com/jacksonferguson/git-pulsar.git](https://github.com/jacksonferguson/git-pulsar.git)
    cd git-pulsar
    uv sync
    
  2. Setup Pre-commit Hooks:

    pre-commit install
    
  3. Run Tests: We use pytest for testing and hypothesis for property-based testing.

    pytest
    

📂 Project Structure

.
├── LICENSE
├── pyproject.toml
├── README.md
├── uv.lock
├── src
│   ├── __init__.py
│   ├── cli.py         # Entry point & repo setup logic
│   ├── daemon.py      # Core backup loop & git operations
│   └── service.py     # Background service installer (launchd/systemd)
└── tests
    ├── test_cli.py
    ├── test_daemon.py
    └── test_properties.py

📄 License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git_pulsar-0.3.0.tar.gz (3.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

git_pulsar-0.3.0-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file git_pulsar-0.3.0.tar.gz.

File metadata

  • Download URL: git_pulsar-0.3.0.tar.gz
  • Upload date:
  • Size: 3.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for git_pulsar-0.3.0.tar.gz
Algorithm Hash digest
SHA256 002d9412bcc00f31dec955d54d545ed6d42b7dc147d9eaa3487099cf21d69de5
MD5 e3c453c1706604697911b74bab0f6db7
BLAKE2b-256 65149b05cca9ed1c8965bea703760010007b06f2564b5f4217c6e13f4b0dc455

See more details on using hashes here.

File details

Details for the file git_pulsar-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: git_pulsar-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for git_pulsar-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 30d443f943fb6c0355b895fdcb6eabab09dd7cef0bfc2123f53ac53594857a70
MD5 6d28da541237d32b7da121ffe5b43ab8
BLAKE2b-256 80aefe5de3e85c19f43e7b980dc292cab8c9bcfabbb163cc1d8799ce73dbcda3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page