IntelliJのShelveとGit stashの違いは何ですか?


99

IntelliJはgit stashをサポートしているだけでなく、独自の組み込みシェルフコマンドもサポートしています。これらは目的と実用性がほぼ同じであるようです。それらの違いは何ですか?


回答:


66

IntelliJ ドキュメントから:

Git統合では、シェルビングとシェルビング解除に加えて、「スタッシング」と「アンスタッシング」がそれぞれサポートされています。これらの機能には多くの共通点があり、唯一の違いは、パッチの生成方法と適用方法です。

  • 変更が隠されたパッチは、Git自体によって生成されます。後で適用するために、IntelliJ IDEAは必要ありません。
  • 変更が保留されたパッチは、IntelliJ IDEAによって生成されます。通常、これらはIDEからも適用されます。IntelliJ IDEAの外部で保留中の変更を適用することも可能ですが、追加の手順が必要です。

21
さて、プレーンgitとの "互換性が低い"ため、シェルビングの利点は何ですか?
MaxiWheat 2016

17
ネイティブのスタッシュスタイル機能を持​​たないVCSを使用した場合、棚付けが役立つようです。gitを使用している場合、実際の利点はわかりません。
Daniel Compton

4
「真のメリット」はid.bobrによる回答に記載されています。私にとって主なことは、コミットするときのように、隠しておくファイル/チャンクを選択できることです。
Martin Melka

Git 2.13以降、で個々のファイルを隠しておくことが可能ですgit stash push
Deric Lima

45

それらは以下を除いてかなり似ています:

  • Intellijの機能であるため、シェルフをIDEの外部で使用することはできません。
  • Git stashは、作業ディレクトリ全体とインデックスでのみ機能します。IntelliJのシェルフは、個々のファイルとチェンジリストを操作できます(別のIntelliJの機能)。ご覧のとおり、たとえば、ここでは、必要になる場合があります。
  • アイデアには、シェルフのサポートが組み込まれています。git stashの操作はより簡単です。特に、変更を保留/保留解除したり、バージョン管理ツールウィンドウから保留ファイルを確認したりできます。

また、私見、shelveは、特に大きなプロジェクトで、多くのファイルが変更されたときに少し速く動作します。

詳細については、ドキュメントを参照してください。


変化のない場所で右クリックすると、すぐに棚上げされて非常に便利です。ほのめかしたように、私はそれが少し速いと思います。
vikingsteve 2017年

3
「Git stashは作業ディレクトリとインデックス全体でのみ機能します」-これは誤りです。Git stashは、個々のファイルやフォルダーも隠しておくことができます-例:git stash -- foo/bar.txt
Chaoz

20

IntellijのShelveが単純なGitの隠し場所よりも優れている1つの明確な利点は、Shelveを使用すると、1つのチェンジリストで複数のリポジトリに属する​​変更を保存できることです。stashを使用すると、各リポジトリで個別にstash / unstashする必要があります。これは、特定の機能作業が複数のモジュール(したがって複数のリポジトリ)を横断する可能性がある複数のモジュール(それぞれに独自のリポジトリがある)を持つ大規模なプロジェクトで非常に役立ちます。


0

ドキュメントが言うことはここにあります

収納の変更は棚付けと非常によく似ています。唯一の違いは、パッチの生成方法と適用方法です。シュタッシュはGitによって生成され、IntelliJ IDEA内またはその外部から適用できます。変更が保留されたパッチは、IntelliJ IDEAによって生成され、IDEを通じて適用されます。また、スタッシュにはコミットされていないすべての変更が含まれますが、変更をシェルフに配置するときは、すべての変更を保留するのではなく、ローカルの変更の一部を選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.