https://github.com/colonelpanic8/git-sync-rs
Rust implementation of automatic git repository synchronization with file watching
https://github.com/colonelpanic8/git-sync-rs
Last synced: 5 months ago
JSON representation
Rust implementation of automatic git repository synchronization with file watching
- Host: GitHub
- URL: https://github.com/colonelpanic8/git-sync-rs
- Owner: colonelpanic8
- License: apache-2.0
- Created: 2025-08-16T06:14:39.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-09-10T05:41:01.000Z (10 months ago)
- Last Synced: 2025-09-10T09:01:14.084Z (10 months ago)
- Language: Rust
- Size: 130 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# git-sync-rs
[](https://github.com/colonelpanic8/git-sync-rs/actions)
[](https://crates.io/crates/git-sync-rs)
[](https://docs.rs/git-sync-rs)
[](https://opensource.org/licenses/MIT)
[](https://opensource.org/licenses/Apache-2.0)
A Rust implementation of automatic git repository synchronization with file watching capabilities. This tool automatically commits, pushes, and pulls changes to keep your repositories in sync.
## Features
- ๐ **Automatic synchronization** - Commits, fetches, pushes, and merges/rebases automatically
- ๐ **File watching** - Monitors file changes and triggers sync with debouncing
- ๐ซ **Gitignore support** - Respects `.gitignore` patterns
- ๐ฆ **Repository cloning** - Automatically clones repositories if they don't exist
- ๐ **SSH authentication** - Works with SSH keys (with fallback to git command)
- โก **Efficient** - Only syncs when changes are detected
- ๐งช **Dry-run mode** - Test your configuration without making changes
- ๐ง **Flexible configuration** - Configure via TOML, environment variables, or CLI
## Installation
```bash
cargo install git-sync-rs
```
## Usage
### Basic Commands
```bash
# Check if repository is ready to sync
git-sync-rs /path/to/repo check
# Perform one-time sync
git-sync-rs /path/to/repo sync
# Watch for changes and auto-sync
git-sync-rs /path/to/repo watch
# Watch with custom intervals
git-sync-rs /path/to/repo watch --debounce 2 --interval 300
```
### Environment Variables
Fully compatible with the original `git-sync` environment variables:
- `GIT_SYNC_DIRECTORY` - Repository path
- `GIT_SYNC_REPOSITORY` - Repository URL for initial clone
- `GIT_SYNC_INTERVAL` - Sync interval in seconds
- `GIT_SYNC_NEW_FILES` - Whether to add new files (true/false)
- `GIT_SYNC_REMOTE` - Remote name (default: origin)
- `GIT_SYNC_COMMIT_MESSAGE` - Custom commit message template
### Watch Mode
Watch mode monitors your repository for changes and automatically syncs them:
```bash
# Basic watch mode
git-sync-rs watch /path/to/repo
# With custom debounce (wait 2 seconds after changes)
git-sync-rs watch /path/to/repo --debounce 2
# With periodic sync every 5 minutes
git-sync-rs watch /path/to/repo --interval 300
# Dry run mode (detect changes but don't sync)
git-sync-rs watch /path/to/repo --dry-run
```
### Configuration File
Create a configuration file at `~/.config/git-sync-rs/config.toml`:
```toml
[defaults]
sync_interval = 300
sync_new_files = true
commit_message = "Auto-sync: {hostname} at {timestamp}"
remote_name = "origin"
[[repositories]]
path = "~/my-notes"
sync_new_files = true
[[repositories]]
path = "~/my-docs"
remote_name = "backup"
```
## Command Line Options
- `-n, --new-files` - Sync new/untracked files
- `-r, --remote ` - Specify remote name
- `-d, --directory ` - Repository path
- `-v, --verbose` - Enable verbose output
- `-q, --quiet` - Suppress non-error output
- `--config ` - Use alternate config file
## Compatibility
This tool is designed to be a drop-in replacement for `git-sync-on-inotify` with additional features and better performance.
## License
Licensed under either of:
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
at your option.