めもめも。

最近方々で名を馳せている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キーを押します。

次に「パスフレーズ決めて」(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 --cachedaddしたものとコミット済みのものとの差を表示
  • git commit … ローカルリポジトリに送信
  • git checkout … ローカルリポジトリから受信(?)
  • git push … リモートリポジトリに送信
  • git pull … リモートリポジトリから受信

今回はpushpullは扱いません。

初期化

自分で新しく何かを始めるときは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しただけではここには表示されません。

参考

あと元に戻す系はここがわかりやすいです。