WHAT'S NEW?
Loading...

Gitをおさらいしよう【5/6】

さて、今回はリモートリポジトリ関連をやろうと思う。

■リモートリポジトリとは

現在作業を行っている『mygit』は、お使いのPCの中だけの世界、つまりローカルなリポジトリで作業が行われているため、他のPCでその作業の続きを行うことが出来ない。

これは理由は簡単だ。自宅にいながらコンビニで買い物は出来ないから、一度外に出なければいけない。

もし知人が『お前の作業、俺も手伝ってやるよ!』となった場合、リモートにリポジトリがあれば、URLという形でその知人にリポジトリを公開することができる。
つまり、どこのコンビニに行って何を買うのかさえわかっていれば、この問題はすぐに解決する。



とは言え、いざGitでリモートリポジトリをテストしたいなと思っても、Gitビギナーに取ってみては、その方法は皆目検討がつかないのではないか。

大丈夫、俺達にはBitBucketというサービスがある。ここは無料でリモートリポジトリを提供してくれている優良なサイトだ。早速登録しようじゃないか。

リモートリポジトリサービスの提供サイトとしてはGitHubが有名だが、GitHubでは無料でプライベートなリポジトリを作ることが出来ない。作ったリポジトリは公開されてしまう。

他の人に見せたくない場合、プライベートリポジトリの制限がない、BitBucketをおすすめする。


■リモートリポジトリを作ろう

まずは早速こちらのサイトでユーザ登録を行っておこう。
https://bitbucket.org
登録は無料だ。


画面に大きく『Unlimited private code repositories』と書かれているように、プライベートリポジトリ数には制限がない。これは嬉しい。

そしてその下に小さく、『FREE FOR 5 USERS』と書かれいる。これは登録したユーザ1アカウントに対して、あと4人、チームメイトを追加できるという意味だ。逆にいうと、無料アカウントでは総勢5人までのチームとなる。今回は自分一人なので特に問題はない。

Usernameには好きな名前。例えば貴様が仲間内で『ジンジャー』と呼ばれているなら、『Ginger』などと入力すれば良い。もちろん『はなくそ』と呼ばれているなら、『Hanakuso』が適切だろう。

ただしありきたりな名前だとすでに使われてしまっている可能性があるので、記号などを組み合わせると良い。例えば誕生日が12月12日なら『Ginger.1212』など。

Emailは、このリモートリポジトリサービスに登録する際に使用される、使用可能なメールアドレスを入れておけば良い。ここで入力したメールアドレス宛に登録メールが送信されるで、必ず受信可能なメールアドレスを入れておこう。

Passwordはいわゆるパスワード。英数字記号の組み合わせで、複雑なら複雑なほど良い。ただし、余りにも複雑怪奇なものにすると、自分でも忘れてしまってログインできなくなるので、程々の複雑さが良いかもしれない。

すべてを入力したら、『Sign up for free』ボタンで登録しよう。
Emailに入力したメールアドレス宛にメールが送信されたはずだ。

送信されたメールは以下の様な内容になっているので、『Confirm this email address』ボタンをクリックしよう。


『Confirm this email address』をクリックすると、ブラウザが開いて以下の様なログイン画面になる。
下の方にソーシャルボタンがあるが、最初から表示してくれれば、わざわざアカウントを作らないでも済んだんだけど、どういうことだろうか。まぁよい。

先ほど登録した情報を覚えているだろうか。『Username or email』蘭に登録したユーザ名かメールアドレス、『Password』蘭にパスワードを入力してログインしよう。

ログイン後、画面右上にあるユーザアイコンから『Manage Accout』を選択すると、表示言語を日本語に選択できる。その他にも氏名、居住地、アイコンなど、いろいろな情報を登録しておこう。


ちなみに日本語に関してはまだすべての文章が日本語化されているわけではないので、『BETA』と表示されている。もし翻訳に協力したいと思ったら、『Help translate Bitbucket into your language』のリンクをクリックし、Transifexという翻訳リソースサイトで翻訳作業に貢献することができる。興味がある人は参加してみてはどうだろうか。

