Git Shelve vs Stash


276

Je ne connais pas très bien l' shelveaspect de Git. Si stashest utilisé pour mettre de côté les travaux inachevés, quel est-il shelvealors? Pour quoi l'utiliseriez-vous?

Par exemple sur Update Project (depuis le menu VCS)

entrez la description de l'image ici

on obtiendra (dans Idea 2019.2)

entrez la description de l'image ici


14
shelven'est pas une commande git. Quel est le contexte de cette question, d'où viennent ces termes? shelveexiste dans d'autres outils mais ne fait pas partie de git.
Jonah

2
Git stash est similaire à shelvebzr, hg, etc. Faites-vous référence à un paquet d'interopérabilité git?
drRobertz

3
plus upvotes que la réponse acceptée probablement confirme, cette question est valide et le terme « » INITIAL » est également interprétée à tort comme une commande git Merci de demander, ce fut mon doute aussi (IDEA aussi)..
PravyNandas

Réponses:


268

git shelve n'existe pas dans Git.

Seulement git stash:

  • lorsque vous souhaitez enregistrer l'état actuel du répertoire de travail et de l'index, mais que vous souhaitez revenir à un répertoire de travail propre.
  • qui enregistre vos modifications locales et rétablit le répertoire de travail pour qu'il corresponde au commit HEAD.

Vous aviez un ancien projet git shelve de 2008 pour isoler les modifications dans une branche, mais cela ne serait pas très utile de nos jours.

Comme documenté dans la boîte de dialogue de mise en rayon d'Intellij IDEA , la fonction "mise en rayon et démêlage " n'est pas liée à un VCS (outil de contrôle de version) mais à l'IDE lui-même, pour stocker temporairement les modifications en attente que vous n'avez pas encore validées dans la liste des modifications.

Notez que depuis Git 2.13 (Q2 2017), vous pouvez désormais également stocker des fichiers individuels .


74
Il s'avère que j'ai mal compris le concept. Je pensais que c'était une commande Git alors qu'en fait c'est une chose tierce d'IntelliJ IDEA. Je ne pouvais pas trouver les documents git pour cela, alors j'ai pensé qu'il me manquait quelque chose. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez

2
Votre lien doc indique que les "étagères" sont un ensemble de modifications (correctifs) géré par IntelliJ IDE uniquement, dissocient les "stashes" qui sont des choses standard gérées par Git. Évitez donc les étagères.
barbara.post

2
@jerry chin shelve est mieux que stash dans votre cas. Je souhaite que l'étagère soit présente dans git. Webstorm aspire la RAM. Ce serait utile si git l'avait, nous pourrions l'exécuter en ligne cmd
digender mahara

2
Il y a un cas d'utilisation courant que le rayonnage a que la cachette ne résout pas - traitant des collègues / pratiques d'entreprise problématiques. Il est possible que des ordures complètes soient ajoutées à votre référentiel et ne soient pas casher pour le `` réparer '' à cause de la folie de quelqu'un. L'alternative est quelque chose comme git stash && <your actual command> && git stash popmais ça craint. La mise en rayon automatique et l'application sont plus proches de ce dont nous avons besoin.
smaudet

1
@VonC similaire n'est pas le même - j'ai un cas d'utilisation où les projets que j'utilise ont des paramètres dont j'ai besoin qui ne peuvent pas être validés car ils ne sont pas standard. Et une demi-douzaine d'autres cas d'utilisation que j'ai rencontrés impliquant des choses comme la nécessité de modifier les fichiers de construction, etc. pour le développement local vs dev / test / prod.
smaudet

187

Lorsque vous utilisez les IDE JetBrains avec Git, "les actions de stashing et unstashing sont prises en charge en plus du stockage et de la décomposition. Ces fonctionnalités ont beaucoup en commun; la principale différence réside dans la façon dont les correctifs sont générés et appliqués. Shelve peut fonctionner avec des fichiers individuels ou des groupes. de fichiers, tandis que Stash ne peut fonctionner qu'avec un tas de fichiers modifiés à la fois. Voici quelques détails supplémentaires sur les différences entre eux. "


10
Il semble que le rayonnage soit plus flexible que le git stash .
Dmitry Davydov

12
@DmitryDavydov Il y a git stash -pce qui l' emporte sur les deux. Malheureusement uniquement dans la ligne de commande.
The Vee

1
@TheVee oui c'est très similaire au rayonnage en termes de fonctionnalité, merci pour l'info.
Dmitry Davydov

10
En fait, depuis Git 2.13 (Q2 2017), vous pouvez cacher des fichiers individuels ... lire la suite
kyb

5
J'ai trouvé le rayonnage très utile lorsque vous avez un patch de changements que vous souhaitez appliquer chaque fois que vous souhaitez générer automatiquement de la documentation par exemple. Shelve créera un fichier dans .idea / shelve et vous pourrez l'ajouter à votre VCS et le partager avec toute votre équipe afin qu'elle puisse appliquer ces modifications et exécuter les mêmes tâches.
ingkevin

64

En plus des réponses précédentes, il y a une note importante pour moi:

shelveest des produits de JetBrains fonction ( par exemple WebStorm, PhpStorm, PyCharm, etc.). Il place les fichiers en attente dans le .idea/shelfrépertoire.

stashest l'une des gitoptions. Il place les fichiers cachés dans le .gitrépertoire.


3
Merci d'avoir clarifié cette question critique.
AmerllicA

6

Je préférerais suspendre les modifications au lieu de les cacher si je ne partage pas mes modifications ailleurs.

Le stashing est une fonctionnalité git et ne vous donne pas la possibilité de sélectionner des fichiers spécifiques ou des modifications à l'intérieur d'un fichier. Le rayonnage peut le faire, mais c'est une fonctionnalité spécifique à l'EDI, pas une fonctionnalité git:

entrez la description de l'image ici

Comme vous pouvez le voir, je peux choisir de spécifier les fichiers / lignes à inclure dans ma bibliothèque. Notez que je ne peux pas faire ça avec du stashing.

Attention, l'utilisation d'étagères dans l'EDI peut limiter la portabilité de vos correctifs car ces modifications ne sont pas stockées dans un dossier .git.

Quelques liens utiles:

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.