てきとうなさいと べぇたばん

μgitをやった。 Gitをフルスクラッチで作る

最後の章まで言ったときの、ugit kの実行結果

ugitをやった

Gitをフルスクラッチから作るというサイトがあったので、一つ一つやってみた。

https://www.leshenko.net/p/ugit/

Gitの仕組みを知りながら作れるのですごくよい。なのでこの説明を読むよりリンク先を読むんだ。

環境

WSL上のUbuntu 18.04で作った。ugit kに関しては、dotコマンドで出力するのをpngファイルにしたのでこうした。

with subprocess.Popen(
    ['dot', '-Tpng', '/dev/stdin', '-o', 'output.png'],
    stdin=subprocess.PIPE) as proc:
  proc.communicate(dot.encode())

感想として

一からつくるのはすごく理解がすすむ。特にGitはずっと前から使っているから、仕組みをしりたいものだった。 .gitのファイルがどう動くかがわかるのはいいことだ。

PythonでGitを作るのって、PythonにはMercurialがあるのでちょっと違和感があるといえばある。

ブランチがただのポインタになるという意味がわかった気がする。

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF

最終的にできあがるものは、普通に使うGitよりかは機能が少なかったりするが、これをちょっと改良したりするのも面白いだろうし、Gitとの違いを照らし合わせて最適化の手法を調べたりするのもいいかもしれない。

とりあえず、Pythonだけあれば動くGitが出来上がるからやってみるといい。