git使っていますか〜?
最初、必要性が理解できなかったですが、使えば使うほど、これがないと安心して確実に開発を進めるのは難しいなぁ。。。と思えてきます。不思議なツールです。
gitのとっつき難さって、git自体もそうですが、githubやbitbucketも一緒に勉強しなければならないところが大変ですよね。REPLみたいな環境があればコマンドをいろいろ試して勉強が捗るんですけどね。
最近、知ったローカルだけで練習する方法をご紹介します。教わったサイトは以下です。知っている人からすると、こいつ何をいまさら。。。って思われるかもしれませんけど。。。
PC環境はMacを想定しています。Desktop上で遊ぶ感じにします。
まず、リモートリポジトリを作成します(git init --bareのbareが重要みたいですね)
cd ~/Desktop mkdir remote.git cd remote.git git init --bare
で、複数人で開発する状況を想定して、クライアント側をとりあえず2つ作ります。~/Desktop配下にc1とc2というディレクトリができます。
cd ~/Desktop git clone remote.git c1 git clone remote.git c2
c1でtestを作り、中にc1と入力し、add & commit & push します。
cd ~/Desktop/c1 echo "c1" > test git add . git commit -m "c1" git push
c2で、c1の変更を受け取るため、pullして、test内にc2と記入して、add & commit & push します。
cd ~/Desktop/c2 git pull echo "c2" >> test git add . git commit -m "c2" git push
c1で、c2の変更分をpullすれば。。。c1とc2のリポジトリの内容が同一になります。c1とc2がtestをいじっていますが、順を追って作業しているので、編集内容について干渉はおきません。平和ですね。。。
cd ~/Desktop/c1 git pull
さて、次。再び、c1でtestに追記します。
cd ~/Desktop/c1 echo "c1" >> test git add . git commit -m "c1" git push
c2で、testにc2と追記します。pushすると。。。エラーが起きますね。当然ですね。c1がremote.gitにpushしたtestの内容をc2に取り込んでないから。。。です。この差分をしっかり検知してくれるところ(人間が変更分を記憶とか認識しておく必要がないこと)がgitというかバージョン管理ソフトの偉いところです。
cd ~/Desktop/c2 echo "c2" >> test git add . git commit -m "c2" git push
To /Users/******/Desktop/remote.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to '/Users/******/Desktop/remote.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
上記のエラーメッセージにちゃんとヒントが書かれていますから(赤字)、仰せの通りにします。
testを開くと以下のように、差分がわかりやすく表示されているので、
c1 c2 <<<<<<< HEAD c2 ======= c1 >>>>>>> 4740b16c5b9c05cd7c5487043a46e515665b6966
例えば、以下のようにして。
c1 c2 c1 c2
add & commit & push します。
git add . git commit -m "c2" git push
さらに、c1でpullすれば、再び、c1とc2が同じイメージになります。
git pull
しょうもない記事ですが。。。本当のgit初心者の方には有用な情報と思います。
ちなみに、上記はmasterブランチのみで作業しましたが、本来はブランチを切って。。。という作業になると思います。ただ、初学者はその前にこうした経験があったほうが理解しやすいのではないか。。。と想像しています。
情報系の学科を卒業したけどgit触らずに卒業する人って。。。結構いるんじゃないかなぁ。。。と思ったりしています。うちだと、たぶん、僕の科目を受けた学生さん(全体の3割くらい?)くらいかな。。。と思ったり。
学校で教わらない場合は、自分で勉強しましょうね。
でわ!