ちなみにアバター画像だが、このBitbucketはGravatarに対応している。Gravatarというのは、よくあるプロフィール画像のインテグレーションサイトだ。ここに登録した画像が、各種サービスでつかわれるので、もし複数のサービスでプロフィール画像を変更したくなったら、Gravatarに登録してある画像を変更するだけで済む。

http://ja.gravatar.com/

もっとも、そのサービスがGravatarに対応していれば、の話だけどね。
BitbucketやTransifexなどは、Gravatarに対応している。

ちなみにWordpressのコメント欄でも使われているので、Gravatarに登録したメールアドレスでコメントを残すと、Gravatarに登録した画像が表示されるようになる。
現状だと新規アカウントはこのWordpressの登録機能を使って登録するようになっている。



さて、早速リポジトリを作ってみようじゃないか。
画面上部にある『リポジトリ』から『リポジトリの作成』を選択し、以下のように適切な情報を記入し、『リポジトリの作成』ボタンをクリックしよう。これだけでリモートリポジトリが作成される。
極めて簡単だ。


■リモートリポジトリにソースを登録

さて、現在デスクトップで作業している『mygit』フォルダを、作成した『mygit』リポジトリに入れてみよう。そして今後、仲間にはリモートリポジトリのURLを招待し、そこから作業を行ってもらうことにする。

まずは空っぽのリモートリポジトリにソースコードを入れておこう。これは最初の1回だけやれば良い話だ。

Git Bashで『mygit』フォルダ内に移動した後、リモートリポジトリに追加するためには、以下の手順を踏む。
  1. ローカルリポジトリにリモートリポジトリをadd
  2. ローカルリポジトリからリモートリポジトリにpush
となる。

1のaddだけど、これはURLを指定することになるんだけど、その時にURLに別名をつけることができる。たいていのGitの説明だと、originという名前にしているようだ。今回も同じく、originという名前でURLを登録しておくことにする。

そしてURLだけど、これはBitbucketで先ほど作ったリポジトリに『クローン』ボタンがあるので、これをクリックすればURLを見ることができる。『git clone』というコマンドも一緒にはコピーされてしまっているなら貼付け時に削除しよう。


そして実際のコマンドは以下のようになる。
『git remote add origin https://****@bitbucket.org/****/mygit.git』
『****』の部分にはアカウント名が入る。
このコマンドを叩いてみよう。


さて、これでaddが終わった。この作業は1度だけすれば良い作業になる。

次に、このリモートリポジトリに対してpushしよう。
pushというのはどういうコマンドなのかというと、ローカルリポジトリでコミットされた内容を、リモートリポジトリに反映するコマンドだ。
現状リモートリポジトリは空っぽなので、今pushするとすべてのファイル(今回はindex.htmlだけ)がリモートリポジトリに作られることになる。早速やってみよう。
コマンドは『git push origin master』だ。


このgit pushコマンドでだれでもリモートリポジトリにアクセス出来てしまうと問題なので、リモートリポジトリに設定されたパスワードを使うことになる。Bitbucketに登録した時のパスワードを入れてEnterしよう。

BitBucket側で『概要』をクリックすると、内容が更新されているのがわかると思う。

ちなみに『コミット』をクリックしてコミット履歴を表示した場合、BitBucketで作ったユーザになってない場合がある。これは、ローカルリポジトリのユーザとBitBucketのユーザが一致してないからだ。
具体的に言うと、『git config --global user.email』で登録したメールアドレスと、bitbucketで登録したメールアドレスが違っているということになるんだけど、実はこれは大した問題ではない。

Bitbucket側でエイリアス的にユーザのメールアドレスを関連付けることができるので、心配はいらない。

画面右上のギアアイコンをクリック後、『ユーザー名のエイリアス』のページで、名前とメールアドレスを一致させることができる。これは覚えておこう。

さて、これで無事にリモートリポジトリにファイルを準備することができた。

