はじめに
Windows で Emacs を使うのに MSYS2 入れたりとか Patch 当てたりとか割と面倒なので, Atom や VS Code を試してみたが,どうせ Emacs のキーバインドにしたくなるので,設定やら何やらしていたら,Emacs 使う方が楽な気がしたので,現実逃避しながら,Emacs の設定をいじっていたので備忘録代わりに(>_<).
オールドタイプなので,パッケージ管理の類を使わなかったのですが,試しに package.el
を使ったら手放せなくなりました(>_<)オールドタイプとかのたまう前に試してみるべきでした.すごく便利です.try.el
と併用して色々試しているところです.
試しながら,書いているので,間違ったことを書いてる場合があります.ご容赦下さい.
インストール
下準備
init.el
に下記の設定を追加して,package.el
と use-package
を使用できるようにする.try
は,M-x try
Enter package 名
で package
をインストールして手軽に試せます.Emacs を再起動すると try
から導入した package
は使えなくなります.いらないパッケージが残らないので精神衛生上助かりますね.ちなみに,TEMP
フォルダに展開されるので,気になるなら消しましょう.私は,そこまでは気にならないので,自動削除される日までほっときます.
;;; package.el
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
;;(package-refresh-contents)
(package-initialize)
;;; Bootstrap 'use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(use-package try
:ensure t)
Magit の導入
MSYS2 で導入した git
は使えなかったので,Git for Windows を導入しました.Git Bash
や Git Cmd
から使うので,環境変数に PATH
の追加はしていません.(Git
のインストール先を変更しているので,試す方は,magit-git-executable
の場所を変更して下さい.あと,設定なども適当に)
(use-package magit
:ensure t
:defer t
:init
(when (eq system-type 'windows-nt)
(setq magit-git-executable "D:/Programs/Git/bin/git.exe"))
:bind ("C-x g" . magit-status)
:config
(setq magit-refs-show-commit-count 'all
magit-log-buffer-file-locked t
magit-revision-show-gravatars nil
magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
)
追加したら,Emacs を再起動するか評価して.Magit
を導入します.
Git をはじめからていねいに に沿って
Git をはじめからていねいに は,shinpei maruyama さんが作られたものです.この資料は,コマンドラインで Git の使い方を学べます.大変わかりやすく,作者の方に感謝してます.この資料を基に, Magit
で操作します.
02_first_commit.md
git init
では作業ディレクトリの作成が必要ですが,magit-init
では,リポジトリの作成と同時に作られるので必要ないです.
M-x magit-init
Enter Create repository in:
でリポジトリを作成するディレクトリを指定します.ここでは,~/Documents/my_first_worksapce
としています.ドキュメントに my_first_workspace
ができています.Emacs には,In the beginning there was darkness
と表示されます.
C-x C-f
で nyan.txt
を作成して保存する.
nyan
C-x g
(M-x magit-status
) で Magit(status) を起動すると,Untracked files (1)
にnyan.txt
が表示されるので,nyan.txt
の上にカーソルを合わせて,s
で 追跡を開始する.staged changes (1)
の nyan,txt
の上で u
を押すとステージングから外れます.
? でコマンド一覧が表示される.コミットしたいので,c c
と入力する.コミットメッセージの入力画面になるので「猫の鳴き声を管理するファイルを作成
」と入力して C-c C-C
でコミットする.コミットしたブランチ名 master
とコミットメッセージが表示される.
03_second_commit.md
nyan.txt
を変更して,nyan
を mew
に変更して保存して,C-x g
を押すと,Unstaged change (1)
に modified nyan.txt
と表示されるので, nyan,txt
の上で k
を押すと変更の取り消しができます.nyan.txt
を確認すると nayn
に戻ります.
git
では,状態によって,ステージングされた状態を解除するにに,git checkout -- nyan.txt
,git reset HEAD nyan.txt
と使い分ける必要があるようですが,Magit
で unstage するのは,u
で行えます.
もう一度,nyan
を mew
に書き換えてコミットしてみます.s
でステージングして c c
でコミットメッセージ「猫の鳴き声を nyan から mew に変更
」と入力して,C-c C-c
でコミットする.
ログを確認するときは,l
でメニューが表示するので項目を選択します(l
など).
04_more_commits.md
wan.txt
と boo.txt
をコミットする.
wan
boo
Magit
では,S
でまとめて,ステージングするようですが,git add -u .
と同等で,すでに追跡しているファイルのみが対象のようです.boo.txt
,wan.txt
にそれぞれのカーソルの上で,s
で追跡を開始する.コミットメッセージ「犬と豚の鳴き声を追加
」でコミットする.
Magit
では, git rm
のコマンドがないようなので,M-C-m(M-RET)
で Dired
を開いて,boo.txt
に 'd' でマークを付け,x
で削除する.q
で Dired
から Magit
に戻る.g
で状態を更新して,s
で 削除するファイルをステージングしてコミットする.コミットメッセージは「豚の鳴き声は要らないので削除
」にする.どうしても,git rm
したいときは,:
からコマンドを直接入力する.
ファイルのリネームは,?
のコマンド一覧には,表示されないようですが,R
で変更できます.nyan
を mew.txt
,wan.txt
を bow.txt
に変更する.コミットメッセージ「ファイル名を英語に変更
」でコミットする.
ファイルの移動は,先にディレクトリを作成する必要があり,M-C-m
で Dired
を開いて,+
で animals
のディレクトリを作成する.R
で mew.txt
,bow.txt
を animals
に移動する.コミットメッセージ「動物ファイルを animals ディレクトリに移動
」でコミットする.
05_branch.md
b n
でブランチを作成する.Create branch starting at ...
と表示されるので,master
のまま変更しないので, Enter を入力し,Branch Name
に作成するブランチ名を入力する.ここでは,my_first_branch
とします.y
でブランチ一覧を表示できる.
bow.txtt
を変更して,wan
を bow
に変更して,コミットメッセージ「犬ファイルの中身も英語に合わせた
」でコミットする.コミットログを,l L
で確認する.
ブランチの変更は,b b
で変更する.my_first_branch
に変更すると,Magit
の ステータス画面のブランチ名が,mastor
から my_first_branch
になっているのが確認できる.また,y
でブランチ一覧を表示して,選択するブランチ上で C-m
で変更できる.
my_first_branch
でコミットを行う.b b
で my_first_branch
に変更したので,mow.txt
を ディレクトリ animals
の中に作成する.
mow
コミットメッセージ「牛の鳴き声を追加
」でコミットする.l L
コミットの様子を確認する.
ブランチを master
に切り替えると,my_first_branch
で作成した moe.txt
は無く.ブランチを my_first_branch
に切り替えると,mow.txt
が確認できます.
06_merge.md
ブランチを master
に変更する.マージするには,m m
でマージするブランチ聞かれるので,my_first_branch
(デフォルトでなっている)を指定する.マージするコメントを編集するときは,m e
で行える.
無事マージが終わってので,いらないブランチを b k
で削除する.l L
でログを確認する.
07_more_merges.md
少し疲れてきましたが,続きを始めます.ここからは,新しいリポジトリを作成するので,M-x magit-init
から my_second_workspace
を作成する.cat_lover_said.txt
と cat_hater_said.txt
をコミットメッセージ「猫好きの話と犬好きの話を作成
」で作成する.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。
もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。
猫好きじゃない人間とか頭がおかしいとしか思えない。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。犬がいい。犬かわいい。散歩に行って息が上がった
あの「ヘッヘッヘッヘッへ」がもう私をおかしくしちゃうほんとにかわいい。
犬大好き。犬最高。
猫好きな人間とか頭がおかしいとしか思えない。
文体を統一するブランチ unify_styles
を,b c
で作成すると,ブランチを切るのと,チェックアウトを同時に行えます.ここでは,文体を直して,コミットメッセージ「文体を統一
」でコミットします.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。
猫というのはかように本当にかわいいものである。
猫好きではない人間は、頭がおかしいのではないだろうか。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。やはり犬がよい。犬はかわいい。
散歩に行ったあとに息が上がっている様など、ほんとうに良いものである。
猫が好きな人間は、頭がおかしいのではないだろうか。
表現がおかしいのを緊急に修正する必要があるので,文体統一前に状態を戻して修正する.
取り敢えず,文体統一前のブランチ master
に変更する.緊急に修正するブランチ hotfix
を作成して修正する.b c
で hotfix
を作成する.それぞれの最後の文章を修正して,コミットメッセージ「頭がおかしいという表現はまずいので修正
」でコミットする.
猫好きじゃない人間がいるのが不思議。
猫好きな人間がいるのが不思議。
修正ができたのので,hotfix
の変更を master
ブランチに取り込む.master
ブランチに戻って,マージする.m m
でマージすると Fast-forward
になるので,一度変更を基に戻します.
l L
でコミット ID を確認する.ここでは,「猫好きの話と犬好きの話を作成
」の数字を確認する.X h
で調べた ID を入力すると,HEAD(master) が元の位置に戻る.m e
でマージすると,--no-ff
が自動で付加されるので,Fast-forward
したくない場合はこちらを選択すればよい.
マージが終われば,ブランチ hotfix
は必要ないので,b k
で削除する.
文体統一のブランチの unify_styles
の修正が必要になったので,ブランチを unify_styles
に変更する.cat_hater_said.txt
を修正して,コミットメッセージ「"ヘッヘッヘッヘッ" という表現は残すようにした
」でコミットする.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。やはり犬がよい。犬はかわいい。
散歩に行ったあとに息が上がって "ヘッヘッヘッヘッ" と
なっている様など、ほんとうに良いものである。
猫が好きな人間は、頭がおかしいのではないだろうか。
l L
でログを見ると時系列になってないので,'l' の後 =o c
で --date-order
を与えて,L
でログを確認する.
修正の確認が終わったので,master
に unify_styles
の修正をマージする.master
に切り替えて,m e
でマージする.Error が起こったので,$
で確認すると,コンフリクトを起こして自動でマージが行えなかったようです.マージされてないファイル(unmerged cat_xxx.txt
)があるので修正する.変更するファイルの上で C-m
でファイルを編集する.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。やはり犬がよい。犬はかわいい。
散歩に行ったあとに息が上がって "ヘッヘッヘッヘッ" と
なっている様など、ほんとうに良いものである。
猫が好きな人間が存在するというのが、私には不思議に思える。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。
猫というのはかように本当にかわいいものである。
猫好きではない人間が存在するのが、私には不思議に思える。
修正が終われば,s
でステージに上げ、c c
,C-c C-c
でコミットする.
マージが終われば,ブランチ unify_styles
は必要ないので,b k
で削除する.
08_rebase.md
my_third_workspace
を作成して,cat_lover_said.txt
と cat_hater_said.txt
をコミットメッセージ「猫好きの話と犬好きの話を作成
」で作成する.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。
もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。
猫好きじゃない人間とか頭がおかしいとしか思えない。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。犬がいい。犬かわいい。散歩に行って息が上がった
あの「ヘッヘッヘッヘッへ」がもう私をおかしくしちゃうほんとにかわいい。
犬大好き。犬最高。
猫好きな人間とか頭がおかしいとしか思えない。
文体を統一するトピックブランチ unify_styles
を作成する.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。
もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。
猫好きじゃない人間とか頭がおかしいとしか思えない。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。やはり犬がよい。犬はかわいい。
散歩に行ったあとに息が上がっている様など、ほんとうに良いものである。
犬大好き。犬最高。
猫好きな人間とか頭がおかしいとしか思えない。
文体統一の途中で,急ぎの修正がはいりました.中途半端な状態でコミットしたくはないですが,とりあえずコミットします.コミットメッセージは,「作業途中だがとりあえずコミットしておく
」にします.
master
ブランチから hotfix
ブランチを切り,急ぎの修正を行います.b c
でブランチ作成とチェックアウトを同時に行うのですが,Create and checkout branch starting at(..):
で master
を選択して,Branch name
を hotfix
にします.それぞれの最後の文章を修正して,コミットメッセージ「頭がおかしいという表現はまずいので修正
」でコミットする.
猫好きじゃない人間がいるのが不思議。
猫好きな人間がいるのが不思議。
OK が出たので,ブランチを master
に切り替え,m e
で hotfix
をマージする.いらなくなった,hotfix
を b k
で削除する.
unify_styles
にチェックアウトして, r e
で rebase
を行う.l L
でログを確認する.また,ファイルを確認すると,hotfix
の変更も取り込まれています.
残りの修正を行います.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。
猫というのはかように本当にかわいいものである。
猫好きではない人間が存在するのが、私には不思議に思える。
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。
その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。
犬は賢い。やはり犬がよい。犬はかわいい。
散歩に行ったあとに息が上がって ヘッヘッヘッヘッ と
なっている様など、ほんとうに良いものである。
猫が好きな人間が存在するというのが、私には不思議に思える。
git add
でやり直した状態のファイルをステージしてから,git commit --amend
で直前のコミットをやり直すことができる.c a
で git commit --amend
を行います.前回のコミットメッセージ「作業途中だがとりあえずコミットしておく
」が表示されるが,作業は終わったので、このメッセージを「文体を統一
」に変更してコミットする.
unify_styles
のチェックが終わったので,ブランチを master
に切り替え,m e
で unify_styles
をマージする.m k
で unify_styles
を削除する.
09_clone.md
ここから,複数人での操作です.スタートメニュー
→ Git
→ Git Bash
で作業します.たかしくんの設定をします.
$ mkdir ~/Documents/takashi_workspace
$ git init
$ git config user.name TAKASHI
$ git config user.email takashi@example.com
Emacs
で C-x g(magit-status)
でリポジトリを takashi_workspace
を指定する.取り敢えず何かコミットしたいので,cat_lover_said.txt
をコミットメッセージ「猫好きの話を追加
」でコミットします.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。
もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。
猫好きじゃない人間とか頭がおかしいとしか思えない。
l L
でログを確認して,Takashi
がコミットしたのを確認する.開発用のブランチを作るので,b n
から development
ブランチを作成する.
ここでは,みんなが作業するリポジトリを作成するので,:
で Git
のサブコマンドが入力できるので,
clone --bare ~/Documents/takashi_workspace ~/Documents/shared_repo.git
と入力する.
ゆうすけが作業にさんかすることになったので,ベアリポジトリ
から複製する.Git bash
から作業します.
$ git clone ~/Documents/shared_repo.git ~/Documents/yuusuke_workspace
$ cd ~/Documents/yuusuke_workspace
$ git config user.name YUUSUKE
$ git config user.email yuusuke@example.com
ゆうすけのリポジトリを Emacs
で開きたいので,一度 *scratch*
バッファなどに切り替えて, C-x g(magit-status)
でリポジトリを yuusuke_workspace
を指定する.origin/development
を追跡する development
ブランチを作成する.b n
で Create and checkout branch starting at:
に origin/development
を選択して,Branch name:
を development
にする.
たかしのリポジトリは,clone
してないので,リモートリポジトリを登録してない状態なので,M a
で Remote name:
を origin
,Remote url:
を path/to/shared_repo.git
を指定する.b u
で追跡するブランチを追加する.ブランチを development
に切り替え,こちらでも,b u
で追加する.
10_push_pull.md
ゆうすけでの作業.magit-status
が yuusuke_workspace
になっているのを確認する.development
ブランチから文体統一の feature/unify_styles
を切ってチェックアウトするので,b c
で Create and checkout branch starting at:
に development
,branch name:
に feature/unify_styles
とする.
cat_lover_said.txt
を編集して,コミットメッセージ「文体を統一
」でコミットする.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。
猫というのはかように本当にかわいいものである。
猫好きではない人間は、頭がおかしいのではないだろうか。
たかしでの作業.magit-status
が takashi_workspace
になっているのを確認する.master
ブランチから hotfix
を切ってチェックアウトする.
cat_lover_said.txt
を編集して,コミットメッセージ「頭おかしいという表現はまずいので修正
」でコミットする.
猫は動物の一種である。
犬とならび、ペットとして飼われることの多い動物である。
猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。
猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。
もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。
猫好きじゃない人間がいるのが不思議
リモートブランチ origin/hotfix
が存在しないので,Push
するときに hotfix
から複製する.P u
で Change upstream of hotfix to:
に origin/hotfix
を指定する.
ブランチを master
に変更して.m e
でマージするには,m m
でマージするブランチ聞かれるので,hotfix
にする.
Unmerged info origin/master(2)
と表示され,origin/master
の更新がされてないので,P p
で Push
する.
不要な hotfix
ブランチを b k
で削除する.リモートブランチも同様に,b k
で origin/hotfix
で削除できる.
hotfix
で対応した内容が反映されている master
を development
に取り込む.ブランチを development
に変更して master
をマージする.コミットメッセージは「緊急対応で行った修正をmaster から取り込む
」にする.リモートに反映させるのに Push
する.たかしの作業が終わったのでゆうすけの作業に戻ります.
ゆうすけでの作業.magit-status
が yuusuke_workspace
に変更する.l b
で今の状態を確認する.共有リポジトリにはまだ feature/unify_styles
ないので Push
する.P u
で Change upstream of hotfix to:
に origin/feature/unify_styles
を指定する.
unify_styles
の変更を development
に取り込みたいが,すでにリモートで更新されている場合があるので,リモートの変更を取り込む必要がある.f a(git remote update)
でリモートの変更を手元にコピーする.このままでは,origin/master
,origin/master
にしか変更が適応されてないので、ローカルの master
,development
に merge(m m
) して変更を取り込む.l L
で状態を確認する.
feature/unify_styles
の変更を development
に適応するので,development
ブランチに切り替えマージする.コンフリクトを起こすので修正してコミットする.
(最終行)
猫好きではない人間が存在するのが、私には不思議に思える。
コミットメッセージは,「コンフリクトの修正<改行><改行>文体を修正するための修正と、"頭おかしい" の修正で同じ行を修正していたので、どちらの修正も生かすような対応を行った
」にする.push
してリモートレポジトリに反映する.
おわりに
殴り書きで,文体の統一性がなくおかしいですが,なんとなく Magit
の操作がつかめると思います.Git をはじめからていねいに があったので操作の比較ができました.