クローン

今まではローカルリポジトリの作成はgit initで行ってきました。 これは何もない真っ白なリポジトリを作成するコマンドです。 しかし、既存のリモートリポジトリから新しくローカルリポジトリを作りたいこともあります。 このとき使用するのが クローン(Clone) です。 クローンは文字通りリモートリポジトリの内容をほぼ全てコピーします。1 そのため、仮にリモートリポジトリが置いてあるサーバーのディスクが破損しデータが飛んでしまったとしてもそのリモートリポジトリからクローンしてあったローカルリポジトリのいずれかを用いることによってデータのほとんどを復元することが出来ます。

クローンをやってみる

クローンは以下のコマンドで可能です。 クローン先のディレクトリ名は省略可能です。省略した場合はURIの最後の/の先の.gitを除いた名前が使用されます。

git clone <リポジトリのURI> [クローン先のディレクトリ名]

今回はサンプル用にsampleというリポジトリを用意しました。 このリポジトリはnnct-jo-kenにあるためこれをとりあえず自分のユーザにコピーしておきましょう。 この他人のリポジトリを自分のユーザスペースにコピーする操作のことをGitHubではフォーク(Fork)と呼びます。 本来はクローンのみであれば必要のない行為ですが、今回は後でこのリポジトリを弄る予定のためフォークします。

フォークはフォークしたいリポジトリのページで右上の「Fork」ボタンから可能です。 ボタンを押すとリポジトリ名等を決めるページに遷移しますが、特に変更せずに一番下の「Create fork」をクリックしてフォークしてください。

Forkボタン

無事にフォークできれば自分のユーザスペース下にsampleというリポジトリが作られると思います。

クローンするにはまずリポジトリのURIを取得する必要があります。 GitHubの場合はリポジトリのページにある緑色のボタンから可能です。

GitHubのリポジトリURI

リポジトリのURIを入手したら早速クローンしてみましょう。 クローン先のディレクトリは、指定しない場合にはカレントディレクトリの下に作られるため、その点に留意しましょう。

git clone <先程コピーしたリポジトリのURI>

このリポジトリには単発避けゲーのコードが含まれています。 リポジトリにあるsample.pdeをProcessingで開いて実行してみてください。

リモート追跡ブランチ

単発避けゲーのコードが含まれていると書きましたが、masterブランチのコードでは敵は動きません。 実はこのリポジトリにはmaster以外にもう一つブランチが含まれています。

GitHub上で確認してみるとmove_enemyというブランチがあることがわかります。

GitHubのブランチ一覧

しかしローカルリポジトリ上でgit branchでブランチ一覧を表示してもmasterしか表示されません。 これはブランチにはローカルリポジトリ上で使用する通常のブランチとは別にリモートリポジトリ上のブランチを追跡するための リモート追跡ブランチ と呼ばれるブランチが存在します。2

少し分かりづらいため図にして説明します。 現在リモートリポジトリ上にはmastermove_enemyという2つのブランチがあり、それぞれ図のようなコミット履歴があります。 また、リモートリポジトリ上でのHEADmasterを指しています。

リモートリポジトリの状態

ここでリモートリポジトリからクローンを行います。 すると、リモートリポジトリ上のブランチは リモート追跡ブランチ としてローカルにも作られます。 リモート追跡ブランチは<リモートリポジトリ名>/<リモートリポジトリでのブランチ名>という形式で表されます。 今回の場合はリモートリポジトリ上のmastermove_enemyorigin/masterorigin/move_enemyという名前になります (クローンしたときのリモートリポジトリ名はデフォルトでoriginになることを思い出しましょう)。 リモート追跡ブランチという概念によってリモートリポジトリの状態を、 ローカルリポジトリ内の通常のブランチに影響を与えること無く追跡することができるようになるのです。

クローン後のリモートリポジトリとローカルリポジトリの状態

さて、ここまでリモート追跡ブランチについて長々と解説しましたが、 結局の所ローカルリポジトリ上でorigin/move_enemyブランチのコードを見るにはどうすればよいのでしょうか? なお、リモート追跡ブランチは特殊なブランチのため、git switchでリモート追跡ブランチへ移動することは出来ません。 やり方としてはorigin/move_enemyと同じコミットを指し示すmove_enemyというブランチを作る方法があります。 git branchgit switch -cを使ってもできそうですが、 Gitは賢いため、単にgit switch move_enemyとするだけで自動的にブランチが作られ移動することが出来ます。3

git switch move_enemy

これでようやくmove_enemyのコードを見ることが出来ます。 ちなみにmove_enemyにあるコードは不完全で、敵は動きますが画面外に行ってしまうとそのまま帰ってきません。 これを直すにはどうすればいいでしょうか?考えて修正してみましょう。修正したらコミットも忘れずに(次の講座で少し使います)。


1

オプションである程度制御が可能です。

2

リモートブランチと呼ぶこともあるようですが、言葉の使い方としては若干不正確です。

3

リモートリポジトリが一つしかないなど条件がありますが、通常の使用では引っかかることはないでしょう。