クローン
今まではローカルリポジトリの作成はgit init
で行ってきました。
これは何もない真っ白なリポジトリを作成するコマンドです。
しかし、既存のリモートリポジトリから新しくローカルリポジトリを作りたいこともあります。
このとき使用するのが クローン(Clone) です。
クローンは文字通りリモートリポジトリの内容をほぼ全てコピーします。1
そのため、仮にリモートリポジトリが置いてあるサーバーのディスクが破損しデータが飛んでしまったとしてもそのリモートリポジトリからクローンしてあったローカルリポジトリのいずれかを用いることによってデータのほとんどを復元することが出来ます。
クローンをやってみる
クローンは以下のコマンドで可能です。
クローン先のディレクトリ名は省略可能です。省略した場合はURIの最後の/
の先の.git
を除いた名前が使用されます。
git clone <リポジトリのURI> [クローン先のディレクトリ名]
今回はサンプル用にsample
というリポジトリを用意しました。
このリポジトリはnnct-jo-ken
にあるためこれをとりあえず自分のユーザにコピーしておきましょう。
この他人のリポジトリを自分のユーザスペースにコピーする操作のことをGitHubではフォーク(Fork)と呼びます。
本来はクローンのみであれば必要のない行為ですが、今回は後でこのリポジトリを弄る予定のためフォークします。
フォークはフォークしたいリポジトリのページで右上の「Fork」ボタンから可能です。 ボタンを押すとリポジトリ名等を決めるページに遷移しますが、特に変更せずに一番下の「Create fork」をクリックしてフォークしてください。
無事にフォークできれば自分のユーザスペース下にsample
というリポジトリが作られると思います。
クローンするにはまずリポジトリのURIを取得する必要があります。 GitHubの場合はリポジトリのページにある緑色のボタンから可能です。
リポジトリのURIを入手したら早速クローンしてみましょう。 クローン先のディレクトリは、指定しない場合にはカレントディレクトリの下に作られるため、その点に留意しましょう。
git clone <先程コピーしたリポジトリのURI>
このリポジトリには単発避けゲーのコードが含まれています。
リポジトリにあるsample.pde
をProcessingで開いて実行してみてください。
リモート追跡ブランチ
単発避けゲーのコードが含まれていると書きましたが、master
ブランチのコードでは敵は動きません。
実はこのリポジトリにはmaster
以外にもう一つブランチが含まれています。
GitHub上で確認してみるとmove_enemy
というブランチがあることがわかります。
しかしローカルリポジトリ上でgit branch
でブランチ一覧を表示してもmaster
しか表示されません。
これはブランチにはローカルリポジトリ上で使用する通常のブランチとは別にリモートリポジトリ上のブランチを追跡するための リモート追跡ブランチ と呼ばれるブランチが存在します。2
少し分かりづらいため図にして説明します。
現在リモートリポジトリ上にはmaster
とmove_enemy
という2つのブランチがあり、それぞれ図のようなコミット履歴があります。
また、リモートリポジトリ上でのHEAD
はmaster
を指しています。
ここでリモートリポジトリからクローンを行います。
すると、リモートリポジトリ上のブランチは リモート追跡ブランチ としてローカルにも作られます。
リモート追跡ブランチは<リモートリポジトリ名>/<リモートリポジトリでのブランチ名>
という形式で表されます。
今回の場合はリモートリポジトリ上のmaster
とmove_enemy
はorigin/master
とorigin/move_enemy
という名前になります
(クローンしたときのリモートリポジトリ名はデフォルトでorigin
になることを思い出しましょう)。
リモート追跡ブランチという概念によってリモートリポジトリの状態を、
ローカルリポジトリ内の通常のブランチに影響を与えること無く追跡することができるようになるのです。
さて、ここまでリモート追跡ブランチについて長々と解説しましたが、
結局の所ローカルリポジトリ上でorigin/move_enemy
ブランチのコードを見るにはどうすればよいのでしょうか?
なお、リモート追跡ブランチは特殊なブランチのため、git switch
でリモート追跡ブランチへ移動することは出来ません。
やり方としてはorigin/move_enemy
と同じコミットを指し示すmove_enemy
というブランチを作る方法があります。
git branch
やgit switch -c
を使ってもできそうですが、
Gitは賢いため、単にgit switch move_enemy
とするだけで自動的にブランチが作られ移動することが出来ます。3
git switch move_enemy
これでようやくmove_enemy
のコードを見ることが出来ます。
ちなみにmove_enemy
にあるコードは不完全で、敵は動きますが画面外に行ってしまうとそのまま帰ってきません。
これを直すにはどうすればいいでしょうか?考えて修正してみましょう。修正したらコミットも忘れずに(次の講座で少し使います)。
オプションである程度制御が可能です。
リモートブランチと呼ぶこともあるようですが、言葉の使い方としては若干不正確です。
リモートリポジトリが一つしかないなど条件がありますが、通常の使用では引っかかることはないでしょう。