はじめに

あ、サメさん。




どうしたんだい?。




サメさんが書いたコードを参考にしたくて。
サメさんのGithubのリポジトリのURL教えて欲しいんだ。




クローン(複製)したいんだね?
じゃあ、今度鮭の丸焼きプレゼントしてね!
https://…………………..だよ。




もちろんだよ!
ありがとう!
・・・カチャカチャ
git cloneしてっと




あれ?サメさん。ブランチ切っていないの?
珍しいね?




え?たくさんリポジトリ作って管理しているけど。。




git branchで中に入っているbranch確認したんだけど、masterブランチしか入っていないよ?




あー、なるほどね。
それじゃあ、git branch –allで–allスイッチつけて試してごらんよ。




おおお!
いっぱい出てきた。でもこれなんだ?branch名がちょっとおかしいぞ・・・。




クマくん。
多分、クマくんはgit を操作する上で、ちょっとしたことだけど重要なことを知らないだけだと思うよ。
ベアリポジトリって知っているかい?




ベアリポジトリ?
僕の親類かな?




それはベア(熊)違い。




OK。
まずはgit cloneをどんどん使っていくことになるだろうから、
ベアリポジトリの概念を知って操作に慣れておこう!
ベアリポジトリとは?
- ベアリポジトリは作業ディレクトリを持たないリポジトリである。
- 外部に公開し、作業を中継するリポジトリとして使う。
- GithubのようなサーバーをベースとするGitの基本システム。








えーと、、、
作業用ディレクトリを持たないってどういうこと?




簡単に言うと、ただ複製を作るためのオリジナルでいるってことかな。
Githubを僕たちも使っていると思うんだけど、リモートリポジトリと普段呼んでいるリポジトリはベアリポジトリだからね。




えええ!
そうなんだ・・・
言われてみればリモートリポジトリって複製作るためっていうか、全てまとめてるもんね。




そうなんだ。
リモートリポジトリで僕たち編集とか基本しないでしょ?
コンフリクトが起きた時は例外だけど。
だから基本的に色々コードを書き溜めておく作業台としてではなく、一旦清書として提出する先みたいなイメージだね。
よくある質問
チーム開発をしていて、git cloneしてきたのにブランチが1つしか見つからない。




さっき、なんでベアリポジトリのこと分かっていないって分かったの?




さっきmasterブランチしかないって言ってたからね。
ベアリポジトリからgit cloneで複製をしてきたら、ベアリポジトリでアクティブだった。つまりHEADが指していたブランチだけが表示されるんだよ。




他のブランチ消えちゃうの?




安心して。
さっきも出したでしょ!
git branch –allで–allスイッチをつければ見えてないけど実はあるブランチを見ることができるんだよ。




git checkout -b そのブランチ名でしっかりとコミットログも引き継げるんだ。
試しに作業で作ってみようか!
練習
ローカルでベアリポジトリ用のディレクトリを作成する。




ここでは
git clone –bareというスイッチを使ってクローンするよ。
git clone –bare 参照したいディレクトリ 置きたい場所
という文法でコマンドを使うよ。
$ cd
# ホームディレクトリに移動
$ mkdir test
# テストディレクトリを作成
$ touch first
# firstファイルを作成
$ git init
# gitリポジトリを生成
$ git add .
# ステージングエリアに追加
$ git commit -m "first file create"
# コミットする
$ git checkout -b "second"
# secondブランチを作成し移動
$ touch second
# secondファイルを作成
$ git add .
# ステージングエリアに追加
$ git commit -m "second file create"
# コミットする
$ cd
# ホームディレクトリに移動
$ git clone --bare test test.git
# testディレクトリからtest.gitというベアリポジトリを作成
$ cd test.git
# ベアリポジトリのtest.gitへ移動
$ git branch
# masterブランチしか見えないことを確認
$ git branch --all
# masterブランチとsecondブランチが見えることを確認
* master
remote/origin/second




remote/origin/secondっていうのがベアリポジトリにあるブランチだね。
最初は見えないけど、ちゃんと参照できるんだ!
ベアリポジトリにあるブランチを参照しているからコミットログも引き継いでそこからコミットをつなげていくんだよ。
$ git checkout "second"
# secondブランチへ移動
$ git log --oneline
second file create
first file create
# コミットログを引き継いでいることを確認。
終わりに




気にせず使ってたけど、これでスッキリしたよ!




gitは洗練されたシステムだから、結構へぇぇってなるよね。
意外と、あれ?これなんだ?って思う挙動があったら積極的に聞いてね!




Git関連はやっぱり本を呼んだようがいいと思う。
おすすめ書籍だよ。