Emacs + git: auto commit a cada 5 minutos

7

Como posso configurar o emacs para fazer o commit automaticamente toda vez que eu salvar um arquivo aberto ou periodicamente?

    
por Tanami 18.04.2010 / 08:29

6 respostas

3

Se você quisesse se comprometer a cada salvamento, você faria:

(add-hook 'after-save-hook 'my-commit-on-save)
(defun my-commit-on-save ()
   "commit the buffer"
   ...your-code-goes-here...)

Provavelmente você poderia usar apenas

(defun my-commit-on-save ()
   "commit the buffer"
   (call-interactively 'vc-next-action))

Mas, você desejará adicionar algumas verificações para garantir que seja parte do conjunto de arquivos que deseja confirmar, caso contrário, todos os buffers salvos serão adicionados a um repositório.

    
por 19.04.2010 / 00:35
4

Eu uso git-wip para isso (veja meu responder em SO).

    
por 07.05.2010 / 17:11
3

Aqui está um pouco de lisp que eu encontrei. Não faz commit / push em todos os saves, mas o programa para o futuro próximo, então se você salvar um monte de pequenas edições você não recebe um monte de pequenos commits.

link

;; Automatically add, commit, and push when files change.

(defvar autocommit-dir-set '()
  "Set of directories for which there is a pending timer job")

(defun autocommit-schedule-commit (dn)
  "Schedule an autocommit (and push) if one is not already scheduled for the given dir."
  (if (null (member dn autocommit-dir-set))
      (progn
        (run-with-idle-timer
         10 nil
         (lambda (dn)
           (setq autocommit-dir-set (remove dn autocommit-dir-set))
           (message (concat "Committing org files in " dn))
           (shell-command (concat "cd " dn " && git commit -m 'Updated org files.'"))
           (shell-command (concat "cd " dn " && git push & /usr/bin/true")))
         dn)
        (setq autocommit-dir-set (cons dn autocommit-dir-set)))))

(defun autocommit-after-save-hook ()
  "After-save-hook to 'git add' the modified file and schedule a commit and push in the idle loop."
  (let ((fn (buffer-file-name)))
    (message "git adding %s" fn)
    (shell-command (concat "git add " fn))
    (autocommit-schedule-commit (file-name-directory fn))))

(defun autocommit-setup-save-hook ()
  "Set up the autocommit save hook for the current file."
  (interactive)
  (message "Set up autocommit save hook for this buffer.")
  (add-hook 'after-save-hook 'autocommit-after-save-hook nil t))
    
por 23.07.2013 / 19:16
2

Você não precisa do emacs para isso. Você pode escrever um script de shell que use inotify. Poderia ser assim:

while true; do
    inotifywait -e modify FILES...
    git commit ....
done

inotifywait faz parte do inoftify-tools.

    
por 18.04.2010 / 09:21
2

Você também pode usar o meu utilitário git-monitor , especialmente se for um usuário do Haskell.

    
por 23.07.2013 / 20:39
-1

Tente algo assim:

(defadvice save-buffer (after commit-buffer-now activate)
  (when buffer-file-name (your commit code goes here)))

Esta é a maneira do emacs para fazer isso.

    
por 18.04.2010 / 23:09