spacemacs/layers/+source-control/version-control
syl20bnr ebe4c60264 Revert "Defer packages by default using use-package-always-defer"
This reverts commit 29c78ce841 and all other fixes
that have been made afterwards.

The motivation is that use-package is seen by many as a replacement for
`require`. Is use-package always defer the loading of packages then is breaks
this use case, this does not respect POLA so even if it was making Spacemacs
loading faster (up to 3s faster on some startup on my machine) we just cannot
use it, it would be irresponsible. Spacemacs should be easy to use, loading
performance will come with time but it is not a priority.
2018-03-03 23:40:10 -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 Revert "Defer packages by default using use-package-always-defer" 2018-03-03 23:40:10 -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