2016-09-10 13:44:25 +00:00
#+TITLE : GitHub layer
2015-06-10 16:44:30 +00:00
2019-05-02 21:49:30 +00:00
#+TAGS : layer|versioning
2015-06-10 16:44:30 +00:00
[[file:img/github.png ]]
2019-05-07 20:05:06 +00:00
* Table of Contents :TOC_5_gh:noexport:
2017-05-22 14:16:12 +00:00
- [[#description ][Description ]]
- [[#features ][Features: ]]
- [[#install ][Install ]]
- [[#layer ][Layer ]]
- [[#git-configuration ][Git configuration ]]
- [[#hub-configuration ][Hub configuration ]]
2018-08-16 23:47:24 +00:00
- [[#magithub-configuration ][Magithub configuration ]]
2018-12-05 03:03:03 +00:00
- [[#key-bindings ][Key bindings ]]
2017-05-22 14:16:12 +00:00
- [[#magithub ][magithub ]]
2018-12-28 19:42:55 +00:00
- [[#forge ][forge ]]
2017-05-22 14:16:12 +00:00
- [[#gistel ][gist.el ]]
- [[#clone-repositories ][Clone repositories ]]
2015-06-10 16:44:30 +00:00
* Description
2016-09-10 13:44:25 +00:00
This layers adds support for [[http://github.com ][GitHub ]].
2015-06-10 16:44:30 +00:00
2015-06-10 21:16:01 +00:00
** Features:
2018-12-28 19:42:55 +00:00
- [[https://github.com/vermiculus/magithub ][magithub ]]: Magit-integrated interface to [[https://hub.github.com/ ][hub ]] command line
- [[https://github.com/magit/forge ][forge ]]: integration with various forges, such as GitHub and GitLab.
2016-09-10 13:44:25 +00:00
- [[https://github.com/defunkt/gist.el ][gist.el ]]: full-featured mode to browse and post GitHub gists.
2017-03-31 04:52:16 +00:00
- [[https://github.com/sshaw/git-link ][git-link ]]: quickly generate URLs for commits or files.
2016-09-10 13:44:25 +00:00
- [[https://github.com/dgtized/github-clone.el ][github-clone ]] allows for easy cloning and forking of repositories.
2015-06-10 16:44:30 +00:00
* Install
** Layer
2016-01-06 05:21:55 +00:00
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.
2015-06-10 16:44:30 +00:00
2016-03-29 20:01:48 +00:00
** Git configuration
You will need to generate a [[https://github.com/settings/tokens ][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=
2015-06-10 16:44:30 +00:00
2016-12-07 21:06:02 +00:00
You will also need to [[https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ ][generate an SSH key ]] and [[https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ ][add it to your GitHub account ]].
2016-03-29 20:01:48 +00:00
#+BEGIN_SRC sh
git config --global github.oauth-token <token >
#+END_SRC
2017-02-07 03:48:38 +00:00
** 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).
2018-08-16 23:47:24 +00:00
** Magithub configuration
2018-08-18 18:55:24 +00:00
Spacemacs configures =Magithub= to be in offline mode by default and disables
displaying the GitHub project status, issues, and pull requests because loading
2018-08-16 23:47:24 +00:00
project data for repositories with many pull requests or issues can be
2018-10-23 14:18:21 +00:00
exorbitantly slow (see [[https://github.com/syl20bnr/spacemacs/issues/11176 ][issue #11176 ]]). To toggle online mode and the project
2018-08-18 18:55:24 +00:00
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
2018-10-23 14:18:21 +00:00
(~@ C~ ). To enable online mode and the project status, pull requests, and
2018-08-18 18:55:24 +00:00
issues sections by default, use the following shell commands:
2018-08-16 23:47:24 +00:00
#+BEGIN_SRC sh
git config --global --bool magithub.online true
2018-08-18 18:55:24 +00:00
git config --global --bool magithub.status.includeStatusHeader true
git config --global --bool magithub.status.includePullRequestsSection true
git config --global --bool magithub.status.includeIssuesSection true
2018-08-16 23:47:24 +00:00
#+END_SRC
2018-08-18 18:55:24 +00:00
Alternatively, use the following Emacs forms:
2018-08-16 23:47:24 +00:00
#+BEGIN_SRC emacs-lisp
(magit-set "true" "--global" "magithub.online")
2018-08-18 18:55:24 +00:00
(magit-set "true" "--global" "magithub.status.includeStatusHeader")
(magit-set "true" "--global" "magithub.status.includePullRequestsSection")
(magit-set "true" "--global" "magithub.status.includeIssuesSection")
2018-08-16 23:47:24 +00:00
#+END_SRC
2018-12-05 03:03:03 +00:00
* Key bindings
2017-02-07 03:48:38 +00:00
** magithub
2017-03-31 04:52:16 +00:00
2018-12-05 03:03:03 +00:00
| Key binding | Description |
2017-04-25 15:42:58 +00:00
|-------------+--------------------------------------------------|
2018-08-18 18:55:24 +00:00
| ~@ C~ | open the Magithub settings popup |
2017-04-25 15:42:58 +00:00
| ~@ 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 |
2017-02-07 03:48:38 +00:00
2018-12-28 19:42:55 +00:00
** forge
In a =magit-status= buffer (~SPC g s~ ):
| Key binding | Description |
|-------------+-----------------------------------------------------------|
| ~b Y~ | create branch from pull-request |
| ~b y~ | create and check out branch from pull-request |
2019-01-17 02:29:26 +00:00
| ~F f~ | fetch issues and pull-requests |
| ~F n~ | fetch notifications |
| ~F p~ | create pull-request |
| ~F i~ | create issue |
| ~F F~ | list notifications |
| ~F P~ | list pull-requests |
| ~F I~ | list issues |
| ~p y~ | pull pull-requests and issues for the current repository |
2019-05-26 20:58:52 +00:00
| ~p Y~ | pull all notifications for the current repository's forge |
2018-12-28 19:42:55 +00:00
2019-04-21 20:04:25 +00:00
In a =forge-topic= buffer:
2019-01-18 11:30:06 +00:00
| Key binding | Description |
|-------------+-----------------|
| ~SPC m c~ | create new post |
| ~SPC m e~ | edit post |
In a =forge-post= buffer (assuming the major mode leader key is ~,~ )
| Key binding | Description |
|------------------------+-------------|
| ~SPC m c~ or ~SPC m ,~ | submit post |
| ~SPC m k~ or ~SPC m k~ | cancel post |
2015-06-10 16:44:30 +00:00
** gist.el
2018-12-05 03:03:03 +00:00
| Key binding | Description |
2015-06-10 16:44:30 +00:00
|-------------+-----------------------------------------------|
| ~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:
2018-12-05 03:03:03 +00:00
| Key binding | Description |
2015-06-10 16:44:30 +00:00
|-------------+------------------------------|
| ~/~ | 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 |
2015-10-31 01:28:58 +00:00
** Clone repositories
2018-12-05 03:03:03 +00:00
| Key binding | Description |
2016-07-05 03:17:30 +00:00
|---------------+----------------------------------------------------------|
| ~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 |