はじめに
- 最後には師範代に認定
- git覚えたらプロジェクトを heroku.com へ deploy しよう
心: git総論、心構え
- @iwamatsu
- 岩松さん
- DebianのOS開発
- 師範
- 彼がmergeやrebaseができなかった。別れたい
gitは分散
- リモートリポジトリとローカルリポジトリ
- 主な作業はローカルリポジトリで行う
- 必要なデータがローカルにあるので動作が速い
- プッシュしてはじめて、他のユーザーと履歴共有する。
- ローカルリポジトリはおれのもの。リモートリポジトリはみんなのもの
リモートリポジトリとローカルリポジトリ
- HEAD いまチェックアウトしているもの
- 作業中に誰かがコミットをプッシュしても、ローカルは認識できない
- リモートの作業を反映するまではその辺は気にしないで良い
gitは頑健
- 乱暴に言うとスナップショットシステム
- SHA1ハッシュで管理されている。
- コミット、ツリー構造、実際のファイルのどれかが変更されるとハッシュ値が更新される
gitは時間的な変遷を管理する
- コミットの前はどうなっていたのか
- 前の状態に戻すことが出来る
git reflog
- 消したbranchとかも参照を消しているだけなので、戻すことが出来る
- 90日まで
git gc
するまでgit config --global gc.auto 0
でgcを無効にできる
- 常にコミットしておいた方がむしろ安心。
質問
- svnから移行するときの説得方法は?
- コミット権限とりあげよう
- githubが重い
- enterprise速いよ
- git gc実行こわい。どれくらいのサイズですればいいの。
- 大きいのは仕方ないのでは
- git objectを集めるのが趣味なので気にしない人もいる
- 検索かけたときに遅くなったら、とか目安になるかも。
技:
- 小川さん
- @@conceal_rs
- jpmobileの人
- 師範
本日の課題
- 3〜5人のチームで
- コミットメッセージちゃんとかく
git pull --rebase
を怖がらずにやるgit pull
との違いを実感する
コミットメッセージをしっかり書く
- 当たり前のことだが、あまり実践されていない
- コミットメッセージのみを介して会話する
- 意思疎通が出来るレベルでメッセージを書くことが目的
git pull -rebaseを怖がらずに
- 今日はコンフリクトが起こりやすい題材となっている
git pull との違いを実感する
- mergeとrebaseの違いを実感する
- mergeだとコミット家系図が入り込んでしまうため、コミット間の相関関係が分かりづらい
題材
- Numbersファイルをチームで編集
- チーム間ではコミット内容に関する相談、会話をあまりしない
- pushのタイミングは告知しないでいいよ
- commitしてpushすることを5回ほど繰り返す
Numbersとは
- 1〜10の数値が書かれた10行のファイル
- 好きな数値の後ろに記号を追加/削除する
- コンフリクトしやすくしよう!
- コミットメッセージに、追加した記号や数値に関する情報を記載する
- コミット内容に関しては、このコミットメッセージでやりとりする
- コミット内容に関しては、相談・会話をしない!
- コミットメッセージは、コミットオブジェクトの要約であることを意識する
- 自分のコミットが連続しているのは敗北!
- git pushの声掛けはok
最後にやったことの確認
- githubのNetworkを確認
git log --graph --pretty=oneline --decorate
repository
http://github.com/git-dojo/teamNN
をcloneして始める
実技
Numbersを自由に更新
実技2
pull時に必ずrebaseでやる縛り
git commit -> git push | git pull --rebase
git remote update -> git rebase origin/master
テクニックの解説
- rebaseはコミットをかぶせる感じ
- mergeはコミットを統合する
git pushが失敗するのは?
- remoteに新しいコミットがあると失敗する
このときgit pull
- remoteにある、差分をmerge
- localのコミットをmerrge
git pull --rebase
- remoteの差分を先にrebase
- localのコミットをmergeする
git pull --reaseでconflict
- 無名branchがチェックアウトされた状態
- どうする
- ファイル編集
git add Numbers
git rebase --continue
- つまりgit commitしないこと
git rebaseの利点
- 見やすい
- 誰がcommitしたか分かりやすい
git merge
- conflictしない
- 自分の元々の編集履歴が残るので、後になって調べやすい
- commitに問題があったかどうかなどの調査しやすい
merge か rebase か
- 状況次第であることを意識する
- 基本的にはrebaseしてからpushが良い
- 他人がcommitしていることが意識出来る
- ブランチはmergeが良い
無名ブランチ
commitしないこと
git rebase --continue
で続けるgit rebase --abort
git rebase --skip
でそのコミット捨てちゃう
今日覚えた事のメモ
git push するたたびにgithubのアカウントとpw聞かれるのはなぜ?
以下のように、.git/config
内の記述がhttps〜になっていると聞かれる
url = https://github.com/git-dojo/team10.git
ので、このように変更する。
url = git@github.com:git-dojo/team10.git
githubのNetworkみたいなものをコマンドラインで見る
git log --graph --pretty=oneline --decorate
git pullする際のお作法
--rebaseをデフォルトで付ける。
git config branch.master.rebase true
diff
git diff --word-diff
作業の流れ
- いろいろ作業
git add
git commit
git pull --rebase
- conflictを解決
git add
git rebase --continue