spacemacs/layers/+source-control/version-control
syl20bnr 29c78ce841 Defer packages by default using use-package-always-defer
Warning now `:defer t` is implied, to force a package to load `:demand t` is
now necessary.
2018-02-27 23:32:52 -05:00
..
config.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
funcs.el evilify vc-* buffers 2018-01-20 10:54:40 -05:00
keybindings.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
packages.el Defer packages by default using use-package-always-defer 2018-02-27 23:32:52 -05:00
README.org doc fmt 2018-01-27 16:57:39 +02:00

Version-Control layer

Description

This layers adds general configuration for Emacs VC. It should work with all VC backends such as Git, Mercurial, Bazaar, SVN, etc…

Features:

  • highlights uncommitted changes in the fringe or margin with diff-hl, git-gutter, or git-gutter+
  • adds vcs transient-state SPC g. to allow quick navigation and modification of buffer hunks.

Install

Layer

To use this configuration layer, add it to your ~/.spacemacs. You will need to add version-control to the existing dotspacemacs-configuration-layers list in this file.

Configuration

You can choose the package to facilitate the diff transient-state and show margins by setting version-control-diff-tool

'(version-control :variables
                  version-control-diff-tool 'diff-hl)

You can choose the side on which the diff appears (by default it's the right side)

'(version-control :variables
                  version-control-diff-side 'left)

To automatically enable diff margins in all buffers, set version-control-global-margin

'(version-control :variables
                  version-control-global-margin t)

Differences between margin programs

This layer contains generalized mappings for three diff margin packages: diff-hl, git-gutter, and git-gutter+.

There are some differences between packages that might have some people prefer one over the other:

Feature diff-hl git-gutter git-gutter+
Show in fringe X X X
Extended VCS support (e.g. hg, svn) X X
Stage hunks from buffer X X
Dired support X

Key Bindings

VC commands:

Key Binding Description
SPC g . version control transient-state
SPC g r smerge mode transient-state
SPC g h o browser at remote
SPC g v = open a hunk under the point in the diff buffer
SPC g v D compare the entire working tree with head
SPC g v e show diff against current head using ediff
SPC g v g visually annotate the current file
SPC g v d open the VC Directory buffer
SPC g v + update the working copy
SPC g v i register (add) into a version control system
SPC g v u revert working copy to their repository contents
SPC g v l list the change log
SPC g v L list the change log for the current VC controlled tree
SPC g v v do the next logical VC operation (vc-next-action)
SPC g v I ignore file (vc-ignore)
SPC g v r resolve conflicts in file

VC Directory buffer commands

You can hit SPC pv from the current project to open the VC Directory buffer, or use SPC g v d for specifying a root directory. Then you may mark (m key) files you are interested in, to form a fileset. Most commands described above are applicable to filesets too. To some of them are given shortcuts:

Key Description
= compare selected files with head
c open a commit message buffer
l list changes
a annotate selected files
i add into a version control system
r refresh directory view
E ignore file under cursor

Navigation and interaction commands in the VC Directory buffer:

Key Bindings Description
j or M-n next file
k or M-p previous file
gj or TAB next directory
gk or S-TAB previous directory
m mark a file
u unmark a file

Commit message editing buffer

In a commit message buffer press C-c C-c to commit the changes with the entered message. Pressing C-c C-k will discard the commit message and close this buffer.

Diff buffer

Key Bindings Description
C-j or M-n next hunk
C-k or M-p previous hunk
gj or J or TAB next file
gk or K or S-TAB previous file
a apply a hunk
r revert a hunk
S split the current hunk at point into two hunks
D kill a hunk
u undo killing or splitting

Log view buffer

Key Bindings Description
C-j or M-n next message
C-k or M-p previous message
gj or J or TAB next file
gk or K or S-TAB previous file
f or ENTER visit the version at point
d display a diff between the revision at point and the next earlier revision
o use for jumping to links
H toggle hiding of the full message

Annotation buffer

Key Bindings Description
J visit the annotation of the revision after this one
K visit the annotation of the revision previous to this one
L Visit the log of the revision at line
H toggle whether or not the annotation is visible
a visit the annotation of the revision identified in the current line
p visit the annotation of the revision before the revision at line
d display the diff between the current lines revision and the previous revision
f show in a buffer the file revision indicated by the current line

Version Control Transient-state

Key Binding Description
SPC g . h Show diff of hunk
SPC g . n Next hunk
SPC g . N Previous hunk
SPC g . p Previous hunk
SPC g . r Revert hunk
SPC g . s Stage hunk
SPC g . t Toggle margin indicators
SPC g . w Stage file
SPC g . u Unstage file
SPC g . d Repo diff popup
SPC g . D Show diffs of unstaged hunks
SPC g . c Commit with popup
SPC g . C Commit
SPC g . P Push repo with popup
SPC g . f Fetch for repo with popup
SPC g . F Pull repo with popup
SPC g . l Show repo log

Smerge Mode Transient-state

Key Binding Description
SPC g r n Next hunk
SPC g r N Previous hunk
SPC g r p Previous hunk
SPC g r j Go to next line
SPC g r k Go to previous line
SPC g r b Smerge keep base
SPC g r m Smerge keep mine
SPC g r a Smerge keep all
SPC g r o Smerge keep other
SPC g r c Smerge keep current
SPC g r C Smerge combine with next
SPC g r u Undo
SPC g r r Smerge refine
SPC g r q Quit transient state

Toggles

Key Binding Description
SPC T d toggle diff margins
SPC T C-d toggle diff margins globally