As I couldn't find a comprehensive docu on using git in emacs I am aggregating everything I need for daily work here. (hopefully the list will grow by time) You can use the VC (git support is part of emacs since >=22.1) respectively the DVC extension of emacs but it's not the way I wanted to have an interface to git. If you want to do so i found this article useful on the VC and this useful on the DVC mode.
After evaluation I've decided to use git.el which
is part of the git distribution. It's for me the more intuitive
approach to it and sadly none of the solutions is perfect. The main
points missing for me are (subset from the TODO list):
- diff against other branch
- renaming files from the status buffer
- creating tags
- fetch/pull
- switching branches
- git-show-branch browser
In gentoo that means we have to install git with emacs USE enabled:
$ USE="emacs" emerge git
Now we have the git.el installed in
site-lisp. The problem now is the way the module is
loaded in site-gentoo.el because it's only loaded if
emacs doesn't support git in VC (that's only the case for emacs
< 22.1). So what we have to do is to load the
git.el regardless if it's already supported in VC.
Therefore you have to add the following lines to your
~/.emacs
(add-to-list 'load-path "/usr/share/emacs/site-lisp/git")
(add-to-list 'vc-handled-backends 'GIT)
(autoload 'git-status "git" "Entry point into git-status mode." t)
(autoload 'git-blame-mode "git-blame"
"Minor mode for incremental blame for Git." t)
;keybindindings for git
(global-set-key "\C-xgs" 'git-status)
As you can see I've also added a key binding to get into the
git-status-mode. If you enter C-x g s you'll get a new
buffer in which the actual git-status is shown. I
really recommend to use gitignore else the buffer is
getting long in short time.
This buffer is now your interface to
git. The most used shortcuts for me are:
m - mark the file the cursor is on ATM
M - mark all files in buffer
u/DEL - unmark file below/above
R - resolve conflicts during merge
a - add file to repository
r - remove file
i - add file to ignore list
c - commit
U - Undo -> revert file
l - see log file
g - refresh the status buffer
q - quit status buffer
? - get help!
I'd appreciate any improvements sent to me!