CLOVER🍀

That was when it all began.

Emacsでgitを使う(Magit)

これは、なにをしたくて書いたもの?

自分が使うエディタといえばEmacsなのですが、Git操作に関してはなぜかbash上で行っていることが多くてですね。

そういえばと、ふとしたはずみで「EmacsでGit操作をするには?」と思って調べてみることにしました。

結論としては、Magitというものを使うようです。

Magit

MagitのWebサイトはこちら。

It's Magit! A Git Porcelain inside Emacs

GitHubリポジトリはこちらです。

GitHub - magit/magit: It's Magit! A Git Porcelain inside Emacs.

ドキュメント。

It's Magit! User Manuals

Top (Magit User Manual)

どういうものかは、使いながら見ていこうと思います。

環境

今回の環境はこちら。

$ emacs --version
GNU Emacs 27.1
Copyright (C) 2020 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

OSは、Ubuntu Linux 22.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Magitをインストールする

インストールに関するドキュメントは、こちら。

Installation (Magit User Manual)

Melpaからインストールしようと思います。

Installing from Melpa (Magit User Manual)

M-x list-packagesでmagitを探してインストール。

インストール後に行うのはこちら。

Post-Installation Tasks (Magit User Manual)

まずはM-x magit-versionでバージョンを確認してみます。今回は20231112.914が表示されました。

その後は、このあたりを見たらいいらしいのですが。

Essential Settings (Magit User Manual)

Getting Started (Magit User Manual)

ちょっとコマンドをメモしていくことにします。

Magitを起動する

C-x gでMagitのバッファが起動します。Magitのバッファを表示する時にも使います。

カレントディレクトリがGit管理下にある場合は、そのGitリポジトリ(作業ツリー)の情報が表示されます。
Gitリポジトリではないディレクトリで起動した場合は、対象となるGitリポジトリの位置を求められます。

このバッファには、ステージングに追加されている変更、ステージングに追加されていない変更などのセクションが入ります。

このセクションはpとnで移動し、gでリフレッシュできます。

以降のコマンドは、Magitのバッファ上で入力するものと、バッファで開いているファイルに対して入力するものがあります。
後者は、Ctrl-c fで始まるものがほとんどですね。

グローバルバインディングを設定する

使ってみていて、以下の推奨に従ってキーバインディングをしておきました。

;; magit
(define-key global-map (kbd "C-x g") 'magit-status)
(define-key global-map (kbd "C-c g") 'magit-dispatch)
(define-key global-map (kbd "C-c f") 'magit-file-dispatch)

Global Bindings (Magit User Manual)

C-c fは特に入れておいた方がいいように思います。

以降は、上記設定を入れている前提で書いていきます。

リポジトリの作成

ローカルファイルシステム上でGitリポジトリを作ることはほぼないと思うので、省略します。

cloneする

リポジトリのcloneは、M-x magit-cloneです。

Cloning Repository (Magit User Manual)

ファイルのステージング、アンステージングを行う

ファイルのステージングへの追加はs、アンステージングはuです。

Staging and Unstaging (Magit User Manual)

このセクションに表示されているファイル上でEnterを押すと、そのファイルを開くことができます。

複数のファイルを1度に操作する場合は、Ctrl-SPACEで範囲を選択した後にsまたはuを行います。

また、現在バッファで表示しているファイルをステージングへ追加したい場合はCtrl-c f s、アンステージングしたい場合は
Ctrl-c f uです。

Commands for Buffers Visiting Files (Magit User Manual)

ファイルの差分を見る

d sでステージングに追加されているファイルの差分を、d uでアンステージングされているファイルの差分を見ることができます。

現在バッファで表示しているファイルの変更差分を見たい場合は、Ctrl-c f dです。

Commands for Buffers Visiting Files (Magit User Manual)

変更を破棄する

kで変更を破棄できます。

Applying (Magit User Manual)

現在バッファで表示しているファイルの変更を破棄したい場合は、Ctrl-c f , cです。

Commands for Buffers Visiting Files (Magit User Manual)

コミットする

コミットはc cで行います。

Committing (Magit User Manual)

Initiating a Commit (Magit User Manual)

または、M-x magit-commitですね。

このあとにコミットメッセージを入力するバッファが現れるので、コミットする場合はCtrl-c Ctrl-c、キャンセルする場合は
Ctrl-c Ctrl-kです。

push

pushはPです。

Pushing (Magit User Manual)

もしくは、M-x magit-pushですね。

pull

pullはFです。

Pulling (Magit User Manual)

もしくは、M-x magit-pullですね。

ブランチを操作する

ブランチに関するコマンドは、bです。

Branch Commands (Magit User Manual)

もしくは、M-x magit-branchですね。

このあと、ブランチに対するコマンドを求められます。

また、新しいブランチを直接作るのはb n(M-x magit-branch-create)、ブランチの切り替えはb l(M-x magit-branch-checkout)、 ブランチの削除はb k(M-x magit-branch-delete)、ブランチのリネームはb m(M-x magit-branch-rename`)ですね。

merge

mergeはmです。

Merging (Magit User Manual)

もしくは、M-x magit-mergeですね。

リポジトリのログを見る

l lで、リポジトリのログが見れます。

Logging (Magit User Manual)

バッファ内のログ上でEnterを押すと、そのログの詳細が見れます。

現在開いているファイルのログを見る

現在開いているファイルがGit管理下にあるものであれば、Ctl-c f lでそのファイルのログが見れます。

Commands for Buffers Visiting Files (Magit User Manual)

おわりに

こんなところでしょうか。あとは使いながら慣れていこうと思います。