stMind

You'll never blog alone

Git Internals

GitHub トレーニングチームから学ぶ Git の内部構造 - connpassに行ってきました。

GitとSVNは何が違うのか?みたいなことを聞かれた時、今までであれば集中型と分散型の違いということで簡単に説明していましたが、今後は内部構造の違いから詳しく説明出来るようになれそうです。
特に大きな違いは以下だと認識しました。

  • Gitはリビジョン番号を使わない
    • 中央集権型バージョン管理システムではリビジョン番号を使用している
    • Gitではリビジョン番号の代わりにSHA-1ハッシュを使用する
      • ハッシュ関数SHA-1にした理由は14ページにもわたるドキュメントがあるらしい
      • 開発者のLinus曰く、SHA-1を変えることはない!らしい
    • これはFingerPrintであり、内容が違えば同じになることはない
    • なぜ?という理由は聞き漏らしてしまいましたが、分散型にするのであれば中央のグローバルな番号で管理することは出来ないし、SHA-1であればGitがなくてもコミット出来るということだったかな?
  • Gitは差分を保存しない
    • CVS / SVN / darcs / Mercurial などはdelta storage(差分を保存)
    • GitはDAG(Directed Acyclic Graph)
      • 変更があった時だけ、ファイルが保存される(内容は圧縮される)
      • チェックイン毎にツリー全体をコピーする
    • 差分を保存していく方法は、履歴が長くなるにつれて遅くなっていく

勉強会の後はDrinkupがあって、そこでGithubber用のiPhoneアプリも見せてもらいました。Google Map上で誰が何処にいて、何に取り組んでいるか、コンコンとノックすると会話出来たりするみたいです。素敵!
後はGihtubのオフィスの写真(Yahoo Japanほど広くないけどね:-)って言ってました)や自宅周辺の写真なども見せてもらいました。
来年また日本にいらっしゃるそうです。

素晴らしく貴重な勉強会でした。アレンジして頂いた皆様、ありがとうございました。