emacsのmagitパッケージの使い方


Table of Contents

1 magitとは

emacs上でgitクライアントの操作を可能にするelispパッケージです。

emacsを使ったままブランチを切り替えたり、コミットしたりすることができます。

2 magitのインストール方法

emacs24ではpackage-list-packagesコマンドでインストールします。

gnuのリポジトリにないので.emacsにmarmaladeのリポジトリを追加します。

;; repository for package-list-packages(require ‘package)(add-to-list ‘package-archives ‘(“marmalade” . “http://marmalade-repo.org/packages/”))(package-initialize)

M-x package-list-packagesと入力してmagitを選択します。

macrostep 0.8 available interactive macro stepper for Emacs Lispmactag 0.0.1 available Mode for automatically handle multiple tags files with Mactag rubygemmagit 2.2.1 available A Git porcelain inside Emacsmagit-find-file 1.0.4 available completing-read over all files in Gitmagit-gh-pulls 0.3 available GitHub pull requests extension for Magit

3 .emacsの設定

package-list-packagesコマンドでパッケージをインストールした場合はrequreの追記は不要です。

magit-statusコマンドのショートカットのみを追加します。

C-x gをショートカットにします(Ctrl + xを押してからgを押す)。

;; magit(global-set-key (kbd “C-x g”) ‘magit-status)

3.1 256色でない環境でのdiffの色を変更

GNU Screenを使っている場合、TERM変数がscreenとなり8色表示となります。

magitは256色前提で作られている為、diffが大変見づらいです。

.screenrcでtermを256色のものに変えても良いのですが、私は以下を.emacsに追加しています。

(custom-set-faces ‘(magit-diff-added ((t (:background “black” :foreground “green”)))) ‘(magit-diff-added-highlight ((t (:background “white” :foreground “green”)))) ‘(magit-diff-removed ((t (:background “black” :foreground “blue”)))) ‘(magit-diff-removed-highlight ((t (:background “white” :foreground “blue”)))) ‘(magit-hash ((t (:foreground “red”)))))

M-x customizeでmagitを検索して、色を変更してC−xキーC-sキーでセーブすれば、.emacsに反映されます。

4 magit-statusコマンド

git cloneしたディレクトリでemacsを起動します。

C-x gでmagit-statusコマンドを呼び出すと以下のようなバッファに切り替わります。

Remote: master @ origin (ssh://acer//home/hiroom2/repo/test.git)Local: master ~/tmp/test/Head: 23f6e53 Add new file with multiple line commit message. refs #0 Hello, World

以降で使用するショートカットはmagit-statusコマンド等のバッファ上で実行する必要があります。

一度ソースコードの編集バッファに移った場合はmagit関連のバッファに戻るか、C-x gでmagit-statusを呼び出す必要があります。

5 ブランチの操作

bキーを押すとブランチ操作のバッファが開きます。

Actionsv: Branch manager c: Create r: Renamek: Delete b: Checkout

bキー vキーを押すことでブランチの一覧が表示されます。

Local:23f6e53 # master [@ origin]origin (ssh://acer//home/hiroom2/repo/test.git): HEAD -> master23f6e53 master

bキー cキーを押すことでブランチを作成できます。

testというブランチ名にします。

Create branch: test

masterから派生したものにします。

Parent (default master): master

別途anythingパッケージを入れておくことで入力を選択形式で選ぶことができます。

もう一度bキー vキーを押すとtestというブランチが追加されたことがわかります。masterにカーソルを合わせてEnterキーを押すことでmasterブランチに戻すこともできます。

Local:23f6e53 master [@ origin]23f6e53 # testorigin (ssh://acer//home/hiroom2/repo/test.git): HEAD -> master23f6e53 master

bキー kキーを押すことでブランチを削除できます。

Branch to delete: test

testブランチでマージされていないコミットがある場合は以下のエラーが出て削除に失敗します。マージするかコミットを削除してください。

The branch ‘test’ is not fully merged. … [Hit $ or seebuffer *magit-process* for details]

6 変更の操作

6.1 変更の種類

変更がある時にmagit-statusコマンドを実行すると変更があるファイルの一覧をみることができます。

Local: test ~/tmp/test/Head: 23f6e53 Add new file with multiple line commit message. refs #0 Hello, WorldChanges: Modified hello.txt

Changes等の分類は以下の意味を持ちます。

 

Untracked files 新規作成されたファイル Changes 変更があるファイル Staged changes git addされた変更 Unstaged changes git addされた後に変更があるファイル

 

ファイルにカーソルを合わせた状態で以下のキーを押すことで変更を管理できます。

 

sキー Staged changesに移動 uキー ChangedとUntracked filesに移動 vキー 変更を破棄

 

vキーによる変更の破棄については、Changesにあるファイルに対してのみ実行できます。つまりStaged ChangesにあるファイルはChangesに戻してから破棄させる必要があります。

6.2 一度Staged Changesに移動したファイルに対する変更

Staged Changesに移動したファイルに対して、さらに変更を加えると以下の状態になります。

Local: test ~/tmp/test/Head: 23f6e53 Add new file with multiple line commit message. refs #0 Hello, WorldUntracked files: aUnstaged changes: Modified hello.txtStaged changes: Modified hello.txt

Unstaged changesのファイルに合わせてsキーを押すことで変更のすべてをStaged changesに含めることができます。

6.3 インライン展開

Changes等に表示されているファイルにカーソルを合わせた状態でTABキーを押すことでインライン展開の操作ができます。以下はStaged changesにあるファイルをインライン展開した状態です。

Local: test ~/tmp/test/Head: 23f6e53 Add new file with multiple line commit message. refs #0 Hello, WorldUntracked files: aStaged changes: Modified hello.txtdiff –git a/hello.txt b/hello.txtindex ce01362..640bb73 100644— a/hello.txt+++ b/hello.txt@@ -1 +1,3 @@ hello+hello+hello

インライン展開された変更にカーソルを合わせることで細かい変更管理が実行できます。

“@@ -数字 +数字 @@”で区分けされた変更の単位に対してsキー、uキー、vキーの操作ができます。

Local: test ~/tmp/test/Head: 23f6e53 Add new file with multiple line commit message. refs #0 Hello, WorldUntracked files: aUnstaged changes: Modified number.txtdiff –git a/number.txt b/number.txtindex 190423f..ec08a2d 100644— a/number.txt+++ b/number.txt@@ -8,6 +8,7 @@ 8 9 10+10.5 11 12 13@@ -68,6 +69,7 @@ 68 69 70+70.5 71 72 73Staged changes: Modified hello.txt New number.txt

7 コミット

Staged changesにファイルを移動した後にcキー cキーを押すことでmagit-diffバッファが開きます。

ここでコミットのパッチを確認できます。

さらにcキーを押すことでコミットログの編集画面に以降します。

C-cキー C-cキーで決定するとコミットが反映されます。

8 コミットログの確認

lキー lキーを押すことでコミットログを確認するmagit-logバッファが表示されます。

Commits in HEAD068a878 * test Modify hello text23f6e53 * origin/master master Add new file with multiple line commit message. refs #0 Hello, World4b53240 * Initial commit refs #0

リモートのmasterブランチであるorigin/master、ローカルのmasterブランチであるmaster、ローカルに新規作成したブランチであるtestがログの前に表示されます。

9 マージ

testブランチの変更をmasterブランチにマージします。bキー vキーでmasterブランチに切り替えます。

Local:23f6e53 # master [@ origin]068a878 testorigin (ssh://acer//home/hiroom2/repo/test.git): HEAD -> master23f6e53 master

mキー mキーを押してマージ元となるブランチを指定します。

Merge: test

lキー lキーでコミットログを確認するとmasterの位置が先ほどと変わっており、コミットがマージされたことがわかります。

Commits in HEAD068a878 * test master Modify hello text23f6e53 * origin/master Add new file with multiple line commit message. refs #0 Hello, World4b53240 * Initial commit refs #0

10 プッシュ

masterブランチをリモートのorigin/masterにプッシュします。masterブランチに切り替えた状態でPキー Pキーを押します。

Commits in HEAD068a878 * origin/master test master Modify hello text23f6e53 * Add new file with multiple line commit message. refs #0 Hello, World4b53240 * Initial commit refs #0

新規に作成したブランチをプッシュする場合はそのブランチに切り替えてプッシュします。

11 プル

Fキー Fキーでリモートから変更をプルします。fetchが必要な場合はfキー aキーでfetchします。

Android | Linux | SDL - Narrow Escape