redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

Gitのブランチについて勘違いもしくは思い込んでいたこと

Gitのブランチについて、今まで勘違いというか思い込みをしていたことがわかったので、記録しておこうと思います。

下記リンク先の公式ドキュメントに書いてあることなのですが、核心の部分を引用すると以下の通りです。

Git におけるブランチとは、実際のところ特定のコミットを指す 40 文字の SHA-1 チェックサムだけを記録したシンプルなファイルです。したがって、ブランチを作成したり破棄したりするのは非常にコストの低い作業となります。新たなブランチの作成は、単に 41 バイト (40 文字と改行文字) のデータをファイルに書き込むのと同じくらい高速に行えます。

さらに以下のように続きます。

これが他の大半の VCS ツールのブランチと対照的なところです。他のツールでは、プロジェクトのすべてのファイルを新たなディレクトリにコピーしたりすることになります。プロジェクトの規模にもよりますが、これには数秒から数分の時間がかかることでしょう。

Git - ブランチとは

つまり、自分は後半部分のように、大きなリポジトリのブランチを作るのは、ディスク容量が必要になったり、時間がかかるんだろうなと漠然と思い込んでいたのです。

Gitポケットリファレンスを読んだりして、コマンドは知っていたし、ブランチ戦略とかについても学んでいたし、リーナス・トーバルズが既存のバージョン管理システムの遅さに腹を立てて高速に動作するものを求めて作ったという経緯は読んだことがあったけど、どうやってブランチが作成されているのかまでは調べたことがありませんでした。

個人的に使う範囲では、リポジトリのサイズはたかが知れてるので、気にする必要がなかったのもあります。

あるプロジェクトで、SVNリポジトリから変換されたGitリポジトリをクローンした時に時間がかかった経験から、ブランチ作成も遅いかもしれないと勘違いしていました。

上記の公式ドキュメントには、ブランチについてしっかり説明がしてあるので、読んでみると良いと思います。

ブランチ作成に時間がかからないのであれば、サイズを小さくしようとしてプロジェクトごとにリポジトリを分割する必要がなく、ソリューション構成がシンプルに出来るので助かりそうです。