Git に適用されるステージングの概念に頭を悩ませるのにまだ苦労しています。
SVN と類似点はありますか? Git でステージ レベルを持つ主な目的は何ですか?
ステージング領域の主な利点は、特定のファイルの変更の一部のみを簡単にコミットできることです。(たとえば、使用git add -p
します。)私の知る限り、SVNで「部分的な」コミットを行う唯一の方法は、ファイルごとのレベルで行うか、ファイルを手動でバックアップしてから、不要な変更を一時的に元に戻すことですコミットする。
これは、(私のように) 高度に組織化された開発者ではなく、事後に変更を「きちんとした」コミットに整理できるようにしたい場合に最適です。これは、厳格さを強制するよりも柔軟性を提供することを好むという Git の一般的な態度に従います。必要ない場合は、いつでも使用せずに使用できますgit commit -a ...
。
SVN は Git ではなく、そのような概念がないため、SVN との類推はありません。
類似点:
追跡するためには、リポジトリの一部にする必要があるファイルを追加する必要があります。どちらのツールも、add
コマンドを使用してこれを実現します。ファイルを追加するということは、コミットを準備することを意味します。
違い:
Git では、ファイルを追加するときに、さらに詳細な情報を指定できます。ファイル全体を追加するか、個別のコード行を追加するかを決定できます。インデックスまたはステージにファイルを追加すると、柔軟性が向上します。SVN は、リポジトリに既に追加されているファイルのすべての変更を自動的にコミットします。Git は、各コミット操作に関連付ける変更の決定をユーザーに任せます。つまり、Git での次のコミットには、ファイルの追跡ステータスに関係なく、ステージングされた変更 (行またはファイル) のみが含まれます。SVN は、追跡されたファイルのすべての変更を自動的に含めます。
追加情報:
Oliver Steeleの投稿など、Git ワークフローについて説明している投稿を読んでみてください。ただし、Git の使用方法は 1 つではなく、さまざまな方法があることに注意してください。必要に応じて、SVN を操作しているかのように Git を使用できます。
短期間で Git の哲学を理解できると期待しないでください。慣れるまでに1年かかりましたが、今でも新しい使い方を学んでいます。SVN の考え方で育った場合はさらに難しいと思います。記事、ビデオなど、たくさんの資料があります。時間をかけて、いくつか試してみてください。私が集めたリストからの選択です。
ステージングの有用性を示すいくつかのシナリオを次に示します。
あなたは特定の作品に取り組み、プロジェクト全体にかなりの数の変更を加えました。完全なものをテストする前に、まだそれらをコミットしたくありません。しかし、これらの変更は多くの場合、単一の大きなコミットよりも複数の論理的なコミットを行うのに十分独立している場合があります。これは、選択した部分をステージングして複数のコミットを行う場合です。
ステージングは、デバッグ中に特に役立ちました。バグの原因を追跡するために、ログ ステートメントを散りばめることもできます。次に、修正を行い、それらのログ ステートメントを使用して再度テストします。ただし、コードに変更を加えてそれらのログ ステートメントを削除する前に、修正をコミットする必要があります。
これが役立つことが証明されているもう 1 つのシナリオは、何かをしている最中に、タイプミスなどの無関係なものを見つけて修正し、すぐに片付けたい場合です。
このようなシナリオは他にもいくつかありますが、一度コツをつかめば、おそらくこの概念が欠けているものを扱うことはできないでしょう :)。
PS: 私は SVN をまったく使用したことがないので、両者を比較することはできません。