Automatically commit to git after each save
Find a file
2022-12-07 08:47:52 -08:00
.github/workflows Add newer Emacs versions to tests 2022-12-07 08:47:52 -08:00
tests Make git a little quieter 2022-12-07 08:38:01 -08:00
.gitignore Fix new files not being committed 2019-12-10 21:18:17 -08:00
Cask Fix new files not being committed 2019-12-10 21:18:17 -08:00
CONTRIBUTING Update contributing instructions 2020-01-12 17:56:17 -08:00
COPYING Added COPYING file 2012-01-10 21:48:17 +01:00
git-auto-commit-mode.el Bump version, update news 2020-08-27 23:53:52 -07:00
INSTALL Add other complementary files 2013-04-10 01:51:30 +02:00
NEWS Bump version, update news 2020-08-27 23:53:52 -07:00
README.org Add note about how to set the customization options 2020-11-17 18:27:41 -08:00

git-auto-commit-mode

NAME

git-auto-commit-mode - Emacs minor mode to automatically commit (and push) a git repository.

SYNOPSIS

M-x git-auto-commit-mode <RET>

DESCRIPTION

git-auto-commit-mode is an Emacs minor mode that tries to commit changes to a file after every save.

The commit message sent to git is always the filename of the file saved, relative to the root of the git repository.

USAGE

When enabled, git-auto-commit-mode uses the after-save-hook to commit changes to git each time. If gac-automatically-push-p is non-nil it also tries to push the HEAD to the current upstream. Making sure that upstream is properly set is the responsibility of the user.

Enabling

Since git-auto-commit-mode is a regular minor mode you have more than one option to enable it.

As a file-local variable

If you're using Emacs 24 or newer you should set an eval file-local variable:

  ;; -*- eval: (git-auto-commit-mode 1) -*-

If you're using an older version of Emacs, that should be:

  ;; -*- mode: git-auto-commit -*-

As a directory-local variable

Create a .dir-locals.el file in the directory where you want git-auto-commit-mode to be enabled. This will also apply to any subdirectories, so be careful. For more information see the Per-Directory Local Variables section in the Emacs manual. Then put one of the following snippets of code in there:

If you're using Emacs 24 or newer you should set an eval variable:

  ((nil . ((eval git-auto-commit-mode 1))))

If you're using an older version of Emacs, that should be:

  ((nil . ((mode . git-auto-commit))))

As a hook

To enable git-auto-commit-mode each time a certain-hook runs:

  (add-hook 'certain-hook 'git-auto-commit-mode)

CUSTOMIZATION

git-auto-commit-mode is a simple mode, as such it offers little customization.

gac-automatically-push-p
A boolean value indicating whether or not git-auto-commit-mode should try to push the git repository's HEAD to its default upstream. Setting up the upstream is the user's responsibility.
gac-automatically-add-new-files-p
A boolean value indicating whether or not git-auto-commit-mode should add new (untracked) files to the repository.
gac-ask-for-summary-p
A boolean value indicating whether or not git-auto-commit-mode should ask the user for a commit message every time a commit is made. Note: Since the summary is asked for before the commit, but after the file has been saved, pressing C-g while entering the Summary will stop the commit from being made, but not the file from being saved.
gac-shell-and
A string that can be used to change how the shell combines commands. The default " && " is good for bash-like shells, but " ; and " would be used for fish, for example.
gac-debounce-interval
A number specifying a buffer between automatic commits in seconds. Wait with making an actual commit until this number of seconds elapses.
gac-add-additional-flag
A string that can be used to add additional command line flags to the git add command.
gac-commit-additional-flag
A string that can be used to add additional command line flags to the git commit command.
gac-silent-message-p
A boolean value indicating whether to display the commit summary message, which is usually displayed in the minibuffer. The default is nil, meaning that the summary would be displayed on every commit.

To set any of these options, you can:

  • Use the customization interface (M-x customize-group git-auto-commit-mode).
  • Set the defaults in your Emacs initialization file using:

      (setq-default gac-ask-for-summary-p t)
  • Set values in a hook:

      (defun set-my-settings ()
        (setq gac-automatically-push-p t))
    
      (add-hook 'org-mode-hook 'set-my-settings)
  • Set values in a .dir-locals.el (see Per-Directory Local Variables):

      ((nil . ((gac-shell-and . " ; and "))))