■リモートリポジトリからクローンしよう

クローンというのは、例えばデスクトップにある『mygit』プロジェクトを手伝ってくれる人がいたとしたら、その人がやる作業になる。

リモートリポジトリにある情報を、自分の開発環境に複製、つまりクローンするわけだ。
単にコピーではない理由は、Gitの諸設定(誰がどこに作ったリポジトリなのか)などを含めて複製するので、コピーではないわけだ。

つまり、クローン後のファイルなどはそのままローカルリポジトリになるため、今まで行ってきた『git add』、『git commit』などがすぐに使える状態であるといえる。

もちろん作業する人のマシンにはGitがはいってないといけないのだけど、手伝ってくれる人がGitを始めて知るっていうこともザラだと思うし、そもそもこのブログの記事を読めばたいていの作業ができるようになると思うので、そこは気にしないで話を進めておくよ。

幸いにもクローンする際に、好きなフォルダ名をつけることができるので、mygitとは別のフォルダ名を指定して、今クローンしてみようと思う。

『git clone <URL> フォルダ名』でOKだ。<URL>には先ほどpushした時のURLをいれよう。
もちろんコマンド入力後にパスワードを聞かれるので、Bitbucketに登録した時のパスワードをいれよう。もし手伝ってくれる人がクローンする場合、自分のBitbucketのアカウントで登録したパスワードを使う必要がある(その前にBitbucketでその彼を招待しないといけないけど、そこは割愛させてもらう)。


今回は『git clone <URL> himgit』という風に、『himgit』フォルダにクローンしてみた。
デスクトップに『himgit』という名前でフォルダが作られたはずだ。


ちなみにこのフォルダの左下にある緑色のチェックマークだけど、これは『git status』で表示されるステータスに合わせてアイコンが変わってくれるというものだ。編集されれば赤いバツが、addされれば青いプラスなどに自動的に変わってくれる。

これはTortoiseGitという、Git BashのGUIアプリをインストールすると自動的に表示してくれるので、興味がある人はインストールしてみるのも良いだろう。

https://code.google.com/p/tortoisegit/wiki/Download

■別のプロジェクトを加えてみよう

さて、Gitには、ライブラリ的なリポジトリも当然存在する。
例えば文字コードを変更するライブラリだったり、アップロードされた画像を加工したりするライブラリだ。世界中の人たちが、おそらく便利であろうライブラリを作ってはGitHubやBitBucketに公開している。
そしてそれらのライブラリのリモートリポジトリは一般に公開されている場合が多い。

それらのライブラリを使う場合、ソースコードをzipファイルとしてダウンロードすることもできるのだが、そのリポジトリを自分のリポジトリ配下に加えてしまったほうが、ライブラリのバージョンアップにも追従できるし、便利なのではないか、と。

他にも、階層が深くなりすぎてしまうようなプロジェクトでは、ある一定以下のフォルダはサブなプロジェクトとして管理したほうが楽かもしれない。
特にGUIなIDEを使っていると、プロジェクトのフォルダ内にあるすべてのファイルを一度スキャンしてからじゃないと作業できないなんてことがあるので、eclipseやNetBeansなんか使ってる場合、作業始めるまで30分待ちなんてことが起きないとも限らない。

というわけで、何をするのかというと、デスクトップにある『mygit』フォルダ内に、別のGitリモートリポジトリのソースを加えて見ようと思う。

ここでは、俺が以前つくった画像編集ライブラリのリポジトリを加えてみようと思う。
リポジトリのURLは以下だ。

https://github.com/ogaaaan/Imagion

全然別のリモートリポジトリを、現在の作業フォルダに追加するには、追加したい場所まで移動し、そこで以下のコマンドを叩く。

『git submodule add <URL> <フォルダ名>』

早速Git Bashで『mygit』に移動した状態でコマンドを叩いてみよう。


コマンドの見ればわかると思うが、これがサブモジュールだ。imagionという名前のサブモジュールになった。
これで、『mygit』リポジトリは自分の管理下だが、その中にある『imagion』フォルダは俺の管理下のままということにできるわけだ。

