Skip to content

Commit 466041d

Browse files
committed
Merge pull request progit#414 from harupong/ja-chapter9
[ja] Update chapter9
2 parents df671f3 + f14f301 commit 466041d

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

ja/09-git-internals/01-chapter9.markdown

+12-12
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Insert 18333fig0901.png
121121

122122
独自のツリーを作ることも可能です。Git は通常、ステージングエリアもしくはインデックスの状態を取得することによってツリーを作成し、
123123
そこからツリーオブジェクトを書き込みます。そのため、ツリーオブジェクトを作るには、まず幾つかのファイルをステージングしてインデックスをセットアップしなければなりません。
124-
text.txt ファイルの最初のバージョンである単一エントリーのインデックスを作るには、`update-index` という配管コマンドを使います。
124+
test.txt ファイルの最初のバージョンである単一エントリーのインデックスを作るには、`update-index` という配管コマンドを使います。
125125
前バージョンの test.txt ファイルを新しいステージングエリアに人為的に追加するにはこのコマンドを使います。
126126
ファイルはまだステージングエリアには存在しない(未だステージングエリアをセットアップさえしていない)ので、`--add` オプションを付けなければなりません。
127127
また、追加しようとしているファイルはディレクトリには無くデータベースにあるので、`--cacheinfo`オプションを付ける必要があります。
@@ -377,7 +377,7 @@ HEADの値を設定することもできます。
377377

378378
これが軽量版のタグのすべてです。つまり決して変動しないブランチなのです。一方、注釈付き版のタグはもっと複雑です。注釈付き版のタグを作ろうとすると、Git はタグオブジェクトを作り、そして、コミットに対する直接的な参照ではなく、そのタグをポイントする参照を書き込みます。注釈付き版のタグを作ることで、これを見ることができます。(注釈付き版のタグを作るには `-a` オプションを指定して実行します)
379379

380-
$ git tag -a v1.1 1a410efbd13591db07496601ebc7a059dd55cfe9 m 'test tag'
380+
$ git tag -a v1.1 1a410efbd13591db07496601ebc7a059dd55cfe9 -m 'test tag'
381381

382382
これで、作られたオブジェクトの SHA-1ハッシュ値を見ることができます。
383383

@@ -439,7 +439,7 @@ Git レポジトリ test のオブジェクトデータベースに戻りまし
439439

440440
Git は zlib を使用してこれらのファイルのコンテンツを圧縮するため、多くを格納していません。これらすべてのファイルを集めても 925バイトにしかならないのです。Git の興味深い機能を実際に見るために、幾つか大きなコンテンツをレポジトリに追加してみましょう。前に作業したGritライブラリから `repo.rb` ファイルを追加します。これは約 12Kバイトのソースコードファイルです。
441441

442-
$ curl http://github.com/mojombo/grit/raw/master/lib/grit/repo.rb > repo.rb
442+
$ curl https://raw.github.com/mojombo/grit/master/lib/grit/repo.rb > repo.rb
443443
$ git add repo.rb
444444
$ git commit -m 'added repo.rb'
445445
[master 484a592] added repo.rb
@@ -455,10 +455,10 @@ Git は zlib を使用してこれらのファイルのコンテンツを圧縮
455455
100644 blob 9bc1dc421dcd51b4ac296e3e5b6e2a99cf44391e repo.rb
456456
100644 blob e3f094f522629ae358806b17daf78246c27c007b test.txt
457457

458-
それから `git cat-file` を使って、そのオブジェクトがどれくらいの大きさか知ることができます。
458+
それから、そのオブジェクトのディスク上のサイズがどのくらいか調べることもできます。
459459

460-
$ git cat-file -s 9bc1dc421dcd51b4ac296e3e5b6e2a99cf44391e
461-
12898
460+
$ du -b .git/objects/9b/c1dc421dcd51b4ac296e3e5b6e2a99cf44391e
461+
4102 .git/objects/9b/c1dc421dcd51b4ac296e3e5b6e2a99cf44391e
462462

463463
ここで、ファイルに少し変更を加えたらどうなるのか見てみましょう。
464464

@@ -476,10 +476,10 @@ Git は zlib を使用してこれらのファイルのコンテンツを圧縮
476476

477477
そのブロブは今では当初とは異なるブロブです。つまり、400行あるファイルの最後に1行だけ追加しただけなのに、Git はその新しいコンテンツを完全に新しいオブジェクトとして格納するのです。
478478

479-
$ git cat-file -s 05408d195263d853f09dca71d55116663690c27c
480-
12908
479+
$ du -b .git/objects/05/408d195263d853f09dca71d55116663690c27c
480+
4109 .git/objects/05/408d195263d853f09dca71d55116663690c27c
481481

482-
これだとディスク上にほとんど同一の 12Kバイトのオブジェクトを二つ持つことになります。もし Git がそれらのひとつは完全に格納するが二つ目のオブジェクトはもうひとつとの差分(delta)のみを格納するのだとしたら、どんなに素晴らしいことかと思いませんか?
482+
これだとディスク上にほとんど同一の 4Kバイトのオブジェクトを二つ持つことになります。もし Git がそれらのひとつは完全に格納するが二つ目のオブジェクトはもうひとつとの差分(delta)のみを格納するのだとしたら、どんなに素晴らしいことかと思いませんか?
483483

