Gitの基礎練習・その2
前回(id:takahashim:20080521)の続きです。
新しいファイルを追加します
作業コピーの状態を確かめます
$ git status # On branch master nothing to commit (working directory clean)
コミットし忘れているファイルはありません。自分が作業コピーに加えた修正は、リポジトリに反映されています。
リポジトリの修正を取り込みます(ここでは何も起きません)
一般に複数人で開発しているときには、リポジトリに対して誰かが修正をコミットしているかもしれません。リポジトリに対して行われた修正を自分の作業コピーに取り込みましょう。
$ git pull Already up-to-date.
この練習ではリポジトリにコミットしているのは自分だけですから、他の誰かがリポジトリを更新しているはずはありません。ですから、単に現在のリビジョン番号が表示されてgit pullの実行は終わります。
新しいhello.txtファイルを作ります
$ echo "Hello." > hello.txt $ cat hello.txt Hello.
新しく作ったファイルはまだSubversionの管理下にありません
$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # hello.txt nothing added to commit but untracked files present (use "git add" to track)
いま作ったファイルhello.txtはまだ追加していませんので、 Gitはhello.txtのことを「知らない」ことになります。 git statusを使うとGitが「知らない」ファイルがわかります。
hello.txtを追加します
$ git add hello.txt warning: LF will be replaced by CRLF in hello.txt $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.txt #
ファイルhello.txtを作業レポジトリに追加しました。でも、まだマスタリポジトリには反映していません。 git statusを実行すると、追加したけれどまだコミットしていないファイルがわかります(new file:と書かれます)。
コミットしてリポジトリに反映します
$ git commit -a -m "Add hello.txt." Created commit b2dbce6: Add hello.txt. warning: LF will be replaced by CRLF in hello.txt 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hello.txt $ git status # On branch master nothing to commit (working directory clean)
コミットした後、再度git statusしてみると、 hello.txtはもう表示されません。すでにコミットされたからです。
新しいディレクトリを追加します
ディレクトリもファイルと同じように追加します
新しいディレクトリも、ファイルと同じように作成してから追加します。Subversionのように、同時に追加するコマンドはなさそうです。というか、そもそもディレクトリ単位の管理はなさそうで、空のディレクトリを追加することはできないようです。
$ mkdir src
ディレクトリの中にファイルを作って追加します
$ cd src/
※ここで、エディタを使ってGood.javaを作成する
$ cat good.rb puts "Good" $ git add good.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: good.rb # $ git commit -a -m "Add a Ruby source file." Created commit 781b99d: Add a Ruby source file. 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 src/good.rb $ cd .. $ git status # On branch master nothing to commit (working directory clean) ※コミット忘れがないので、何も表示されませんが、マスタレポジトリには反映されていません。 $ git push Counting objects: 8, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (7/7), 570 bytes, done. Total 7 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (7/7), done. To c:/home/repos/.git 9aa769c..781b99d master -> master $ git status # On branch master nothing to commit (working directory clean)
普段の作業はこんな風に進みます
$ git pull Already up-to-date. $ cd src/ ※ここで、エディタを使ってgood.rbを編集する $ cat good.rb puts "Good!" $ git diff ※差分を見てみよう diff --git a/src/good.rb b/src/good.rb index b641623..c0ab7cd 100644 --- a/src/good.rb +++ b/src/good.rb @@ -1 +1 @@ -puts "Good" +puts "Good!" $ git commit -a -m "Add an exclamation mark." Created commit bf793e5: Add an exclamation mark. 1 files changed, 1 insertions(+), 1 deletions(-) $ git push Counting objects: 7, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 315 bytes, done. Total 4 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. To c:/home/repos/.git 781b99d..bf793e5 master -> master
ファイル名を変更してみよう
ファイル名をgood.rbからmain.rbに変更するには以下のようにします。変更後はコミットが必要です。
$ git status # On branch master nothing to commit (working directory clean) $ git mv good.rb main.rb $ ls main.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: good.rb -> main.rb # $ git commit -m "Rename it." Created commit 0535394: Rename it. 1 files changed, 0 insertions(+), 0 deletions(-) rename src/{good.rb => main.rb} (100%) $ git push Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 284 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To c:/home/repos/.git bf793e5..0535394 master -> master $ git status # On branch master nothing to commit (working directory clean)
Gitの基礎練習は以上です。お疲れさま。……と言いつつ、これだと分散開発のメリットが見えてこないのが難(<元がSubversion用なので、SubversionでできないけどGitでできるようになったことは出てくるはずがありません)。あとで付け足すかも。
Windows(非Cygwin)でGitするならckwが便利
デフォルトのGit on MSysでは当然のごとくcmd.exeを使うわけですが、cmd.exeは何かと不便すぎます。かといってCygwinはちょっと……という人は、ckwを使うといいと思います。
ckwはオリジナルがダウンロードできなくなっているらしいのですが、改造版がダウンロードできるそうです。素晴らしいです。
http://d.hatena.ne.jp/hideden/20071123/1195822428
オープンソースはよいなあ、と思う瞬間です(そんな奴がWindows使うなという意見もあるでしょうけど、Windowsですらオープンソースのアプリケーションの恩恵にあずかれるのは悪くないと思います)。