めもめも。
最近方々で名を馳せているgitを導入してみました。今さらですか? 今さらですね。
今まではTortoiseSVNくらいしか触った事なかったんですが、やってみたらずいぶん簡単でした。ああ良かった。これは便利だ。
一日試してちょっと慣れてきた気がするのでメモしておきます。
環境
- Debian 6.0.3
コマンドラインでやります。
インストール
aptitudeを使います。
aptitude install git-core git-doc
aptitude search
すると単純にgit
というのもあるんですが、それだと動きませんでした。なにこれ?
セットアップ
ユーザー情報を設定
コミットログに記載される名前を設定します。
git config --global user.name "Firstname Lastname" git config --global user.email "your_email@youremail.com"
名前の方、引用符で括らないとスペースで途切れてしまうので注意。
間違っても、そのまま上書きできます。削除する際は--unset
を使います。
git config --global --unset user.mail
設定値を省略すると、現在の設定値が表示されます。
git config --global user.name
一覧表示する場合は--list
で行います。
git config --global --list
user.name=Firstname Lastname user.email=your_email@youremail.com
gitを使いやすくする
もうちょっと設定します。
まずコミットの際に使うエディターの設定。
git config --global core.editor vi
あと表示時に色付きで表示するように。
git config --global core.diff auto git config --global core.branch auto git config --global core.status auto
これでいい感じに扱えると思います。
SSHのキーを作成
内部で使ってるみたいです。~/.ssh/
ディレクトリ内にファイル(後述)を作成します。既に存在してる場合は、必要に応じてバックアップを取っておいてください。
ssh-keygen -t rsa -C "your_email@example.com"
すると対話形式で設定が始まります。
「どこに保存する?」 (Enter file in shich to save the key
)と聞かれ、デフォルトの場所が表示されます。そのままで問題ないので、何も入力せずに
次に「パスフレーズ決めて」(Enter passphrase (empty for no passphrase)
)と言われますので、適当にパスワードを設定してください。空でもいいみたいですけど、閉じたネットワークだけでなくGitHub等に繋げる事も考えると、何か設定しておいた方が良いでしょう。
このパスワードは今後の通信の際にも聞かれるので、覚えておいてください。
「もっかい入力しろ」と言われるのでもっかい入力します。
何かメッセージが出てきて完成です。次のファイルが作られます。
- ~/.ssh/id_rsa
- ~/.ssh/id_rsa.pub
id_rsa
が秘密鍵(誰にも教えちゃいけない)、id_rsa.pub
が公開鍵(通信先に教える)です。
はい、これで準備完了。
基本操作
ローカルですぐ試せるので、ちょっとやってみましょう。
git init
… git管理開始git status
… 現状を一覧表示。変更したけどコミットしてないとか、管理外のファイルがあるとかgit add
… ファイルをコミット待ちリストに追加git reset
… ファイルをコミット待ちリストから削除git diff
… 現在のファイルとadd
したものとの差を表示git diff --cached
…add
したものとコミット済みのものとの差を表示git commit
… ローカルリポジトリに送信git checkout
… ローカルリポジトリから受信(?)git push
… リモートリポジトリに送信git pull
… リモートリポジトリから受信
今回はpush
とpull
は扱いません。
初期化
自分で新しく何かを始めるときはinit
を使います。
mkdir newproject cd newproject git init
tarを解凍したものをまるごとやっても良いです。その際は、既存のファイルの追加をお忘れなく。
tar zxf hoge.tar.gz cd hoge git init git add . git commit -m "init"
add
のドット.
は誤りじゃなくて、カレントディレクトリを指してます。ここから下全部、というわけです。
commit
時は-m "あういえ"
で簡易的にメッセージを指定できます。省略するとエディターが立ち上がるので、複数行を書く事ができます。書いたら上書き保存して終了すればコミットされます。
ファイル作成
echo Hello World! > hello.txt git status git add hello.txt git status git commit -m "Hello World" git status
コミットまで、ががーっとやってみました。
git status
で変更したファイルとかを一覧表示できます。手順ごとに確認して、ファイルがどういう状況にあるのか見てみてください。
ファイル編集
echo Hello Beautiful World!! > hello.txt git diff git add hello.txt git commit -m "The world is beautiful"
add
は「ファイルをリポジトリに追加」するんじゃなくて、「ファイルをコミット対象リストに追加」するイメージなんだと思います。たぶん。
add
前のファイルはdiff
で差を表示できます。add
後については後述。
編集したファイルを戻す
SVNでいうところのrevertにあたるのかな?
元に戻すときはcheckout
です。
echo foo > hello.txt git diff git checkout hello.txt git diff
コミット待ちのファイルをいじる
改めて編集して、コミット待ちにします。
echo Hello Damn World!! > hello.txt git add hello.txt git status
add
するとdiff
には出てこなくなります。代わりにdiff --chached
で表示されます。
git diff git diff --cached
この状態でさらにファイル編集する事もできます。
echo foo > hello.txt git diff git diff --cached
これで「実際のファイル」「コミット待ちのファイル」「コミット済みのファイル」の三種類が見て取れるかと思います。
この状態でcheckout
すると、「実際のファイル」だけが「コミット待ちのファイル」の内容に戻ります。
git checkout hello.txt git diff git diff --cached
コミット待ちのファイルの方も含めて戻すにはcheckout HEAD
します。
echo foo > hello.txt git add hello.txt echo bar > hello.txt git diff git diff --cached git checkout HEAD hello.txt git diff git diff --cached
HEAD
は最後のコミットを表してるそうです。
コミット待ちの状態を解除するには、reset
を使います。
echo foo > hello.txt git add hello.txt git status git reset hello.txt git status
ログを見る
git log
コミットログを閲覧できます。add
しただけではここには表示されません。
参考
あと元に戻す系はここがわかりやすいです。