Skip to content

findingjimoh/git-auto-sync

 
 

Repository files navigation

Git Auto Sync

GitAutoSync is a simple command line program to automatically commit changes to your git repo, and always keep that repo up to date. This way you can use any editor with your text files, and never need to worry about comitting and remembering to push and pull changes.

Installation

  • OSX - brew install GitJournal/tap/git-auto-sync
  • Linux -
    • Ubuntu/Debian -

      sudo echo "deb [trusted=yes] https://apt.fury.io/vhanda/ /" | sudo tee /etc/apt/sources.list.d/git-auto-sync.list
      sudo apt-get update
      sudo apt-get install -y git-auto-sync
    • Fedora/RPM -

      sudo echo -e "[git-auto-sync]\nname=Git-Auto-Sync\nbaseurl=https://yum.fury.io/vhanda/\nenabled=1\ngpgcheck=0" | sudo tee /etc/yum.repos.d/git-auto-sync.repo
      sudo yum update
      sudo yum install -y git-auto-sync
    • Arch Linux - Please write an AUR package and open a PR for this. You're an Arch User. You got this.

    • Other - Download the latest release

  • Windows - Download the latest release

How to use?

GitAutoSync comes with a manual and daemon mode. It's recommended to start with the manual mode to ensure authentication is working correctly. It internally just calls the git executable so, if that works, git-auto-sync should just work.

You can test it out by running git-auto-sync sync to commit, pull, rebase and push any changes. If there are no changes, it will just attempt to pull, rebase and push.

Once you're satisfied that git-auto-sync is working for you. You can run git-auto-sync daemon add <repoPath> to start a background daemon which will continously monitor that repo for any changes in the file system and accordingly sync the changes.

This daemon will be automatically started as a system process.

You can check if it is running git-auto-sync daemon status

Background Daemon

The background daemon will be started / stopped automatically if there are any repos to watch in git-auto-sync daemon ls. This process will monitor the filesystem, poll every 10 minutes, and additionally try to sync on resuming from a suspend. The latter two are done to pick up changes from the remote.

Merge Conflicts

GitAutoSync current only supports rebases, and doesn't yet attempt to do a merge. In the case of a rebase conflict, it will abort and stop syncing that repo. It will send a system notification to inform you of the conflict.

Ignored Files

It currently ignores all hidden files, files ignored by git, and additional temporary swap files created by vim, emacs and similar editors.

Fork Changes (findingjimoh/git-auto-sync)

This is a fork of GitJournal/git-auto-sync with the following fixes:

Environment inheritance fix (common/commit.go)

Upstream stripped all environment variables except HOME from git subprocesses. This broke tools like git-crypt that need to be in PATH. Fixed toEnvString() to inherit the full parent process environment when no custom env is configured (the default for daemon/watcher mode). When custom env IS set (via --env flag), it merges with the parent's HOME as before. Also fixed a double-append bug introduced in upstream commit 50cb029 that duplicated every custom env var.

Error resilience fix (common/watch.go)

Upstream used log.Fatalln() in the watch loop error handlers, which killed the entire process when any single repo failed to sync. Changed to log.Println() so errors are logged and the watcher retries on the next event or poll cycle, rather than crashing monitoring for all repos.

Explicit remote/branch in pull (common/autosync.go)

Changed git pull --rebase --autostash to git pull --rebase --autostash origin main to avoid "Cannot rebase onto multiple branches" errors when FETCH_HEAD contains entries from multiple fetch operations.

Similar Projects

About

Automatically Sync Git Repos

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Go 96.9%
  • Shell 1.5%
  • PowerShell 1.1%
  • Makefile 0.5%