Git 勉強会@万葉 #2 に行ってきた
5/8 に万葉さんで開催された Git 勉強会に参加してきました。
軽く遅刻しましたが、なんとか参加。
今回は全編 jugyo さんによるライブ git いじり。
前回は reset や stash の使い方など、実際に使う場面で困っている部分を掘り下げていく感じでした。
今回は、 1 人で使う場合の使い方を中心に、ブランチやリモートの概念とかを触ったりしてました。
というわけで、以下メモ晒し。
まとめていないし、ぱっと浮かんだコマンドも追記してしまっているので、
若干ずれてるかもしれませんが、ご容赦を。
Git について軽く
- なぜ github を使うのか?
- 個人でやるなら使わなくてもいいよね
- サーバ用意しなくても手軽に共有できる
- サーバを公開するには?
- gitosis http://openbooth.org/archives/60.html
- gitorious http://gitorious.org/projects/gitorious
- ssh
- webdav
- (git サーバは読み取り専用)
実際に Git を使ってみる
Windows の DOS プロンプトだと日本語が文字化けするらしい
tortoiseGit とかいけるんじゃね?
一人で使う
- 初期化
$git init
- 設定をする
$git config --global user.name hoge $git config --global user.email hoge@example.com $git config --global color.ui auto
- 状態を確認する
$git st
- コミットしたいファイルを追加する
$git add . #全ファイル $git add -u #バージョン管理下にある全ファイル
- コミットする
$git commit $git commit -m'Comment' # コメント付き $git commit --amend # 前回のコミットをやりなおす
- ログを見る
$git log $git log -p #差分も表示する。 -u でも可 $git log --stat #変更したファイルの概要 $git whatchanged $git log --binary #バイナリファイルの差分を見る
- コミットの内容を確認する
# HASH は 10 桁くらい指定すれば確実?
$git show HASH $git show -p HASH # 差分も表示する
- 差分を確認する
$git diff #現在の状態と、コミット予定の状態の差分 $git diff HEAD #現在の状態と、最新のコミットの差分 $git diff --cached #コミット予定の状態と、最新のコミットの差分
- 取り消し
$git reset #git add したものを取り消す。インデックスのみ $git reset --hard #全ファイルの変更を元に戻す $git revert #変更を取り消すためのコミットを作成する $git checkout HEAD FILENAME # FILE を最新のコミットの状態に戻す
- バージョン管理しているファイルを見る
$git ls-files
ブランチを使う
- ブランチを管理する
$git branch #ブランチの一覧 $git branch NAME #新規作成 $git branch -d NAME #削除
- ブランチを切り替える
index に追加したファイルがある場合に切り替えると、切り替え先のブランチにパッチとして適用される。
$git checkout NAME $git checkout -b NAME #新規作成&切り替え
- 現在の index の状態を保存する
$git stash save 'message' $git stash show$git stash list $git stash apply $git stash clear $git stash drop $git stash pop
- ブランチの変更を取り込む
コンフリクトしたら、変更して add して commit 。
$git merge BRANCH $git merge --squash #最新のコミットだけをマージする
- タグを付ける
$git tag NAME HEAD
リモートを活用する
- ワーキングコピーを作成する
$git clone PATH
- リモートを管理する
$git remote $git remote add REMOTE PATH $git remote rm REMOTE $git remote show REMOTE
- リモートの変更を取得する
pull だとマージされる。
fetch だと取得内容が FETCH_HEAD に格納される。
REMOTE, BRANCH は省略可能
$git pull REMOTE BRANCH $git fetch REMOTE BRANCH
- リモートに変更を反映する
REMOTE, BRANCH は省略可能
$git push REMOTE BRANCH $git push REMOTE BRANCH:hoge # local の BRANCH を REMOTE の hoge に push する
リモートについて参照: http://at-aka.blogspot.com/2009/02/git-remote-repository-branch.html
Git の状態遷移
コピーしたファイルを変更して add すると index に登録される。
commit すると index に登録されたものがリポジトリに登録される。
Working copy => index (cache) => repo add commit <= reset
その他
- hook が使えるらしい
- 参照: .git/hooks/*.sample
- 「何をバージョン管理するか?」をよく考えるべき
- HEAD がわからなくなると破綻する
- 親サーバはやっぱり必要?
- remote のブランチがない場合
- remote にブランチを作る
- 既存のブランチに push する
- 結局、ブランチとリモートがややこしい