magitはEmacsのgitクライアントのデファクトスタンダードです。CUIインターフェースにもかかわらず、GUIのgitクライアントに負けないすごい機能を持ち合わせています。
magitの使い方はそれこそ膨大すぎて、全て説明しようとすると1冊本が書けてしまいます。
英語ですが、emacsdocsにmagit専用のドキュメントページがあるので、ここで紹介する以上の情報が欲しい方はそちらを参考にしてください。
(use-package magit
:ensure t
:bind (("C-x g" . magit-status)
("C-x M-g" . magit-dispatch-popup))
:config
(defun mu-magit-kill-buffers ()
"Restore window configuration and kill all Magit buffers."
(interactive)
(let ((buffers (magit-mode-get-buffers)))
(magit-restore-window-configuration)
(mapc #'kill-buffer buffers)))
(bind-key "q" #'mu-magit-kill-buffers magit-status-mode-map))
説明ように適当なリポジトリを作成して、githubにも登録してみます。
mkdir html
cd html
touch index.html
git init
index.htmlにhtml 5の側だけ用意します。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
</head>
<body></body>
</html>
githubにテスト用のプライベートリポジトリを作ります。
リポジトリ名はなんでも良いのでgit-test-repoとかにします。
Githubに表示されている、こんな感じのリモートの名前は後で使うので、コピっておいてください。
magitはデフォルトでキーバインドされているコマンドは2つしかありません。
"C-x g" magit-status)と("C-x M-g" magit-dispatch-popup)です。
magitは他のemacsパッケージとは違って、どちらかというとEmacsというOSを使ってgitのクライアントを動かしているイメージです。magitを使ったgitの操作もEmacsで対話的にやるよりかはMagitクライアントの中で操作します。
magitを起動するコマンドは"C-x g" magit-status)です。最初はそれを実行してみましょう。
とてもシンプルなウィンドウが表示されます。
このバッファでは、magitのあらゆるショートカットキーが機能します。
どのコマンドがどれに紐づいているかを暗記するのは大変なので、1つだけ覚えておきましょう。
hをタイプするとmagitのヘルプが開きます。
青く強調表示されたキーをタイプすると、gitの目的の操作へ移動していきます。
最初に作成した、index.htmlをステージに上げます。
magitのバッファで、カーソルをindex.htmlに合わせて、sとタイプするとステージされます。
逆に、ステージから下ろす場合は、同じくindex.htmlにカーソルを当てて、uとタイプします。
ステージに上げた差分をコミットします。
cとタイプするとこのようなコミット操作へのウィンドウが表示されます。
上の画像を見ると、cがコミットへ進むキーになることがわかります。そのままcをタイプすると、コミットログのバッファと差分が表示されます。
コミットログバッファにfirst commitと入力し、これがコミットメッセージになります。
コミットを確定するにはC-c C-cを入力します。
magitを利用したコミットができました。
Githubのリモートを追加します。
"C-x g" magit-status)でmagitバッファを開いて、とりあえずhでヘルプを見ます。
リモート関連はMとあるので、それをタイプします。
リモートを加えるはAddなのでaをタイプします。
エコーエリアにRemote name:が表示されるので、originとタイプしてエンターを押します。
Remote url:と出るので、上の方でコピーした[email protected]:yourname/git-test-repo.gitみたいなものを貼り付けてエンターを押します。詳しくは自分で作成したGithubのリポジトリページをみてください。
Set remote.pushDefault' to "origin"? (y or n)はデフォルトのプッシュ先として設定して良いかを聞かれるので、yをタイプする。 "C-x g" magit-status)でmagitバッファを開いて、hでヘルプを見ます。
Push関連はPなのでそれをタイプします。今の設定ではorigin/mainがリモート先です。そこに向けてプッシュしたいのでpをタイプします。
エコーエリアにGit finishedが表示されればプッシュが成功しています。
"C-x g" magit-status)でmagitバッファを開いて、hでヘルプを見ます。
ログ表示はlでそれをタイプします。次のウィンドウではいくつかのログの表示オプションが提示されます。一番無難なのはローカルのブランチも、リモートのブランチも表示するbです。リモートの表示が不必要な場合はlがおすすめです。ここではリモートもチェックしたいのでbをタイプします。
Gitの操作が終わったら、magitアプリケーションを終了します。
magitはコミット操作が終わってもデフォルトでは3つのバッファを放置したままにします。
magit-process: html. %*- 171 Magit Process
magit-diff: html %%- 169 Magit Diff
magit: html %%- 233 Magit
そのままだと邪魔なので、mu-magit-kill-buffersでmagitを終了時に削除しています。
このコードはこちらの方を参考にさせてもらいました。
(defun mu-magit-kill-buffers ()
"Restore window configuration and kill all Magit buffers."
(interactive)
(let ((buffers (magit-mode-get-buffers)))
(magit-restore-window-configuration)
(mapc #'kill-buffer buffers)))
(bind-key "q" #'mu-magit-kill-buffers magit-status-mode-map)
magitはここで紹介したもの以外でも、amend、rebase、pull、force pushなどにももちろん対応しています。
どうやって操作し良いかわからなくもてヘルプを開いて、そこから目的の操作までキーをタイプして挑戦してみてください。