Androidはワンツーパンチ 三歩進んで二歩下がる

プログラミングやどうでもいい話

GIT IMMERSIONで無料でGitを学ぶ メモ2

GIT IMMERSIONで無料でGitを学ぶ メモ1
に引き続きメモその2です。

続きは
GIT IMMERSIONで無料でGitを学ぶ メモ3
GIT IMMERSIONで無料でGitを学ぶ メモ4
GIT IMMERSIONで無料でGitを学ぶ メモ5
GIT IMMERSIONで無料でGitを学ぶ メモ6
GIT IMMERSIONで無料でGitを学ぶ メモ7
GIT IMMERSIONで無料でGitを学ぶ メモ8

GIT IMMERSIONというGitのやり方を教えてくれるチュートリアルサイトを勉強しながらメモを取っています。
自分用なのであまり見やすいものではないです。
がメモ1に較べて大分翻訳らしくなってきました。

※ $ git hist コマンドはGIT IMMERSION LAB11 でコマンドエイリアスを設定しているので
hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
の意味です。

GIT IMMERSION LAB18

目的を果たしたタグを削除しよう。(LAB17でコミットを取り除く前に最新のコミットにoopsというタグを付けた)

$ git tag -d oops

$ git hist --all
でも、表示されなくなった。タグを削除したことで参照が外れたので
ガーベッジコレクション対象となった。

GIT IMMERSION LAB19

コミットを修正する方法
コミットをした後で「あ、あれも修正しとくんだった!」と気づいてしまったがコミットを2つにしたくない時、前回のコミットを修正するには

hello.rbを修正→コミット→hello.rbを修正とします。

1.普通にhello.rbを修正してコミット
$ git add hello.rb
$ git commit -m "Add an author comment"

2.ここで前回のコミットを修正したくなった
$ git add hello.rb
$ git commit --amend -m "Add an author/email comment"
コマンドを使う。


3.$ git histでコミットが修正されたか確認する。
  1.でコミットした時の"Add an author comment"というコミットメッセージは消えて、2.でコミットした時の"Add an author/email comment"に置き換わっているはず。

これと同じことは、ブランチをリセットして1つ前のコミットに戻り、新しく変更を反映してから再度コミットすれば出来る。

GIT IMMERSION LAB20

リポジトリの中のファイルを移動する方法

◯やり方その1
hello.rbをlibディレクトリに移動するとする
git mvを使う。

$ mkdir lib
$ git mv hello.rb lib
$ git status

この操作で元のディレクトリにあったhello.rbが削除され、新しく作成されたlibディレクトリにhello.rbが作成された。
この情報はただちにステージングされ、コミット待ちになる。
git status コマンドを叩くと、ファイルが移動されたことが表示される。

◯やり方その2
hello.rbをlibディレクトリに移動するとする
自分でファイルを移動した後、git addで新しい場所のhello.rbを追加、git rm で元の場所のhello.rbをGitから取り除く。

$ mkdir lib
$ mv hello.rb lib
$ git add lib/hello.rb
$ git rm hello.rb

◯以上の変更をcommitする。

$ git commit -m "Moved hello.rb to lib"

GIT IMMERSION LAB21

他のファイルをリポジトリに追加する方法

まず、Rakefile(rake を実行するときに読み込まれるファイル。
実態は Ruby スクリプトである。)をリポジトリに追加しましょう。下記の方法でうまくいくでしょう。

Rakefileという名称のファイルを作成する。
その中に以下のように記述し保存する。

ここから----
#!/usr/bin/ruby -wKU

task :default => :run

task :run do
require './lib/hello'
end
ここまで----

作成したRakefileをaddしてcommitしましょう
$ git add Rakefile
$ git commit -m "Added a Rakefile."

Rakeを使ってhello.rbを実行してみよう。
$ rake

Hello, World!が表示される。

GIT IMMERSION LAB22

Gitの内部
「.git」ディレクトリの構造について学ぼう。

探検の時がやってきた。まずはあなたのプロジェクトのルートから…

◯実行してみよう
$ ls -C .git
ここにはgitの全ての材料が詰まっている。

◯「objects」ディレクトリを覗いてみよう。
$ ls -C .git/objects
2文字の名前のディレクトリ群が表示されるはずだ。このディレクトリ名はgitに記録されたobject id ( = SHA1 )の初めの2文字だ。

◯さらに深くobjectsを覗いてみよう。
$ ls -C .git/objects/

のところにはさっき表示されたディレクトリを入れてみる。 こんな感じで表示される。 ls -C .git/objects/15 ea9e90ad5cc1c58cf6952c2f4a18deeb4234ae 38文字の名前のファイルが表示されるはずだ。 これらがgit に記録されたオブジェクトのファイルだ。これらのファイルは圧縮されエンコーディングされているので直接見てもわからないが、もう少し詳しく見ていってみよう。 ●Config File 実行してみよう $ cat .git/config 表示されたのはプロジェクト特有の設定情報ファイルだ。 このプロジェクトでは、あなたのホームディレクトリの下にある.gitconfigにある設定情報を上書きする。 ●Branches and Tags 実行してみよう $ ls .git/refs $ ls .git/refs/heads $ ls .git/refs/tags $ cat .git/refs/tags/v1 (このv1というタグは以前のレッスンで付けたタグ) tags のサブディレクトリにファイルがある。どのタグもあなたが以前git tag コマンドを使って付けたタグと一致する。それらの中身はタグに紐付けられたコミットのハッシュだ。 headsディレクトリは似ているがタグよりむしろブランチに使われる。私たちは現時点で一つだけのブランチを持っているからあなたはmasterだけが見える。 ●HEAD File 実行してみよう $ cat .git/HEAD HEADファイルは現在のブランチへの参照を持っている。現時点ではmasterを参照しているはずだ。