Went to Git Internals: Graphs, Hashed, and Compression at Yahoo! JAPAN #githubjp

2013年11月15日(金)、東京ミッドタウンのYahoo! JAPANで開催された「GitHub トレーニングチームから学ぶ Git の内部構造」に参加しました。

会場について

会場は横に広く、スクリーンが3枚、全参加者分の机と電源、高速Wi-Fiが完備されており、非常に快適でした。

内容

GitHubのGit trainerである@matthewmccullさんがデモンストレーションを交えたプレゼンテーションを実施。主なテーマは、「Gitは多くのbranchを作るためのツールであり、branchがファイルシステムにどのように保存されているか、branchがどのように作成されるのかを理解することで、小さなbranchを多数作成し、短い間隔でdeployする重要性を理解すること」でした。

GitHubは1日に数百回のdeployを実施しており、その効率性について学びました。

Git Hashについて

Gitが使用するSHA-1 Hashについての説明と、Gitコマンドを使わずにcommitを手動で作成するハンズオンセッションが行われました。

Gitが差分管理ではなく、Directed Acyclic Graph(DAG)を採用していることについて説明され、commit、tree、blobの構造が詳しく解説されました。

git reflogについて

.git/logs/HEADの内容からgit reflogコマンドの出力が生成されることが示されました。

[mazgi@Ardbeg] $ git reflog | head
7e65877 HEAD@{0}: merge eden/master: Fast-forward
d420bd4 HEAD@{1}: checkout: moving from spike/translate/ja/high-availability to master

その他の学び

  • git fsckコマンドの使用法
  • mergeのparentについて、理論上複数持つことができること
  • GitHubにおけるSHA-1 hashの衝突は1件も報告されていないこと
  • ネットワーク転送時に圧縮が行われることで、転送効率が高いこと
  • Windows向けのGitではデフォルトでhard-linkを使わないこと

全体を通しての感想

Gitの内部構造を理解することで、Gitを使う際の不安が軽減され、安心感が増しました。今後、より効率的で持続可能なバージョン管理戦略を採用できるようになると期待しています。

謝辞

@matthewmccullさんと@johndbrittonさんの分かりやすいプレゼンテーション、快適な会場と運営をしていただいたYahoo! JAPAN様に感謝いたします。