Git Shelve vs Stash


276

Non ho molta familiarità con l' shelveaspetto di Git. Se stashviene utilizzato per mettere da parte il lavoro incompiuto, che cos'è shelveallora? Per cosa lo useresti?

Ad esempio su Aggiorna progetto (dal menu VCS)

inserisci qui la descrizione dell'immagine

uno otterrà (in Idea 2019.2)

inserisci qui la descrizione dell'immagine


14
shelvenon è un comando git. Qual è il contesto di questa domanda, da dove vengono questi termini? shelveesiste in alcuni altri strumenti ma non fa parte di git.
Giona

2
Git stash è simile a shelvein bzr, hg, ecc. Ti riferisci ad un pacchetto di interoperabilità git?
drRobertz,

3
più voti di quanto probabilmente confermi la risposta accettata, questa domanda è valida e il termine "Shelve" è equamente frainteso come comando git. Grazie per
averlo

Risposte:


267

git shelve non esiste in Git.

Solo git stash:

  • quando si desidera registrare lo stato corrente della directory di lavoro e l'indice, ma si desidera tornare a una directory di lavoro pulita.
  • che salva le modifiche locali e ripristina la directory di lavoro in modo che corrisponda al commit HEAD.

Avevi un vecchio progetto git shelve del 2008 per isolare le modifiche in un ramo, ma al giorno d'oggi non sarebbe molto utile.

Come documentato nella finestra di dialogo degli scaffali IDEA di Intellij , la funzione " scaffalature e non scaffalature " non è collegata a un VCS (strumento del sistema di controllo della versione) ma all'IDE stesso, alla memorizzazione temporanea delle modifiche in sospeso che non sono state ancora commesse nella lista dei cambiamenti.

Nota che a partire da Git 2.13 (2 ° trimestre 2017) ora puoi riporre anche i singoli file .


74
Risulta che ho capito male il concetto. Ho pensato che fosse un comando Git quando in realtà è una cosa di terze parti da IntelliJ IDEA. Non sono riuscito a trovare i documenti git per questo, quindi ho pensato che mi mancasse qualcosa. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez,

2
Il tuo collegamento doc indica che gli "scaffali" sono un insieme di modifiche (patch) gestite solo da IntelliJ IDE, disinnescando "stash" che sono cose standard gestite da Git. Quindi evita gli scaffali.
barbara.post,

2
@jerry chin shelve è meglio della scorta nel tuo caso. Vorrei che shelve fosse presente in git. Webstorm succhia la RAM. Sarebbe utile se
Git ce l'

2
Esiste un caso d'uso comune che accantona che la scorta non affronta - affrontando pratiche problematiche di collaboratori / società. È possibile che la spazzatura completa venga aggiunta al tuo repository e che non sia kosher a "ripararlo" a causa della follia di qualcuno. L'alternativa è qualcosa di simile git stash && <your actual command> && git stash popma che fa schifo. Auto-accantonamento e applicazione è più vicino a ciò di cui abbiamo bisogno.
smaudet,

1
@VonC simile non è lo stesso - ho un caso d'uso in cui i progetti che sto usando hanno impostazioni che richiedo che non possono essere impegnate perché 'non sono standard'. E mezza dozzina di altri casi d'uso che ho riscontrato riguardano cose come la necessità di modificare i file di build, ecc. Per lo sviluppo locale vs dev / test / prod.
smaudet,

187

Quando si utilizzano IDE JetBrains con Git, "sono supportate azioni di stashing e stashing oltre a shelving e unshelving. Queste funzionalità hanno molto in comune; la principale differenza sta nel modo in cui le patch vengono generate e applicate. Shelve può operare con singoli file o mazzo di file, mentre Stash può funzionare solo con un sacco di file modificati contemporaneamente. Ecco alcuni dettagli in più sulle differenze tra loro. "


10
Sembra che shelve sia più flessibile di git stash .
Dmitry Davydov,

12
@DmitryDavydov C'è il briscola di git stash -pentrambi. Purtroppo solo nella riga di comando.
The Vee,

1
@ TheVee sì, è molto simile a shelve in termini di funzionalità, grazie per le informazioni.
Dmitry Davydov il

10
In realtà, da Git 2.13 (2 ° trimestre 2017) puoi nascondere singoli file ... leggi di più
kyb

5
Ho trovato shelve molto utile quando hai una patch di modifiche che vuoi applicare ogni volta che vuoi generare automaticamente la documentazione, ad esempio. Shelve creerà un file all'interno di .idea / shelve e potrai aggiungerlo a te VCS e condividerlo con tutto il tuo team in modo che possano applicare tali modifiche ed eseguire le stesse attività.
Ingkevin,

64

Oltre alle risposte precedenti c'è una nota importante per me:

shelveè JetBrains prodotti caratteristica (ad esempio WebStorm, PhpStorm, PyCharm, ecc). Mette in file archiviati.idea/shelf directory.

stashè una delle gitopzioni. Mette i file nascosti nella .gitdirectory.


3
Grazie per chiarire questa domanda critica.
Amerllic,

6

Preferirei archiviare i cambiamenti invece di metterli da parte se non condivido i miei cambiamenti altrove.

Lo stashing è una funzione git e non ti dà la possibilità di selezionare file specifici o modifiche all'interno di un file. La scaffalatura può farlo, ma questa è una funzione specifica IDE, non una funzione git:

inserisci qui la descrizione dell'immagine

Come puoi vedere, posso scegliere di specificare quali file / linee includere nel mio scaffale. Nota che non posso farlo con lo stash.

Fare attenzione a utilizzare gli scaffali nell'IDE può limitare la portabilità delle patch poiché tali modifiche non sono archiviate in una cartella .git.

Alcuni link utili:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.