■ 単一?分散?の違い
- 単一
- レポジトリが真ん中に一個
- 基本的に誰でもチェックアウトできる。コミットは権限がないと×
- 分散
- レポジトリを clone して誰でももてる
- 誰でもローカルならコミットできる。権限があればリモートにpush(コミット)可能
- push できなくても、相手が pull で反映を取り込める
■ git 何が便利なの?
- 分散
- 動作が高速(svn と体感数倍~数十倍)
- 手軽なブランチ作成
- 高速・賢いマージ
- commit/tree/blob を sha1 で管理
手元のコードを git で管理したい!
git init
git add .
git commit
だけ!簡単!
- git branch branchname でブランチの作成
- git checkout branchname でブランチに移動
- git merge branchname でブランチからマージ
やってみよう
- ブランチの作成
- ブランチへ移動
- ブランチでファイル修正、コミット
- master にチェックアウト
- さっきのブランチをマージ
■ 公開レポジトリを使う
- rails を例に
- 次から説明するコマンドが解れば、何となく使えるハズ
公開レポジトリを、手元に複製
git clone git://github.com/rails/rails.git rails
git:// は git server の URI。pull (取り込み)専用。push は不可。
log を表示
git log
git log --stat
git log --raw
git-log --author=David
git-log -Sto_proc activesupport/lib
git の管理下のファイルを grep。高速。
git grep to_proc
git grep to_proc activesupport/lib
diff 表示
git diff HEAD..HEAD^ # HEAD とその前
git diff v2.0.0..v2.1.0
タグ管理
git tag
git tag example
git checkout v2.0.0 # ファイル全部が変わるよ
clone したレポジトリは、書き換えることももちろん可能
git commit ...
git log # 変わっちゃってるよ!
git reset --hard origin/master # 大本の master に完全に戻す
git log # 無かったことになった
■ tig
- コマンドラインの git viewer
- 便利なので使おう
- 誰でもgitレポジトリを作れる
- fork して、好きなプロジェクトを開発
- 俺俺 fork 作り放題
- あとから誰でも参照できるメリット
- pull request で取り込んで!と伝えられる
man 嫁
man git-grep
man git-clone