🗝️

Gitコマンド入門::rebase(-i,exec,コマンド実行)「第二十六回」

2021/02/25に公開

さあ、今回は、exec コマンドを試してみましょう! とはいっても、何をすれば良いのか、初心者は悩みますけどね~ まあ、exec には自由に実行させたい処理を記述できるので、やれることは無限大ですけど、、、今回は、先日のリポジトリーを使って、デバッグ情報を、ログファイルに出力してみます。

前回の記事は、こちら!

https://zenn.dev/shiozumi/articles/03422819b8613c

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

テスト用のリポジトリーの作り方は、以下を実行!

echo "# rebase exec" >> README.md
git add README.md
git commit -m "1st"

echo "A" >a.txt
git add a.txt
git commit -m "A"

echo "B" >b.txt
git add b.txt
git commit -m "B"

echo "C" >c.txt
git add c.txt
git commit -m "C"

ほぼ、前回と同じです。冒頭のコメントだけ、rebase exec に変更しました。(笑)

git rebase -i --root を実行して、コミット時のハッシュ値の一覧をコピーして置きます。

$ git rebase -i --root

// vi エディターが起動するので、以下の4行をコピペ
pick 3d996c0 1st
pick 1a4dbc4 A
pick cbfc283 B
pick 9724410 C

今回は、テキスト量が多いので、別ファイルにて編集しましたが、みなさんは、それぞれ好きなエディターで、好きな処理を記述してくださっても、OKです!

私は、こんな感じで、編集しました!

以下のテキストを、git rebase -i --root を実行直後、viエディターの編集画面にて、コピペして貼り付けて、余分な4行は削除して[1]、Esc + wq で、処理を実行させてください。

exec echo "# rebase exec" >file.log
exec echo "# 1st" >>file.log 
pick 3d996c0 1st
exec ls -l >>file.log

exec echo -e "\n #A" >>file.log 
pick 1a4dbc4 A
exec ls -l  >>file.log

exec echo -e "\n #B" >>file.log
pick cbfc283 B
exec ls -l  >>file.log

exec echo -e "\n #C" >>file.log
pick 9724410 C
exec ls -l  >>file.log

viエディター編集後「Esc+wq」の実行結果です!

git rebase -i --root
// vi起動後、上記のexec処理に書き換えて、Esc + wq で実行!

Executing: echo "# rebase exec" >file.log
Executing: echo "# 1st" >>file.log
Executing: ls -l >>file.log
Executing: echo -e "\n #A" >>file.log
Executing: ls -l >>file.log
Executing: echo -e "\n #B" >>file.log
Executing: ls -l >>file.log
Executing: echo -e "\n #C" >>file.log
Executing: ls -l >>file.log
Successfully rebased and updated refs/heads/main.

// 無事、記述どおりに処理が実行されました!

file.log の中身を確認!

$ cat file.log

# rebase exec
#1st
合計 8
-rw-rw-r-- 1 shiozumi shiozumi 14  225 13:30 README.md
-rw-rw-r-- 1 shiozumi shiozumi 19  225 13:30 file.log

#A
合計 12
-rw-rw-r-- 1 shiozumi shiozumi  14  225 13:30 README.md
-rw-rw-r-- 1 shiozumi shiozumi   2  225 13:30 a.txt
-rw-rw-r-- 1 shiozumi shiozumi 149  225 13:30 file.log

#B
合計 16
-rw-rw-r-- 1 shiozumi shiozumi  14  225 13:30 README.md
-rw-rw-r-- 1 shiozumi shiozumi   2  225 13:30 a.txt
-rw-rw-r-- 1 shiozumi shiozumi   2  225 13:30 b.txt
-rw-rw-r-- 1 shiozumi shiozumi 338  225 13:30 file.log

#C
合計 20
-rw-rw-r-- 1 shiozumi shiozumi  14  225 13:30 README.md
-rw-rw-r-- 1 shiozumi shiozumi   2  225 13:30 a.txt
-rw-rw-r-- 1 shiozumi shiozumi   2  225 13:30 b.txt
-rw-rw-r-- 1 shiozumi shiozumi   4  225 13:30 c.txt
-rw-rw-r-- 1 shiozumi shiozumi 583  225 13:30 file.log

さあ~ みなさんはどうですか? HEADを移動させながら、それぞれのコミット時点で、ファイルリストを取得するだけの処理ですが、想像していた通りに、gitが動作していることが分かりますね!

今回は、デバッグ的な使い方をしてみましたが、実践では、exec の後に、git コマンド記述して、さらに、リポジトリーを操作するようですね。まあ、さすがに、exec git rebase と書くことはしないと思いますけど。そんな、オカルトなネスト処理は想像しないように!(^^;;

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/78512af82b9732
https://twitter.com/esmile2013

脚注
  1. 余分な4行は、pick 3d996c0 1st ~ pick 9724410 C 迄ですね。 ↩︎

Discussion