ClaudiaFang1k downloadsBoth mobile and desktop. Selectively sync the notes you choose—not your whole vault—with GitHub, GitLab, or Gitea. No local Git repository required.
Selective, file-by-file sync between your Obsidian vault and GitHub, GitLab, or Gitea.
Review changes, choose exactly what to sync, and apply them through a clear Source Control workflow — without syncing your entire vault.
Unlike full-vault sync solutions, Git File Sync gives you control over exactly which files leave your device. Keep personal notes private while selectively synchronizing project files through a real Git repository. No local .git repository or Git CLI is required.
Review repository changes, choose what to sync, and apply them through the Sync Queue.
Git File Sync uses a simple Source Control workflow:
Review → Queue → Sync
A selected change moves from Repository Changes into the Sync Queue, so the same change is never shown in both places at once.
The Source Control view separates work into two clear areas:
Files that need attention but are not yet part of the next sync. Use search, filters, and Tree/List view to narrow the workspace.
Changes selected for the next sync operation. Each queued item shows the action that will be applied:
One Sync action builds a combined plan. Remote additions, modifications, moves, and deletions are committed together, while downloads are applied locally after review.
| Status | Meaning |
|---|---|
A |
Added locally |
M |
Modified locally |
D |
Deleted locally |
R |
Renamed or moved |
↓ |
Available remotely |
↕ |
Modified remotely |
! |
Conflict |
S |
Synced |
Deleted locally: adding a
Dchange to the Sync Queue deletes the tracked file from the remote repository by default. Use Download instead if you want to restore the remote copy locally.
| Situation | What happens |
|---|---|
| New local file | A → Queue → Upload |
| Local edit | M → Queue → Upload |
| File exists only remotely | ↓ → Queue → Download |
| Remote version changed | ↕ → Queue → Download |
| Local tracked file deleted | D → Queue → Delete remote |
| Local deletion was accidental | D → Download to restore locally |
| File renamed or moved | R → Queue → Upload as a move |
| Both sides changed | ! → review conflict → Keep Local or Keep Remote |
Select a changed file to inspect its local and remote versions before syncing. The diff viewer supports unified and side-by-side layouts and shows addition/deletion statistics where available.
Review local and remote differences before deciding which version to keep.
When both sides changed, Git File Sync keeps the conflict explicit. Choose Keep Local to overwrite the remote version or Keep Remote to accept the remote copy locally.
| Provider | Hosting | Min. version |
|---|---|---|
| github.com · GitHub Enterprise | — | |
| gitlab.com · self-hosted | GitLab 13.0+ | |
| self-hosted | Gitea 1.12+ |
Choose a provider and configure the repository under Settings → Git File Sync.
| Provider | Required information | Recommended permission |
|---|---|---|
| GitHub | Token, owner, repository | Fine-grained token with Contents: Read and write |
| GitLab | Token, project ID, base URL | read_repository, write_repository |
| Gitea | Token, owner, repository, base URL | write:repository on Gitea 1.19+ |
Other settings include language, branch, repository root path, vault-folder scope, startup refresh, ignore patterns, and symbolic-link handling. See Symbolic link handling for details.
Security: scope tokens to the smallest possible repository access and permissions, set an expiration where possible, and never place a token inside a note that may be synced. Revoke and rotate a token immediately if it may have been exposed.
The same Source Control model is available on Obsidian Mobile. The Sync Queue starts compact so Repository Changes remain easy to browse, and selecting a change opens a mobile-friendly detail/diff view.
A practical multi-device habit is still useful: refresh before editing on another device, review what changed, then sync only the files you intend to move between devices.
main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/git-file-sync/.git clone https://github.com/firstsun-dev/git-files-sync.git
npm install
npm run dev # watch build
npm run build # type-check + production build
npm run test # vitest suite
npm run lint # eslint
MIT
Created by ClaudiaFang · firstsun-dev