Bagaimana saya mengatur emacs untuk secara otomatis menerima komit setiap kali saya menyimpan file terbuka atau secara berkala?
Bagaimana saya mengatur emacs untuk secara otomatis menerima komit setiap kali saya menyimpan file terbuka atau secara berkala?
Jawaban:
Jika Anda ingin berkomitmen setiap kali menyimpan, Anda akan melakukan:
(add-hook 'after-save-hook 'my-commit-on-save)
(defun my-commit-on-save ()
"commit the buffer"
...your-code-goes-here...)
Kemungkinan Anda hanya bisa menggunakan
(defun my-commit-on-save ()
"commit the buffer"
(call-interactively 'vc-next-action))
Tapi, Anda ingin menambahkan beberapa cek untuk memastikan itu adalah bagian dari set file yang ingin Anda komit, jika tidak setiap buffer yang Anda simpan akan ditambahkan ke repositori.
Berikut adalah sedikit cadel yang saya temukan. Tidak melakukan komit / mendorong pada setiap simpan, tetapi jadwalkan untuk waktu dekat jadi jika Anda menyimpan banyak suntingan kecil Anda tidak mendapatkan banyak komitmen kecil.
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))
Anda tidak perlu emacs untuk itu sama sekali. Anda dapat menulis skrip shell yang menggunakan inotify. Itu bisa terlihat seperti ini:
while true; do
inotifywait -e modify FILES...
git commit ....
done
inotifywait adalah bagian dari inoftify-tools.
Anda juga dapat menggunakan utilitas git-monitor saya , terutama jika Anda adalah pengguna Haskell.
Coba sesuatu seperti ini:
(defadvice save-buffer (after commit-buffer-now activate)
(when buffer-file-name (your commit code goes here)))
Ini adalah cara emacs untuk melakukannya.
save-buffer
sudah memberikan variabel yang sangat baik after-save-hook
.