web-dev-qa-db-ja.com

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

IntelliJはgit stashと、組み込みのshelveコマンドをサポートしています。これらは、目的と実用性がほぼ同じであると思われます。それらの違いは何ですか?

83
Daniel Compton

IntelliJから ドキュメント

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

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

以下を除いて、これらはかなり似ています。

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

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

詳細については、 documentation をご覧ください。

30
id.bobr

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

13
riyasvaliya

ドキュメント の内容

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

0
Sagar