GitHubのソースコードへのリンクを貼る時にはCanonical Formにしようという話
GitHubのショートカットを調べていた時にまとめたくなったので書きます。
1行で
GitHub上のその瞬間のコード片へリンクを貼るときは y
を押してから リンクをコピーしよう。
もうちょっと詳しく
背景
特定のコード片について語る時に、GitHubのリンクをよく貼って説明する機会などがよくあると思います。
ただその時にGitのブランチには、当然変更などが累積されていくためブランチに依存したリンクを貼ってしまうと、ブランチのその瞬間について語る場合あとで変更が入った場合に文脈的におかしくなってしまいます。
そのためにリポジトリ内コード検索などでコミットハッシュなどを特定してからリンクをコピーするといったことをしている方もいるかと思います。(というか、わたしだけ?)
ただ、それもけっこう煩雑です。
コードを特定する検索キーワードをうまく見つけるという謎技能を身に着けたり、周辺のコードを検索したいなどの言ってることがよくわからないケースを除き、そんなことをわざわざ毎回する人もそういないかと思います。
こんなこと言い出した理由
そして、最近GitHubのショートカットを個人的にまとめてた時に気がついたのが
y
Expand URL to its canonical form
というショートカットです。
まず、 canonical form
というのがよくわからないかと思います。
なので先に、ブランチに依存したリンクを現在参照している場合は恐らく「参照的な」といった意味で referencial form
といった呼び方を(仮に)します。
そして、その参照的なリンクからコミットハッシュを特定してブランチ名の部分をそのコミットハッシュで置き換えたリンクを canonical form
というみたいです。
(あんまり正確じゃない気がするのですが便宜的にすいません。)
メリット
canonical from
にするとブランチに変更が入った場合に嬉しいです。
ブランチ依存で参照していたコードだと該当箇所が変更されると行などで位置がずれたり変更で修正後の方を参照してしまうといったことになります。
そして、 canonical form
でコミットハッシュを特定した場合はそのコミットハッシュの瞬間の情報を必ず参照できます。
デメリット
行単位へのリンクだとそれなりに効力を発揮するのですが、ファイル単位だとそれほど動くことがないはずなので、それほど効力がないです。
で、かつブランチの最新を参照したいリンクの場合だと当然 canonical form
にする必要はありません。
まあ、世の常で使い方を考えないといけないですね。
Gitの内部構造について
ややGitの内部構造に寄った話をすると、コミットハッシュで参照できるオブジェクトは一度作られたら変更されないことが保証されているので絶対参照になります。
ただ、ブランチは参照先が変更が累積される度に変わるので、間接参照になります。
やはり、不変オブジェクトはよいです。
まとめ
といった感じで、GitHub上のコード片をSNSなどでリンクとして貼る場合は y
を押してからにしましょう。