Git プロジェクトを取得するには、大きく二通りの方法があります。 ひとつは既存のプロジェクトやディレクトリを Git にインポートする方法、 そしてもうひとつは既存の Git リポジトリを別のサーバーからクローンする方法です。
既存のプロジェクトを Git で管理し始めるときは、そのプロジェクトのディレクトリに移動して次のように打ち込みます。
$ git init
これを実行すると .git
という名前の新しいサブディレクトリが作られ、リポジトリに必要なすべてのファイル (Git リポジトリのスケルトン) がその中に格納されます。
この時点では、まだプロジェクト内のファイルは一切管理対象になっていません
(今作った .git
ディレクトリに実際のところどんなファイルが含まれているのかについての詳細な情報は、ch10-git-internals.ascを参照ください)。
空のディレクトリではなくすでに存在するファイルのバージョン管理を始めたい場合は、まずそのファイルを監視対象に追加してから最初のコミットをすることになります。この場合は、追加したいファイルについて git add
コマンドを実行したあとで git commit
コマンドを行います。
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
これが実際のところどういう意味なのかについては後で説明します。ひとまずこの時点で、監視対象のファイルを持つ Git リポジトリができあがり最初のコミットまで済んだことになります。
既存の Git リポジトリ (何か協力したいと思っているプロジェクトなど) のコピーを取得したい場合に使うコマンドが、git clone
です。
Subversion などの他の VCS を使っている人なら「"checkout" じゃなくて "clone" なのか」と気になることでしょう。
これは重要な違いです。ワーキングコピーを取得するのではなく、Git はサーバーが保持しているデータをほぼすべてコピーするのです。
そのプロジェクトのすべてのファイルのすべての歴史が、デフォルトでは git clone
で手元にやってきます。
実際、もし仮にサーバーのディスクが壊れてしまったとしても、どこかのクライアントに残っているクローンをサーバーに戻せばクローンした時点まで多くの場合は復元できるでしょう(サーバーサイドのフックなど一部の情報は失われてしまいますが、これまでのバージョン管理履歴はすべてそこに残っています。ch04-git-server.ascで詳しく説明します)。
リポジトリをクローンするには git clone [url]
とします。
たとえば、多言語へのバインディングが可能なGitライブラリである libgit2
をクローンする場合は次のようになります。
$ git clone https://github.com/libgit2/libgit2
これは、まず libgit2
というディレクトリを作成してその中で .git
ディレクトリを初期化し、リポジトリのすべてのデータを引き出し、そして最新バージョンの作業コピーをチェックアウトします。
新しくできた libgit2
ディレクトリに入ると、プロジェクトのファイルをごらんいただけます。
もし libgit2
ではない別の名前のディレクトリにクローンしたいのなら、コマンドラインオプションでディレクトリ名を指定します。
$ git clone https://github.com/libgit2/libgit2 mylibgit
このコマンドは先ほどと同じ処理をしますが、ディレクトリ名は mylibgit
となります。
Git では、さまざまな転送プロトコルを使用することができます。先ほどの例では https://
プロトコルを使用しましたが、git://
や user@server:/path/to/repo.git
といった形式を使うこともできます。これらは SSH プロトコルを使用します。ch04-git-server.ascで、サーバー側で準備できるすべてのアクセス方式についての利点と欠点を説明します。