484484
それが可能になったのです。Git がディスク上にオブジェクトを格納する初期のフォーマットは、緩いオブジェクトフォーマット(loose object format)と呼ばれます。しかし Git はこれらのオブジェクトの中の幾つかをひとつのバイナリファイルに詰め込む(pack up)ことがあります。そのバイナリファイルは、空きスペースを保存してより効率的にするための、パックファイル(packfile)と呼ばれます。あまりにたくさんの緩いオブジェクトがそこら中にあるときや、`git gc` コマンドを手動で実行したとき、または、リモートサーバにプッシュしたときに、Git はこれを実行します。何が起こるのかを知るには、`git gc` コマンドを呼ぶことで、Git にオブジェクトを詰め込むように手動で問い合わせることができます。
485485

@@ -501,7 +501,7 @@ Git は zlib を使用してこれらのファイルのコンテンツを圧縮
501501

502502
残りのオブジェクトは、どのコミットにもポイントされていないブロブです。このケースでは、以前に作成した "what is up, doc?" の例と "test content" のブロブの例がそれにあたります。それらに対していかなるコミットも加えられてないので、それらは遊離(dangling)しているみなされ新しいパックファイルに詰め込まれないのです。
503503

504-
他のファイルは新しいパックファイルとインデックスです。パックファイルは、ファイルシステムから取り除かれたすべてのオブジェクトのコンテンツを含んでいる単一のファイルです。インデックスは、特定のオブジェクトを速く探し出せるようにパックファイルの中にあるオフセットを含むファイルです。素晴らしいことに、`gc` を実行する前のディスク上のオブジェクトを集めると約 12Kバイトのサイズであったのに対して、新しいパックファイルは 6Kバイトになっています。オブジェクトをパックすることで、ディスクの使用量が半分になったのです。
504+
他のファイルは新しいパックファイルとインデックスです。パックファイルは、ファイルシステムから取り除かれたすべてのオブジェクトのコンテンツを含んでいる単一のファイルです。インデックスは、特定のオブジェクトを速く探し出せるようにパックファイルの中にあるオフセットを含むファイルです。素晴らしいことに、`gc` を実行する前のディスク上のオブジェクトを集めると約 8Kバイトのサイズであったのに対して、新しいパックファイルは 4Kバイトになっています。オブジェクトをパックすることで、ディスクの使用量が半分になったのです。
505505

506506
Git はどうやってこれを行うのでしょうか? Git はオブジェクトをパックするとき、似たような名前とサイズのファイルを探し出し、ファイルのあるバージョンから次のバージョンまでの増分のみを格納します。パックファイルの中を見ることで、スペースを確保するために Git が何を行ったのかを知ることができます。`git verify-pack` という配管コマンドを使用して、何が詰め込まれたのかを知ることができます。
507507

@@ -528,7 +528,7 @@ Git はどうやってこれを行うのでしょうか? Git はオブジェ
528528
chain length = 1: 1 object
529529
pack-7a16e4488ae40c7d2bc56ea2bd43e25212a66c45.pack: ok
530530

531-
ここで、`9bc1d` というブロブを覚えてますでしょうか、これは `repo.rb` ファイルの最初のバージョンですが、このブロブは二つ目のバージョンである `05408` というブロブを参照しています。出力にある三つ目のカラムはパック内のオブジェクトのサイズを示しているため`05408` 12Kバイトを要しているが、`9bc1d` はたったの 7バイトしか要していないことがわかります。さらに興味深いのは、最初のバージョンは増分として格納されているのに対して、二つ目のバージョンのファイルは完全な状態で格納されているということです。これは直近のバージョンのファイルにより速くアクセスする必要があるであろうことに因ります。
531+
ここで、`9bc1d` というブロブを覚えてますでしょうか、これは `repo.rb` ファイルの最初のバージョンですが、このブロブは二つ目のバージョンである `05408` というブロブを参照しています。出力にある三つ目のカラムはオブジェクトの実体のサイズを示しており`05408` の実体は 12Kバイトを要しているが、`9bc1d` の実体はたったの 7バイトしか要していないことがわかります。さらに興味深いのは、最初のバージョンは増分として格納されているのに対して、二つ目のバージョンのファイルは完全な状態で格納されているということです。これは直近のバージョンのファイルにより速くアクセスする必要があるであろうことに因ります。
532532

533533
これに関する本当に素晴らしいことは、いつでも再パックが可能なことです。Git は時折データベースを自動的に再パックして、常により多くのスペースを確保しようと努めます。また、あなたはいつでも `git gc` を実行することによって手動で再パックをすることができるのです。
534534

@@ -864,7 +864,7 @@ Git を使っていく過程のある時点で、誤ってコミットを失っ
864864

865865
素晴らしい。`master` ブランチがかつて存在した場所に、最初の二つのコミットを再び到達可能にして、あなたはいま `recover-branch` という名前のブランチを持っています。次に、損失の原因は reflog の中にはないある理由によるものだったと想定しましょう。`recover-branch` を取り除いて reflog を削除することによって、それをシミュレートすることができます。最初の二つのコミットは今いかなるものからも到達不能な状態です。
866866

867-
$ git branch D recover-branch
867+
$ git branch -D recover-branch
868868
$ rm -Rf .git/logs/
869869

870870
なぜなら reflog データは `.git/logs/` ディレクトリに残っているため、あなたは効率的に reflog を持たない状態です。この時点でそのコミットをどうやって復元できるのでしょうか? ひとつの方法は `git fsck` ユティリティーを使用することです。それはあなたのデータベースの完全性(integrity)をチェックします。もし `--full` オプションを付けて実行すると、別のオブジェクトによってポイントされていないすべてのオブジェクトを表示します。

0 commit comments

Comments
 (0)