A clean, lightweight native Git integration plugin for Obsidian Desktop.
The plugin delegates repository, index, merge, and transport operations directly to your system's installed Git executable. By avoiding bundled JavaScript/Wasm Git reimplementations, it ensures maximum performance, security, and native Git semantics.
Supported desktop platforms: Linux, Windows, and macOS.
Show status: Open an interactive modal displaying changed files and branch sync stateFetch: Fetch remote commits without altering working treePull: Pull remote changes from upstreamCommit all changes: Stage all vault changes and create a commitPush: Push local commits to the upstream branchSync: Pull latest remote commits then push local changes{datetime} timestamp substitution (e.g., vault backup: {datetime})PATH and common platform-specific directories (/usr/bin/git, /usr/local/bin/git, Program Files, Homebrew, Xcode command-line tools)execFile) with strict argument arrays to prevent shell injectionGIT_TERMINAL_PROMPT=0)Review changed files, staged and unstaged state, and perform one-click commit or sync operations.

View branch and modified file indicators directly in the Obsidian status bar, and click to access the quick actions popup.

Trigger all operations quickly via the standard Obsidian Command Palette.

Configure custom Git executable paths, auto-fetch and auto-sync intervals, and commit message templates.

PATH (or configured via plugin settings).git init).dimanchello/obsidian-git.main.jsmanifest.jsonstyles.css.obsidian/plugins/.git-commands.main.js, manifest.json, and styles.css into that directory:<vault>/.obsidian/plugins/git-commands/
├── main.js
├── manifest.json
└── styles.css
| Setting | Default | Description |
|---|---|---|
| Git executable path | (empty) | Optional path to the git binary. When blank, the plugin searches PATH and standard system locations. |
| Commit message template | vault backup: {datetime} |
Commit message format. {datetime} is replaced with the local date and time. |
| Auto-fetch interval (seconds) | 30 |
Interval between background fetches. Set to 0 to disable. |
| Auto-sync interval (minutes) | 0 |
Interval between background syncs (pull + push). Set to 0 to disable. |
# Clone the repository
git clone https://github.com/dimanchello/obsidian-git.git
cd obsidian-git
# Install dependencies
npm ci
npm run dev — Watches source files and compiles in development mode into dist/.npm run build — Typechecks and bundles the plugin into dist/ for production.npm run check — Runs TypeScript typechecking and all unit and integration tests.npm run test:unit — Runs isolated unit tests.npm run test:integration — Runs integration tests against local Git repositories.npm version <patch|minor|major> — Updates version in package.json, manifest.json, and versions.json.src/main.ts — Obsidian entry point, commands, status bar integration, and lifecycle management.src/git/process-runner.ts — Node.js execFile abstraction avoiding shell interpolation.src/git/git-cli.ts — Maps high-level operations to Git argument vectors.src/git/git-executable-locator.ts — Searches PATH and platform directories, validates with git --version.src/git/git-service.ts — Validates command exit codes and coordinates status, fetch, pull, commit, and push.src/git/status-parser.ts — Parses Git porcelain v2 format.src/i18n/ — Typed English and Russian translations.This project is open source and available under the MIT License.