web-dev-qa-db-ja.com

gitの「ステージ」とはどういう意味ですか?

アクションに使用されている単語の意味が見つからなかったため、gitを理解するのは難しいと感じました。辞書で「ステージ」の意味を確認しましたが、ソース管理の概念に関連する意味はありませんでした。

Gitのコンテキストで「ステージ」とはどういう意味ですか?

352
000

To stageファイルは、コミットのために細かく準備することです。 Gitはそのインデックスを使用して、最後のコミット以降に行った変更の特定の部分のみをコミットできます。 2つの機能に取り組んでいるとします。1つは終了し、もう1つはまだ作業が必要です。コミットして帰宅したい(最終的に5時!)が、まだ完了していない2番目の機能の一部をコミットしたくない。最初のフィーチャーに属することがわかっているパーツをステージングし、コミットします。これで、コミットは最初の機能が完了したプロジェクトですが、2番目はまだ作業ディレクトリで作業中です。

331
Rook

これまでのところ誰もが「正式な」方法でそれに答えているので、メタファーの力で学習を強化するための代替案を使ってこれを行いましょう。

したがって、ステージング領域は次のようになります:

  • コミットしたいファイルのキャッシュ
  • 一連のチューブではなく、実際にはダンプトラックで、荷を積んだ作業をリポジトリに移動する準備ができています
  • 選択されたファイルが魔法のように石になり、気まぐれでリポジトリに魔法のように転送できる魔法の場所
  • 黄色いレンガの道でファイルをリポジトリに移動します(または元に戻したい場合はフォールオフします)
  • ファイルがセメントの靴のペアを受け取った後、リポジトリの海に投げ込まれる海港の架空の場所
  • 図書館の受付デスクでは、図書館員が図書館に提出する準備をするためにファイルをそこに置きます
  • ベッドの下に押し込む前に物を入れるボックス。ベッドは以前に押し込んだボックスの保管場所です。
  • パワーローダーを使用してリポジトリウェアハウスに入る前のファイルのローディングベイ
  • 電気ドリップコーヒーメーカーのフィルター。ファイルがコーヒーパウダーの場合、コミットされたファイルは淹れたてのコーヒーです。
  • 金庫の隣にあるスクルージマクダックのオフィスでは、ファイルは彼の巨大なマネービンの金庫に入る前のコインのようなものです
  • ペットショップ、ペットを家に持ち帰ると

魔法です!

146
Spoike

ステージングは​​、gitのコミットプロセスの前のステップです。つまり、gitでのコミットは、ステージングと実際のコミットの2つのステップで実行されます。

変更セットがステージング領域にある限り、gitを使用して好きなように編集できます(ステージングファイルを他のバージョンのステージングファイルで置き換える、ステージングから変更を削除するなど)。

壊れた比喩時間:

引っ越し業者を呼び出して、古いアパートから新しいアパートに物を運ぶシナリオを考えてください。それを行う前に、持ち物を調べ、何を持っていくか、何を捨てるかを決め、バッグに入れて、メインの廊下に置いておきます。引っ越し業者は単に来て、廊下から(すでに詰め込まれた)バッグを取り出して、それらを輸送します。この例では、ムーバーがアイテムを取得するまでのすべてがステージングされます。つまり、どこに行くか、どのようにパックするかなどを決定します(たとえば、ムーバーがそこに到着する前に、半分のアイテムを捨てるように決定することができます-これは一部です)ステージングの)。

技術的な観点から見ると、ステージングは​​トランザクションのコミットもサポートしています。これは、すべての操作を、失敗する可能性のあるもの(ステージング)と失敗できないもの(コミット)に分割することによって行います。

Gitのcommitは、ステージングが成功した後にトランザクションとして実装されます。ステージングのいくつかのステップが失敗する可能性があります(たとえば、コミットする必要がありますが、HDDは99.9999%フルで、gitにはコミットを実行するスペースがありません)。これはステージングに失敗し(リポジトリは部分的なコミットによって破損することはありません)、ステージングプロセスはコミット履歴に影響しません(エラーが発生してもリポジトリは破損しません)。

38
utnapistim

ファイルをステージングするには、コミットの準備をします。 gitはこのアクションをユーザーコントロールに公開しているため、部分的なコミットを作成したり、ファイルを変更したり、ステージングしたり、もう一度変更したり、コミットしたり、元の変更に戻したりすることができます。

ステージングを使用すると、バージョン管理にアプローチしたいhowをより細かく制御できます。

26
Josh K

他の優れた答えに追加するために、「ステージ」の名前の由来は次のとおりです。

ステージの意味について辞書をチェックしましたが、ソース管理の概念に関連する意味はありませんでした。

英語では、「ステージングする」とは

(公開イベント)を企画して参加する:UDFサポーターがソフィアでデモンストレーションを行いました

(- http://oxforddictionaries.com/definition/stage から)

Git機能の「ステージング」という名前は、この意味に由来しています。ステージングとは、コミットを準備して整理することです。もちろんコミットはパフォーマンスとまったく同じではありませんが、isVCSの重要なイベントです:-)。

21
sleske

他のほとんどのバージョン管理システムでは、データを保存する場所が2つあります。作業コピー(現在使用しているフォルダー/ファイル)とデータストア(バージョン管理が変更をパックして保存する方法を決定する場所)です。 Gitには3番目のオプションがあります。ステージング領域(またはインデックス)です。 これは基本的に、どの変更が出荷されるかを決定するための荷受場所です。

ソース: http://gitready.com/beginner/2009/01/18/the-staging-area.html

5
Mostafiz Rahman

「ステージ」は、ファイルをチェックインするプロセスで技術的に必要な中間ステップです。つまり、リポジトリに追加する変更を収集します。 Gitの作成者は、このステップを他のVCSがコミットプロセスの一時的な部分にするため、このステップを表示して永続的にすることを選択しました。だからそれはそれができるのでそれがなぜできないのでgitがあなたに与えるオプションにすぎないのですか?

私の見たところ、gitの「ステージ」で他のVCSが提供していない主なことは、ファイルをチェックポイントするために使用できることです。すべての作業を完了してからリポジトリに永続的にコミットすることと、ローカルリポジトリに何も保存されていないことの中間段階を提供するのは、事実上、名前のない、コメントのないローカルコミットです。

たとえば、部分的に完成した機能があるとします。安定した状態であり、すべてのテストに合格し、本番環境に入る可能性がありますが、さらに多くの作業が必要です。すべての変更をステージングして、機能の作業を続行できます。

後で、ステージングした内容をコミットする(およびそのコミットをリモートリポジトリにプッシュする)か、新しい変更をステージング領域に追加して一度にコミットするか、新しい変更だけを元に戻すかを選択できます。作業ディレクトリを、変更をステージングしたときの状態に戻します。

ステージングエリアの有用な概念が見つからない場合は、ステージングエリア全体を実質的にスキップして-agit commitオプションを使用するだけで完全に可能です。多くの人がステージングをスキップし、GUIツールは通常これも可能にします。

2
Old Pro