なぜgitは難しいのか

2020/09/23に公開

割とそういう話を聞いたり(特に会社の同僚から)するので「なぜ難しいと感じるのか?」をちょっと考えてみました。

まず君はどうだい?

「難しいとも簡単とも思ってない」という感じです。
難しいか?と聞かれたらyesと答えそうだし、簡単か?と聞かれてもyesと答えそう・・・。
これを「理解できている」と言えるのかは微妙ですけど、普段使いは割とそれなりにやってます。
こんな感じの設定をする程度、には。

shellのalias設定
shell-alias

~/.gitconfig
global-gitconfig

慣れの問題、だろうか?

「とにかくつこたらええねん」「体で覚えるがな」というのは、使っている側のセリフとしてはよく聞く類のものかもしれません。が、果たしてそれで伝わるのでしょうか。(伝わる == 使ってもらえる)

「使おうとしない人」には、きっと使わない理由がきっとあるはずです。「強制されて嫌だった」といった入り方の問題だったかもしれませんし、「とにかく難しかった」の様な理解度に関する物かもしれません。いずれにせよ先の様オラオラな推し方は、それら苦手意識を持っているからしたら「ただただハードモード」です。
gitをバリバリ使ってほしいな~、と思っている側としてはただ単純に「伝える方法としては悪手」かなと。

コマンドに惑わされてはいけない

腑に落ちてもらうには、対象の人に「適切に」伝わる方法を取らないといけないと思っています。そのために必要なのは「その人がどういう状況になっているのか?」を理解することだと考えます。
きっと、、こんなことになっているのではないでしょうか。

afraid-of-git

覚えること(コマンド)めっちゃあるやん!!!!」というやつ、ですね。
やりたいことを実現する方法が複数種類存在する(pull / fetch + merge etc.)ことも、ややこしい印象になる要因かもしれません。

ややこしいわ・・・

各操作を単なる表音文字のパターンとして暗記

なんかあったらすぐわからん・・・

また暗記せなあかん・・・

gitややこしいわ・・・

グラフを制するには

「コミットグラフをイメージできれば勝ち」という言葉を見かけたことがあります。し、実際にそうだと思います。

search-commit-graph-by-google

ので、伝える側のゴールとしては「グラフのイメージを確かにしてもらう」という事になるでしょうか。
ただ、、グラフを書きながら説明してもいまひとつ腑に落ちてもらえない事が多い気がしてるんですよね。

グラフを制するには、コミットを制す

グラフを「歴史」とか「グラフ全体」でとらえると、逆に難しいのかもしれません。振り返ると私の理解は、

  • gitにはcommitという管理単位があって
  • gitのいろんなコマンドはそのcommitをアレコレ操作する手段で
  • commitが色んな形でつながった結果、グラフが形成される

という感じの理解になっているような気がします。つまり「一番大事なのはcommit」という感じです。commitのイメージがある程度持てると、グラフも入ってきやすい気がします。
でもって、誤解を恐れずにcommitはいっそ「diff」と言い切ってみましょう。

そうするとgitは、


  • そもそもたくさんの「diff」をいい感じに並べ替えるツールである[1]
    • 最初のファイルにdiffを積み重ねた結果が今あるファイルである
  • diffを適用する順番変えたい!やら、あの人のdiffほしい!やっぱ辞めた!みたいな要求に応えるコマンドがある

というとらえ方になる気がします。
リモートやらなんやらはその先、、、でもいいかと思ってます。

使えるかな?

ん-。改めて書いてみると、どうかなぁ。。
自分はもちろんわかるけど、悩んでる人に伝える道具になるかなぁ・・?

脚注
  1. 正確にはcommitはスナップショットなので、厳密には違います。https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/ ↩︎

GitHubで編集を提案

Discussion