もしこの俺の管理してるサブモジュール化された『imagion』内を貴様が編集したとしても、GitHubの俺のImagionリポジトリへのアクセス権限がなければpushはできない。だからそんなに心配する必要もないわけだ。

ちなみにだけど、もしクローンするリモートリポジトリにサブモジュールが含まれている場合、クローン後に、サブモジュールの中身は空っぽになってる。

試しにサブモジュールが加えられた現在の『mygit』をリモートリポジトリに反映して、その後『himgit』に反映してみようと思う。

まずはコミットしてローカルリポジトリを更新しよう。メッセージは『add submodule imagion』としてみた。
『git commit -m 'add submodule imagion'』
これでサブモジュール追加後の情報をローカルリポジトリに反映することができた。

つぎにリモートリポジトリへの反映、つまりpushだ。
『git push origin master』でOK。

BitBucketで『Mygit』リポジトリの『ソース』を見てみると、こんなふうになってるはずだ。


サブモジュールが反映されている。
この状態で、このリモートリポジトリの内容を、ローカルリポジトリの『himgit』で反映してみよう。

Git Bashでcdコマンドを使い、デスクトップにある『mygit』から『himgit』に移動しよう。



移動したら、今度はリモートリポジトリをローカルリポジトリに反映するコマンド『pull』を使う。
『git pull』でOKだ。


これでデスクトップにある『himgit』を開いてみてみると、正しく反映されたのがわかると思う。
おもむろにimagionフォルダを覗いてみよう。何もはいってないはずだ。
たしかにmygitフォルダではimagion.phpというファイルが合ったはずなんだけどね。

クローンした場合、自動的にサブモジュールが反映されないのはこれで理解いただけたと思う。つまり、サブモジュールに関しては、自分の手で最新状態を反映してくれという意味だ。
すでにどこかに存在するリモーとリポジトリの内容を、自分のリモートリポジトリにまるごと入れておくのはスペースの無駄だ。そういった無駄は極力省くのが良いだろう。そんなポリシーでGitは作られているのかもしれない。

というわけで、imagionフォルダ内反映させてみよう。この場合、初期化という。
初期化の前に、今どうなっているのかを確認したほうが良い。『git submodule』とだけ叩くと、現在の状態がわかる。imagionフォルダ内には移動せずにコマンドを実行だ。


『コミット番号+サブモジュール名』が表示されたと思う。コミット番号の先頭にマイナスが付いているのがわかるだろうか。このマイナスが付いている状態が、初期化されてないということになる。
早速初期化しよう。『git submodule init imagion』コマンドで初期化可能だが、サブモジュール名をコマンド内で指定しているので、サブモジュールのフォルダ内への移動は必要ない。



さて、これで初期化が終わった。まだフォルダ内は空っぽだ。次に行うのが、最新状態への反映だ。これのコマンドは『git submodule update imagion』となる。早速やってみよう。


これで準備万端だ。もう作業を続行することができる。
ちなみにimagionフォルダ内をみてみると、このようになっている。


■まとめ

今回はGitの醍醐味とも言える『ブランチ』という枝分かれ技術よりも先に、リモートリポジトリをおさらいしたが、これはなぜかというと、すでに存在するプロジェクトを自分の環境に用意してから、ブランチなどの作業を行うというプロセスを取りたかったからだ。そのほうが現実的だよね。

初心者向けのGit『入門』ではなく初心者向けGit『おさらい』なので、そこら辺はある程度ご理解いただけてるとは思うけど、もし何か『違うだろぉ~』なんて意見がアレば、TwitterとかでRTしてもらえれば良いかな。

このブログにはコメント欄を設置してないので、Twitterで意見言っていただけてるようなので(とは言えまだ数件だけど)、もうそれで統一しようと思ってるんで。

というわけでおまちかねのブランチは次回。そして次回で終わる予定であります。
読んでいただいてありがとうござる。