めもちょー

メモ帳代わりに使っています。

gitの使い方をGUIで理解できるgit-simを試してみた

git-simと呼ばれるgitの挙動を可視化してくれるOSSが話題になっているので試してみました。
github.com

目次

導入

Ubuntuの場合、公式のやり方に従えば問題なく導入することができました。

sudo apt update
sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev ffmpeg
pip3 install manim
pip3 install git-sim
git-sim -h

挙動

下記のコマンドを実行すると git-sim_media というディレクトリに画像や動画が生成されるようです。

git-sim status
tree git-sim 
git-sim_media/
├── images
│   ├── git-sim-log_02-10-23_00-24-53.jpg
│   ├── git-sim-log_02-10-23_00-25-28.jpg
│   ├── git-sim-status_02-10-23_00-25-44.jpg
│   ├── git-sim-status_02-10-23_00-26-12.jpg
│   ├── git-sim-status_02-10-23_00-26-27.jpg
│   ├── git-sim-status_02-10-23_00-26-49.jpg
│   └── git-sim-status_02-10-23_00-27-10.jpg
├── texts
│   ├── 09f15f5386472b04.svg
│   ├── 0d47ec87b19c3dc2.svg
│   ├── 1e1854d348cd20e7.svg
│   ├── 4184c0ebb965dab7.svg
│   ├── 5dca22a458c2123d.svg
│   ├── 642cbb1c7323e76e.svg
│   ├── 65bc4e244ca9d48b.svg
│   ├── 681ce5f174caeabc.svg
│   ├── 69e75d1a5c09f5ed.svg
│   ├── 7142f3b519e553e8.svg
│   ├── 7207231cff788177.svg
│   ├── 74413615e65bc448.svg
│   ├── 7d52391c36f1fcd0.svg
│   ├── 985e4ebaa1302cdb.svg
│   ├── b78d542bf727594e.svg
│   ├── b982dc20ed5d3822.svg
│   ├── bbc3f43a15a045c5.svg
│   ├── eb86629d54dd331d.svg
│   └── efef229198507a40.svg
└── videos
    └── 1080p60
        ├── git-sim-log_02-10-23_00-24-53.mp4
        ├── git-sim-log_02-10-23_00-25-28.mp4
        ├── git-sim-status_02-10-23_00-25-44.mp4
        ├── git-sim-status_02-10-23_00-26-12.mp4
        ├── git-sim-status_02-10-23_00-26-27.mp4
        ├── git-sim-status_02-10-23_00-26-49.mp4
        ├── git-sim-status_02-10-23_00-27-10.mp4
        └── partial_movie_files
            ├── GitSimLog
            │   ├── 3218082325_51972775_4225617429.mp4
            │   └── partial_movie_file_list.txt
            └── GitSimStatus
                ├── 4013001338_51972775_1615274078.mp4
                ├── 4013001338_51972775_1674189727.mp4
                ├── 4013001338_51972775_2758134263.mp4
                ├── 4013001338_51972775_3655340232.mp4
                ├── 4013001338_51972775_4030091965.mp4
                └── partial_movie_file_list.txt

7 directories, 41 files

実験

最初の状態

新規テキスト(a.txt)を生成する。

touch a.txt

git-simで確認すると、Untracked Filesにa.txtが追加される。

次にa.txtをstagingに昇格する。

git add a.txt

git-simで確認すると、Staging areaにa.txtが追加されていることがわかる。

commitする。

git commit -m "add: a.txt"

git-simで確認すると、新しいコミットhashが生成されていることがわかる。

a.txtに変更を加えてみる。

echo "hello" >> a.txt

git-simで確認すると、Working directoryにあるa.txtが変更されているのがわかる。

再びa.txtをaddしてcommit

git add a.txt
git commit -m "fix: a.txt"

soft resetしてみる。

git reset HEAD^

a.txtがWorking directoryに入った状態で、HEADのhash commitが親に戻っていることがわかる。

感想

resetした際に"fix: a.txx"のcommit hashの図は消えてしまうんですかね?
resetする前のcommitを表示したままでHEADのみが前のcommitを指すようなオプションがあれば、resetの概念がより分かりやすくなるのではと思いました。
反対に、git-simではworking directoryやstagingの区分があるため、soft reset, hard resetの違いを理解しやすいのが利点なのかなと思いました。

git-simと同様にgitをvisualizeして学べるものにLearn Git Branchingというものもあります。
こちらはresetで以前のcommitに戻ったりcheckoutでbranchを切り替える際に、直前で作業していたcommitやbranchが表示されたまま、別のコミットやブランチに映る様子を見ることができます。
learngitbranching.js.org

git-simとLearn Git Branchingをやればgit初心者の方でも実務レベルのgit操作ができるようになるではないかと思います。