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


316

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

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



11
Gitには確かに独自の語彙があります。また、すべての指示は特別な語彙で作成されているため、始めるのは困難です。「ステージング」とはgit add file.ext、特定のファイルに対して実行すること、またはgit add .変更されたすべてのファイルと追跡されていないファイルに影響を与えることです。この方法で追加されたファイルは「ステージング済み」と呼ばれ、次の「コミット」に含まれます。コミットは、たとえばで作成した作業のスナップショットですgit commit -m "I wrote something"
ジョナタンオストレム16

11
Gitは理解するのが困難です。これは、概念的なチュートリアルが存在しないためです。すべては不必要な詳細を通過します。
ザクロン

2
この質問から「用語」タグを削除するつもりでしたか?それは私にとって完全に有効なタグのようです。
フィリップケンドール

何らかの理由で、ステージングの重要性を理解できる最善の方法は、Quoraの次の回答からです。qr.ae
ラマー

回答:


310

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


5
良い説明。コミットはローカルにあるため(最初は)、gitは配布されているため、明らかに両方の機能をコミットできます。それでも、機能ごとに1つのコミットに変更を分割することをお勧めします。この場合も、ステージングが便利です。
sleske

77
このためにステージングが必要な理由がわかりません。関連するファイルをコミットするだけで、HGまたはSVNでこれを行うことができます。この機能は主に、コミットするもののチェックボックスをチェックするのが難しいコマンドラインでの作業を主張する人々を支援するために設計されているように感じます。
ジギー

78
@jiggy gitを使用すると、ファイルの一部をステージングできます。ファイルをステージングし、さらに変更を加えてから、ステージングでの状態をコミットすることもできます。Subversionではできません。
イズカタ14

4
@jiggy SVNでは、コミットするファイル/ファイルの部分を選択してからコミットメッセージの書き込みを終了するまでの間に、コミットするファイル/部分を選択して記録するものがあります。明示的に言及されることはなく、リポジトリの実際の部分ではなくSVNクライアントに実装される可能性があり、メモリ内の一部のフラグである可能性がありますが、それはSVNの段階です。私はHGを見ていないが、同じことをしていると思う。gitとの違いは、gitがそれがモノであることを認識し、ディスクに記録し、ユーザーがそれを直接取得できることです。
8bittree 14

7
図の2番目の矢印「ステージファイル」は誤解を招く可能性があります。「ステージハンク」の方が正確ですか?
井田14年

137

これまでに誰もが「正式な」方法で答えているので、メタファーの力で学習を強化するための代替手段でこれをさせてください。

したがって、ステージングエリアは次のようになります。

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

それは魔法です!


類推が大好きです。芽を出す方法^ _ ^
ムーサアルハシー

最後のアナロジーが大好きです。
meTchaikovsky

35

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

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

壊れた比phor時間:

古いアパートから新しいアパートに荷物を運ぶためにムーバーを呼び出すシナリオを考えてみましょう。あなたがそれをする前に、あなたはあなたのものを通り抜けて、あなたがあなたとあなたが持っているものとあなたが捨てるものを決定し、バッグに詰めて、メインの廊下に置きます。引っ越し業者が来て、廊下から(すでに梱包されている)バッグを取り出して輸送します。この例では、ムーバーがあなたのものを手に入れるまでのすべてがステージングです:どこに行くか、それをどのように梱包するかなどを決定しますステージングの)。

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

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


...そしてこれまでのところほとんど投票していません。
ojonugwaのochalifu

26

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

ステージングにより、バージョン管理へのアプローチ方法をより細かく制御できます。


19

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

辞書でステージの意味を確認しましたが、ソース管理の概念に関連する意味はありませんでした。

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

(公開イベント)の開催と参加:UDFサポーターがソフィアでデモンストレーションを開催

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

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



同上。また、「プロセスまたは開発のポイント、期間、またはステップ」。
ダリエン14

また、「ステージングサーバー」は、開発と本番の間にあるサーバーを表すために使用される非常に一般的な用語です。
-Eternal21

4

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

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


1
これは前に6件の回答に比べて大幅何も追加していないようだ
ブヨ

インデックスについて言及しています。非常に徹底的な記事への参照。賛成。ところで、上記のいくつかの答えは単なる冗談です。
ギャングス

1

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

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

たとえば、機能の一部が完成したとします。安定した状態にあり、すべてのテストに合格し、実稼働に入る可能性がありますが、それ以上の作業が必要です。すべての変更をステージングしてから、機能の作業を続行できます。

後で、ステージングしたものをコミットする(およびそのコミットをリモートリポジトリにプッシュする)か、ステージングエリアに新しい変更を追加してから一度にコミットするか、新しい変更だけを元に戻すオプションがあります。作業ディレクトリを、変更をステージングしたときの状態に戻します。

ステージングエリアを実質的に完全にスキップして、ステージングエリアが有用な概念であると思われない場合に-aオプションを使用することは完全に可能git commitです。多くの人がステージングをスキップし、GUIツールも通常これを許可します。


「他のVCSはそうではない」 -何がそう思うと思う?PERFORCEので棚はあなたが、さらにいくつかの追加の添えものと説明何をしているように見える
ブヨ

1
@gnatはい、もちろん他の多くのVCSはステージングのようなものを提供します。「他のVCS」とは、gitのステージのようなものを持たない他のVCSを意味します。OPが参照しているものだからです。
古いプロ14

この答えは上記よりも非常に優れていることがわかりました。なぜなら、ステージングが存在する理由を明確にする唯一のものであるため(技術的に必要である)、その起源の説明(Gitの著者はこのステップを表示して永続化することを選択しました)私が個人的にそれに対して適切な定義であると判断したもの(中間の、名前のない、コメントのないローカルコミット)。しかし、ステージングの起源についての声明の出典を引用することで改善できると思い、なぜ技術的に必要なのかをさらに詳しく説明します。@OldPro
alexlomba87

-1

私の理解では、ログイン機能を開発しており、完了するには5つの連続したステップが必要だと仮定しています。そのため、ここでのステ​​ージングは
、ステップ1で行われたようなステップに取り組むのに役立ちます。
ステップ2で完了しました。現在、ステップ1とステップ2は両方とも正しい段階です。
ステップ3で問題が発生することはあり
ません。5つのステップをすべて完了したら、ステップ2 と同じように、問題のない最新の段階的なステップを実行します。


これは、以前の9つの回答で作成され、説明されたポイントに対して実質的なものを追加するようには見えません
-gnat

はい、あなたは正しいです、私は説明をシンプルで甘いものにしようとしました
-palash140

そして、この概念を実際に使用したいと思うものを説明しようとしています
-palash140

ここでの議論を検討することを検討してください:2番目のTL; DR回答は受け入れられますか?(FWIWは以前の回答と比較して、これは私には単純でも甘くも見えません)
-gnat

ありがとうございます、質問があります。私は多くの答えに出くわし、それらのほとんどは複雑すぎます。はい、それらは正しいのですが、一度に消化するのは難しいです。それを使用します。だから、要約や簡単な答え方をするのは今悪いですか?
palash140
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.