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

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

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

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

続きはこちら
GIT IMMERSIONで無料でGitを学ぶ メモ7
GIT IMMERSIONで無料でGitを学ぶ メモ8

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

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

GIT IMMERSION LAB38

クローンされたリポジトリを確認
リモートリポジトリ上のブランチについて学ぶ。

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

01:クローンされたリポジトリを見てみよう

実行してみよう
$ cd cloned_hello
$ ls

実行結果は以下のようなイメージだ。

                                          • -

$ cd cloned_hello
$ ls
README
Rakefile
lib

                                          • -

コピー元のリポジトリのトップレベルのすべてのファイルのリストが表示されているはずだ。(README、Rakefile、LIB)

02:リポジトリの履歴確認

実行してみよう
$ git hist --all
実行結果は以下のようなイメージだ。

                                          • -

$ git hist --all
* e1399d1 2012-03-06 | Updated Rakefile (HEAD, origin/master, origin/greet, origin/HEAD, master) [Jim Weirich]
* 183c6ad 2012-03-06 | Hello uses Greeter [Jim Weirich]
* 297678c 2012-03-06 | Added greeter class [Jim Weirich]
* 3ce0095 2012-03-06 | Added README [Jim Weirich]
* 76ba0a7 2012-03-06 | Added a Rakefile. [Jim Weirich]
* b8f15c3 2012-03-06 | Moved hello.rb to lib [Jim Weirich]
* 9c78ad8 2012-03-06 | Add an author/email comment [Jim Weirich]
* 4054321 2012-03-06 | Added a comment (v1) [Jim Weirich]
* 1b754e9 2012-03-06 | Added a default value (v1-beta) [Jim Weirich]
* 3053491 2012-03-06 | Using ARGV [Jim Weirich]
* 3cbf83b 2012-03-06 | First Commit [Jim Weirich]

                                          • -

コピー元のリポジトリのコミット履歴と全く同じ履歴が表示されたはずだ。ブランチの名前だけが違うはずだ。

03:リモートブランチ

履歴のリストにはmasterブランチがある(HEADと一緒に)。しかし、(origin/master, origin/greet and origin/HEADという)妙な名前のブランチがたくさんあるね。もう少ししたらそれらについて話そう。

GIT IMMERSION LAB39

originって何?

リモートリポジトリの命名について学ぶ。
実行してみよう
$ git remote

実行結果は以下のようなイメージだ。

                                          • -

$ git remote
origin

                                          • -

cloneされたリポジトリがoriginという名前のリモートリポジトリを知って​​いることがわかる。originについてより詳細な情報を得ることができるかどうか見てみよう。

実行してみよう
$ git remote show origin

実行結果は以下のようなイメージだ。

                                          • -

$ git remote show origin
* remote origin
Fetch URL: /Users/jerrynummi/Projects/edgecase/git_immersion/auto/hello
Push URL: /Users/jerrynummi/Projects/edgecase/git_immersion/auto/hello
HEAD branch (remote HEAD is ambiguous, may be one of the following):
greet
master
Remote branches:
greet tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)

                                          • -

リモートリポジトリのoriginは単にオリジナルののhelloであることがわかる。リモートリポジトリは、一般的に別のマシン、おそらく集中サーバーに入っている。
我々がここで見ることができるのと同じように、同じマシン上のリポジトリのポイントも見ることができる。
"origin"という名前については特別なことは何もないが、"origin"という名前を使う時は習慣的にプライマリー集中サーバーのリポジトリ(それが1つの場合)を指す。

GIT IMMERSION LAB40

リモートブランチ
ローカルVSリモートのブランチを学ぼう。

クローンしたリポジトリのブランチを見てみよう。
実行してみよう
$ git branch

実行結果は以下のようなイメージだ。

                                          • -

$ git branch
* master

                                          • -

これだけだ。masterブランチだけが表示されているが、greetブランチはどこへいったのだろうか?
gitのbranchコマンドは、デフォルトではローカルブランチの一覧のみを示す。

01:リモートブランチの一覧表示

すべてのブランチを見るにはこうしてみよう。

実行してみよう
$ git branch -a

実行結果は以下のようなイメージだ。

                                          • -

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/greet
remotes/origin/master

                                          • -

Gitは元のリポジトリのコミットを全て持っているが、リモートリポジトリ内のブランチはローカルブランチのようには扱われない。自分のgreetブランチが必要ならば自分で作るしかない。すぐにそれを行う方法について説明しよう。

GIT IMMERSION LAB41

オリジナルのリポジトリを変更
オリジナルのリポジトリにいくつかの変更を行って変更をpullできるようにしてみよう。

01:オリジナルのhelloリポジトリを変更する

実行してみよう
$ cd ../hello

注:今オリジナルのhelloリポジトリにいる。

READMEファイルに対して次のように変更を加えてみよう。
FILE: README

                                          • -

This is the Hello World example from the git tutorial.
(changed in original)

                                          • -

この変更をadd,commitしよう

実行してみよう
$ git add README
$ git commit -m "Changed README in original repo"

02:次回は

オリジナルのリポジトリは今cloneされたバージョンにはない最新の変更をした。次にそれらの変更をcloneされた側にpullしよう。

GIT IMMERSION LAB42

変更をfetchする(取ってくる)

リモートリポジトリから変更をpullする方法を学習する。

実行してみよう。
$ cd ../cloned_hello
$ git fetch
$ git hist --all

注:今cloned_helloリポジトリにいる。

実行結果は以下のようなイメージだ。

                                          • -

$ git fetch
From /Users/jerrynummi/Projects/edgecase/git_immersion/auto/hello
e1399d1..e18658c master -> origin/master
$ git hist --all
* e18658c 2012-03-06 | Changed README in original repo (origin/master, origin/HEAD) [Jim Weirich]
* e1399d1 2012-03-06 | Updated Rakefile (HEAD, origin/greet, master) [Jim Weirich]
* 183c6ad 2012-03-06 | Hello uses Greeter [Jim Weirich]
* 297678c 2012-03-06 | Added greeter class [Jim Weirich]
* 3ce0095 2012-03-06 | Added README [Jim Weirich]
* 76ba0a7 2012-03-06 | Added a Rakefile. [Jim Weirich]
* b8f15c3 2012-03-06 | Moved hello.rb to lib [Jim Weirich]
* 9c78ad8 2012-03-06 | Add an author/email comment [Jim Weirich]
* 4054321 2012-03-06 | Added a comment (v1) [Jim Weirich]
* 1b754e9 2012-03-06 | Added a default value (v1-beta) [Jim Weirich]
* 3053491 2012-03-06 | Using ARGV [Jim Weirich]
* 3cbf83b 2012-03-06 | First Commit [Jim Weirich]

                                          • -

ここの時点でリポジトリは元のリポジトリからコミットを全て持っているが、それらはcloneしたリポジトリのブランチに統合されていない。

上記のコミット履歴中に“Changed README in original repo”というのがあるだろう。そのコミットには“origin/master” and “origin/HEAD”というのを含んでいることに注意してほしい。

“Updated Rakefile”というコミットの行を見てくれ。このコミットがローカルのmasterブランチになっているだろう。たった今fetchした新しいコミットではないね。

ここで言えるのは、“git fetch”コマンドを実行すると、リモートリポジトリから新しいコミットを取ってくるが、ローカルブランチにマージされないということだ。

01:README をチェックしてみよう

cloneされたREADMEが変更されてないことを示そう。

実行してみよう
$ cat README

実行結果は以下のようなイメージだ。

                                          • -

$ cat README
This is the Hello World example from the git tutorial.

                                          • -

何も変わっていないね。