Git

gitで特定のcommitバージョン/リビジョンを指すアレをなんと呼ぶか問題

問題

                         これ
       ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
commit 3a8461e04c04ed94a64df5d2cd7adbe764a2b8d8
Author: bigwheel <hogehoge@gmail.com>
Date:   Tue May 2 02:50:19 2017 +0900

    Fix Process output method

同僚に「ちょっとそのコミットのこれ、slack DMで送ってー」なんて言うとき、あると思います。
これをなんと呼ぶか。
自分はコミットハッシュないしコミットIDと呼んできましたがどうやら正しい呼称ではなさそう。

先に結論

Git manual的には コミットのSHA-1 ないし コミット(オブジェクト)?の(オブジェクト名|SHA-1)が正しい。
もしくはPro Git - Bookには以下の表現もある。

  • コミットのSHA-1チェックサム
  • コミットのSHA-1ハッシュ

ただし、これそのものだけを他と区別して指す固有の用語はない。Git概念上コミットはオブジェクトの1種であり、Git上のオブジェクトはそれを一意に識別するSHA-1のハッシュ値を必ず持つため、これは必然的に コミットオブジェクトのSHA-1のハッシュ値 であるというだけである。

これはGit利用上の重要度が他のSHA-1のハッシュ値と比べて段違いに高いため、固有の名詞があったほうが良いと思われる。
Gitコミュニティに働きかけたほうがよいのかも。

とりあえず僕はコミットハッシュとしばらく呼ぶことにします。

詳細

公式用語集を当たる

Git - gitglossary Documentation

gitのmanualの用語集の中で関連しそうな項目は以下。

コミット

名詞として: Git履歴上の1点のこと。あるプロジェクトの履歴全体は相互に参照を持った(意訳)コミットの集合として表現されます。この"コミット"という単語はGitではしばしば他のバージョン管理システムでの"リビジョン"や"バージョン"と同じ場所で用いられます。またコミットオブジェクトの省略としても使われます。

動詞として: Git履歴にプロジェクトの状態を新しいスナップショットとして保存するアクションのこと。それは現在のインデックス状態を表す新しいコミットを作り、HEADを新しいコミットのポイントへ進めることで行われます。

コミットオブジェクト

特定のリビジョンについての次のような情報を含むオブジェクトです:
* 親
* コミッター
* オーサー(著者)
* 日付
* 保存されたリビジョンのトップディレクトリに対応した(≒相対パスの、という意味か)ツリーオブジェクト

リビジョン

コミット(名詞)の同義語

オブジェクト

Gitでの保存の単位。これはその中身のSHA-1で一意に識別されます。それ故に、オブジェクトは変更することができません。

オブジェクト名

オブジェクトの一意な識別子。このオブジェクト名はよく40桁の16進文字列で表現されます。また口語ではSHA-1と呼ばれます。

SHA-1

"セキュアハッシュアルゴリズム1"; 暗号化ハッシュ関数です。Gitの文脈ではオブジェクト名の同義語として使われます。

これに従うなら次が正式名称になる。

コミットオブジェクトのオブジェクト名

コミットオブジェクトはコミットという省略、オブジェクト名はSHA-1という同義語があると書いているので正規表現で表記するなら次になる。

コミット(オブジェクト)?の(オブジェクト名|SHA-1)

でも正直なところあれのことをオブジェクト名なんて呼んでいる人・記事を見たことがないし同義語のSHA-1だって「それハッシュアルゴリズムのことじゃないですかwww」って新卒にも煽られそう。ハッシュアルゴリズムがSHA-2になったときにも困りそうだし。据え置きゲーム機全部ファミコンって呼ぶうちのかーちゃんかよ。

Git公式ガイドPro Git - Bookではなんと書かれているか

最初にこれに関する言及があるページはGit - Viewing the Commit History

By default, (中略) this command lists each commit with its SHA-1 checksum, the author’s name and email, the date written, and the commit message.

その他これに関する言及があるページをいくつか拾ってみた。

Git - Revision Selection

Single Revisions

You can obviously refer to any single commit by its full, 40-character SHA-1 hash, but there are more human-friendly ways to refer to commits as well.

Git - Branches in a Nutshell

Because a branch in Git is actually a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy.

Git - Maintaining a Project

If you want to pull commit e43a6 into your master branch, you can run

というわけで、Git公式であるPro Gitですらこれの表現は文脈により毎回異なり、表現のため非常に苦慮していることがわかった。

まとめ

公式の呼称の定義は一応あるもののこれのみを限定して指す固有の用語はない。
またその固有の用語がないことでPro Gitなどでも苦慮している様子が伺える。
僕も含め全世界のエンジニアが同様に困ってそうなので、固有の用語があったほうが良さそう1


  1. 邪推するとこれに今まで固有の用語がなかったのはいわゆるPlumbing層が優先されてPorcelain層が軽視されてきたためだと思う