spacemacs/layers/+source-control/github
Miciah Masters 07aa9b01ed github: Add forge
Note that Forge binds the ' key to the Forge dispatch popup, but evil-magit
binds the ' key to the submodule dispatch popup (see
https://github.com/emacs-evil/evil-magit/issues/54), and evil-magit's key
binding takes precedence with the vim editing style.  Because Forge's key
binding does not always work, it is omitted from the README.

Note also that Magit binds the % key to its worktree dispatch popup, but
Spacemacs binds the % key to the magit-gitflow popup, and Spacemacs's key
binding takes precedence.  Because there is no available key binding for
the worktree dispatch popup, Forge's key binding under that dispatch popup
is omitted from the README.

* CHANGELOG.develop:
* layers/+source-control/github/README.org: Update.
* layers/+source-control/github/packages.el (github-packages): Add forge.
(github/init-forge): Load forge after magit. Configure forge to use
spacemacs-cache-directory.
(github/init-magithub): Disabling injecting issues and pull-requests
sections if forge is installed.
2019-01-15 00:48:48 +02:00
..
img
funcs.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
layers.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
packages.el github: Add forge 2019-01-15 00:48:48 +02:00
README.org github: Add forge 2019-01-15 00:48:48 +02:00

GitHub layer

/TakeV/spacemacs/media/commit/07aa9b01ed87264eb544a1a8b28f28d9ce6d44bf/layers/+source-control/github/img/github.png

Description

This layers adds support for GitHub.

Features:

  • magit-gh-pulls: handy magit add-on to manage GitHub pull requests.
  • magithub: Magit-integrated interface to hub command line
  • forge: integration with various forges, such as GitHub and GitLab.
  • gist.el: full-featured mode to browse and post GitHub gists.
  • git-link: quickly generate URLs for commits or files.
  • github-clone allows for easy cloning and forking of repositories.

Install

Layer

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

Git configuration

You will need to generate a personal access token on GitHub. This token should have the gist and repo permissions. Once this token is created, it needs to be added to your ~/.gitconfig

You will also need to generate an SSH key and add it to your GitHub account.

  git config --global github.oauth-token <token>

Hub configuration

For now, Magithub requires the hub utility to work before trying to use Magithub, follow the installation instructions at hub.github.com. To force hub to authenticate, you can use hub browse in a terminal (inside a GitHub repo).

Magithub configuration

Spacemacs configures Magithub to be in offline mode by default and disables displaying the GitHub project status, issues, and pull requests because loading project data for repositories with many pull requests or issues can be exorbitantly slow (see issue #11176). To toggle online mode and the project status, issues, and pull requests sections for the current repository, open in the magit status buffer (SPC g s) and then open the Magithub settings popup (@ C). To enable online mode and the project status, pull requests, and issues sections by default, use the following shell commands:

  git config --global --bool magithub.online true
  git config --global --bool magithub.status.includeStatusHeader true
  git config --global --bool magithub.status.includePullRequestsSection true
  git config --global --bool magithub.status.includeIssuesSection true

Alternatively, use the following Emacs forms:

  (magit-set "true" "--global" "magithub.online")
  (magit-set "true" "--global" "magithub.status.includeStatusHeader")
  (magit-set "true" "--global" "magithub.status.includePullRequestsSection")
  (magit-set "true" "--global" "magithub.status.includeIssuesSection")

Key bindings

magit-gh-pulls

In a magit status buffer (SPC g s):

Key binding Description
# c create a pull request
# g get a list of (or reload) all PRs in the current repository
# f fetch the commits associated with the current PR at point
# b create a branch for the current PR at point
# m merge the PR with current branch at point
# d show a diff of the current pull request at point
# o open PR at point in browser

Note that magit-gh-pulls will try to fast-forward the PRs whenever it is possible.

magithub

Key binding Description
@ C open the Magithub settings popup
@ H opens the current repository in the browser
@ c pushes a brand-new local repository up to GitHub
@ f create a fork of an existing repository
@ p submit pull request upstream
@ i create an issue

forge

In a magit-status buffer (SPC g s):

Key binding Description
F y pull pull-requests and issues for the current repository
F Y pull all notifications for the current repository's forge
b Y create branch from pull-request
b y create and check out branch from pull-request

gist.el

Key binding Description
SPC g g b create a public gist with the buffer content
SPC g g B create a private gist with the buffer content
SPC g g l open the gist list buffer
SPC g g r create a public gist with the region content
SPC g g R create a private gist with the region content

In the gist list buffer:

Key binding Description
/ evil search
+ add buffer to gist
- remove file for gist
b or o open current gist in browser
f fetch current gist
g refresh the list
h go left
j go down
k go up
K kill current gist
l go right
n next search occurrence
N next previous occurrence
v visual state
V visual-line state
y print URL and copy it

Clone repositories

Key binding Description
SPC g h c / search for a repository to clone it
SPC g h c c clone and optionally fork repository
SPC g h c r add a remote that is an existing fork of selected remote
SPC g h c f fork remote in current user namespace
SPC g h c u add upstream as remote