Git Folder Sync
Synchronize files in your Obsidian Vault with a specified directory in the designated GitHub repository (rather than the entire repository).
Git Folder Sync Obsidian Plugin
An Obsidian plugin that supports synchronization with GitHub repositories, built with a modern interface and hot reload development support.
Features
- š Bidirectional Sync: Support syncing notes to GitHub or pulling notes from GitHub
- šÆ Single File Operations: Sync individual files currently being edited
- š Batch Operations: Support batch synchronization of entire Vault
- š§ Visual Configuration: Modern configuration interface with intuitive controls
- š Hot Reload Development: Support for hot reload during development
- š Recursive Folders: Complete support for recursive synchronization of folder structures
- š Internationalization: Support for Chinese and English languages
- š¾ Smart Caching: File status caching to reduce GitHub API calls
- š Real-time Status: Status bar showing file sync status and last modified time
- š¼ļø Image Processing: Automatic image upload to cloud storage when pasting images
Installation
Manual Installation
- Download the latest release files
- Extract files to your Obsidian plugins directory:
{vault}/.obsidian/plugins/git-folder-sync/ - Restart Obsidian
- Enable the "Git Folder Sync" plugin in settings
Development Installation
-
Clone this repository to your plugins directory:
cd {vault}/.obsidian/plugins/ git clone https://github.com/Xheldon/git-folder-sync git-folder-sync cd git-folder-sync -
Install dependencies:
npm install -
Development mode (with hot reload):
npm run dev -
Build production version:
npm run build
Configuration
1. GitHub Personal Access Token
First, create a GitHub Personal Access Token:
- Visit GitHub Settings > Developer settings > Personal access tokens
- Click "Generate new token (classic)"
- Select the following permissions:
repo(Full repository access)
- Copy the generated token
2. Repository Path Configuration
Repository path formats:
https://github.com/username/repo/path/to/folder(Standard GitHub URL)username/repo/path/to/folder(Short format)
Examples:
https://github.com/yourusername/your-repo/docs/notesusername/notes/obsidian-vault
3. Image Processing Configuration (Optional)
The plugin includes an optional image processing feature that automatically uploads pasted images to cloud storage services.
Supported Cloud Storage Providers
- Aliyun OSS: Alibaba Cloud Object Storage Service
- Tencent COS: Tencent Cloud Object Storage
- AWS S3: Amazon Simple Storage Service
- Cloudflare R2: Cloudflare's S3-compatible storage
Configuration Steps
- Enable Image Processing: Turn on the "Enable Image Processing" toggle in settings
- Select Cloud Provider: Choose your preferred cloud storage service
- Configure Credentials: Enter your cloud storage credentials:
- Access Key ID / Secret ID
- Access Key Secret / Secret Key
- Bucket Name
- Region (required for all providers)
- Endpoint (required for Cloudflare R2 only)
- CDN URL (optional, for faster image loading)
Image Upload Settings
- Keep Images Locally: Optionally keep a local copy of uploaded images
- Local Image Path: Specify where to store local image copies (when enabled)
- Upload Path Template: Customize the remote storage path using variables:
{YYYY}: Current year{MM}: Current month{DD}: Current day{FILENAME}: Current file name{FOLDER}: Current folder name
How It Works
- Paste Image: When you paste an image in a markdown file
- Automatic Upload: The image is automatically uploaded to your configured cloud storage
- Link Replacement: The pasted image is replaced with a CDN link
- Local Copy (optional): A local copy is saved if enabled
Behavior Options
- Image Processing Disabled: Uses Obsidian's default image handling
- Image Processing Enabled + Cloud Storage Configured: Uploads to cloud and inserts CDN links
- Image Processing Enabled + Local Storage Only: Saves images to specified local directory
- Image Processing Enabled + No Configuration: Shows configuration reminder
Usage
Settings Interface
Click the settings icon in the left sidebar to open the configuration interface, or access it through Obsidian's plugin settings.
Note Sync Menu
While editing notes, you can access the sync menu through:
- Command palette:
Ctrl/Cmd + Pā Search for "Show Sync Menu" - Right-click in editor ā Select "Git Folder Sync"
- Status bar sync button (bottom right)
Menu options:
- Sync current file to remote: Upload current file to GitHub
- Pull remote to current file: Download file from GitHub to overwrite local
Configuration Interface Features
Basic Settings
- Interface Language: Choose between Chinese, English, or follow Obsidian
- GitHub Personal Token: Enter your access token
- GitHub Repository Path: Configure target repository and path
- Show Ribbon Icon: Toggle sidebar button visibility
Image Processing Settings
- Enable Image Processing: Master toggle for image upload functionality
- Cloud Storage Provider: Select from Aliyun OSS, Tencent COS, AWS S3, or Cloudflare R2
- Storage Credentials: Configure access keys, bucket, region, and optional CDN URL
- Local Image Storage: Option to keep local copies of uploaded images
- Upload Path Template: Customize remote storage path with date and file variables
Batch Operations (Danger Zone)
- Initialize Repository: Download all files from remote when Vault is empty
- Force Sync Remote to Local: Sync remote files to local (overwrites same-name files)
- Force Sync Local to Remote: Sync local files to remote
- Clear File Cache: Clear all cached file status data
Sponsor
- Support Development: Links to sponsor the project development
Development
Project Structure
āāā main.ts # Main plugin file
āāā types.ts # Type definitions
āāā github-service.ts # GitHub API service
āāā cos-service.ts # Cloud storage service
āāā file-cache.ts # File caching service
āāā i18n-simple.ts # Internationalization system
āāā styles.css # Stylesheet
āāā manifest.json # Plugin manifest
āāā package.json # Project configuration
āāā tsconfig.json # TypeScript configuration
āāā esbuild.config.mjs # Build configuration
āāā version-bump.mjs # Version management script
Development Commands
# Install dependencies
npm install
# Development mode (hot reload)
npm run dev
# Build production version
npm run build
# Version management
npm run version
Tech Stack
- TypeScript: Primary development language
- Obsidian API: Core plugin API
- GitHub API: Repository operations via @octokit/rest
- esbuild: Fast build tool
- i18n: Custom internationalization system
Important Notes
- Permission Requirements: Requires write access to GitHub repository
- File Conflicts: Force sync will overwrite existing files, use with caution
- Network Requirements: Requires stable network connection to access GitHub API
- Token Security: Keep your GitHub Personal Access Token secure
- Rate Limits: GitHub API has rate limits (5000 requests/hour for authenticated users)
Contributing
Issues and Pull Requests are welcome!
Sponsor
If this plugin helps you, consider buying me a coffee ā
For users in mainland China: https://www.xheldon.com/donate/
Your support motivates me to continue developing and maintaining this project!
License
MIT License
How to Install
- Download the template file from GitHub
- Move it anywhere in your vault
- Open it in Obsidian ā done!
Stats
Stars
6
Forks
0
License
MIT
Last updated 5mo ago