git 環境のセットアップと簡単なチュートリアル
ソーシャル化するOSS開発者たち − @ITとGitHub Issue Tracker! - GitHubを見て、github がとても楽しそうなので、git を使い始めました。
良く使いそうなコマンドとかを調べたのでメモ。
git インストール
インストール
$ sudo port install git-core +svn +gitweb $ git --version git version 1.6.2.1
PATH を通す
以下をPATH に追加
/opt/local/libexec/git-core
- git の場合、git rm とかの後にファイル名の補完が効かない
- なんとかならないだろうか
- 同様のコマンドであるgit-rm なら補完できる
- git-rm を使う場合PATH を通す必要がある
github にコミットするまで
はじめてのgithub - blog.katsuma.tvを参考。
github にアカウント作成
Host github.com User git Port 22 Hostname github.com IdentityFile ~/.ssh/id_rsa TCPKeepAlive yes IdentitiesOnly yes
- 4. テストレポジトリ作成
- test という名前でgithub 上に作成
- ここにローカルのプロジェクトをアップすることになる
- これは後で消せるので、練習用としてばんばん使う
自分の名前とメールアドレスを登録
$ git config --global user.name "lukesilvia" $ git config --global user.email "lukesilvia@gmail.com"
- コミットした時にコミッタの情報として記録される
- これを登録しないとコミットできない
ローカルにテストプロジェクト作成
$ mkdir ~/gittest $ cd ~/gittest
初期化
$ git init Initialized empty Git repository in /Users/luke/gittest/.git/
- git 管理する場合最初にこれを行なう
- 毎回レポジトリを作成するのでsubversion 使っていると不思議な感じがするけど、これがgit の方法
ローカルにコミット
echo 'hoge' >> hoge.txt git add . # 確認してみる $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: hoge.txt # # コミット $ git commit -m 'test commit' [master (root-commit) 1514c69] test commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hoge.txt # コミットされたか確認 $ git status # On branch master nothing to commit (working directory clean)
github に公開
- リモートレポジトリを登録
- 「git@github.com:lukesilvia/test.git」をorigin という名前でこのレポジトリのリモートレポジトリとして登録
- origin という名前は「clone」した時とかにgit がデフォルトで使う名前。別にorigin でなくてもOK
$ git remote add origin git@github.com:lukesilvia/test.git
- リモートレポジトリにpush
$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 210 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:lukesilvia/test.git * [new branch] master -> master <<
-
- origin(git@github.com:lukesilvia/test.git)にmaster ブランチの内容をpush
- master ブランチはデフォルトのブランチで、実は現在そこにいる。「$ git branch」と打つと、ブランチが表示されて、master に現在のブランチを示す「*」がついているのが分かる
- このpush でリモートレポジトリにも「master」という名のブランチが作成される
- このpush でエラーしたら、公開鍵の設定が上手くいってない可能性が高い
これで公開完了。github にアクセスすると公開されていることが分かる。
チュートリアル
公開後に開発を続けていく上で良く行なうことと、その時に使うコマンド。
変更をローカルにコミット
$ echo 'fuga' >> hoge.txt # 変更の確認 $ git diff HEAD # ローカルにコミット $ git commit -a -m 'message'
- 「git commit -a」で全ての編集、削除をコミットする。新規追加の場合は「$ git add」してやる必要がある
- 「-a」オプションを使わない場合は、変更したファイルに対してファイル毎に「$ git add」を行なってから「$ git commit」
ローカルの変更をリモートに反映
$ git push origin master
- orign レポジトリに、master ブランチの内容を反映
変更の取り消し
- まだコミットしてない変更を取り消す(最新のコミットの状態に戻す)
$ git reset --hard HEAD
- 特定のファイルの変更だけを取り消す
$ git checkout HEAD path/to/file
- git add を取り消す
$ git reset path/to/file
ここ2日間の変更を確認
$ git log -p --since="2 day ago"
間違えてコミットしちゃったのを直す
$ git revert HEAD
- これにより、直前のコミットを相殺する変更がコミットが生成される。コミットメッセージもgit によって用意される(変更は可能)ので、それをコミット
無視ファイルの定義
- 共通のignore
- 以下のコマンドでconfig に設定を追加して。次に無視するファイルを~/.gitignore に書いていく
git config --global --add core.excludesfile "$HOME/.gitignore"
- レポジトリ毎にignore
- レポジトリ内に「.gitignore」ファイルを置き、そこにルールを追加
- 書き方
はまりそうなdiff コマンド
- git diff の挙動は特殊
$ git diff --cached # HEAD と索引間の差分; # つまり、"commit" を実行したときにコミットされる内容 $ git diff # 索引と作業ディレクトリ間の差分; # つまり、"commit" を実行したときに含まれない # 変更内容 $ git diff HEAD # HEAD と作業ツリー間の差分: # つまり、"commit -a" を実行したときにコミットされる内容
基本的に、「diff HEAD」で差分確認して、「commit -a」でコミットとなると思います