답변:
모든 저장을 원한다면 다음을 수행하십시오.
(add-hook 'after-save-hook 'my-commit-on-save)
(defun my-commit-on-save ()
"commit the buffer"
...your-code-goes-here...)
아마도 당신은 그냥 사용할 수 있습니다
(defun my-commit-on-save ()
"commit the buffer"
(call-interactively 'vc-next-action))
그러나 커밋하려는 파일 세트의 일부인지 확인하기 위해 검사를 추가해야합니다. 그렇지 않으면 저장 한 모든 버퍼가 저장소에 추가됩니다.
여기 내가 찾은 약간의 lisp가 있습니다. 모든 저장시 커밋 / 푸시를 수행하지는 않지만 가까운 시일 내에 예약하므로 작은 편집을 많이 저장하면 작은 커밋이 발생하지 않습니다.
https://gist.github.com/defunkt/449668
;; 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))
특히 Haskell 사용자 인 경우 git-monitor 유틸리티를 사용할 수도 있습니다 .
다음과 같이 해보십시오 :
(defadvice save-buffer (after commit-buffer-now activate)
(when buffer-file-name (your commit code goes here)))
이맥스 방법입니다.
save-buffer
이미 완벽하게 좋은 변수를 제공 할 때 조언을 사용해서는 안됩니다 after-save-hook
.