Stash vs Git Shelve

275

Não estou familiarizado com o shelveaspecto do Git. Se stashé usado para deixar de lado o trabalho inacabado, o que é shelveentão? Para que você usaria isto?

Por exemplo, em Atualizar Projeto (no menu VCS)

insira a descrição da imagem aqui

obteremos (no Idea 2019.2)

insira a descrição da imagem aqui

Edgar Martinez
fonte
14
shelvenão é um comando git. Qual é o contexto desta pergunta, de onde vêm esses termos? shelveexiste em algumas outras ferramentas, mas não faz parte do git.
Jonah
2
O git stash é semelhante ao shelvebzr, hg, etc. Você está se referindo a algum pacote de interoperabilidade do git?
drRobertz
3
mais upvotes do que a resposta aceita provavelmente confirma, esta questão é válido e o termo '' Shelve" é igualmente mal interpretado como um comando git Obrigado por perguntar, esta foi a minha dúvida também (a partir IDEA também)..
PravyNandas

Respostas:

266

git shelve não existe no Git.

Apenas git stash:

  • quando você deseja registrar o estado atual do diretório de trabalho e do índice, mas deseja voltar para um diretório de trabalho limpo.
  • que salva as modificações locais e reverte o diretório de trabalho para corresponder ao commit HEAD.

Você tinha um projeto antigo de 2008 com git shelve para isolar modificações em uma ramificação, mas isso não seria muito útil atualmente.

Conforme documentado na caixa de diálogo Arquivar Intellij IDEA , o recurso " arquivamento e remoção " não está vinculado a um VCS (ferramenta Sistema de Controle de Versão), mas ao próprio IDE, para armazenar temporariamente alterações pendentes que você ainda não confirmou na lista de alterações.

Observe que, desde o Git 2.13 (Q2 2017), agora você também pode ocultar arquivos individuais .

VonC
fonte
73
Acontece que eu não entendi o conceito. Eu pensei que era um comando Git quando, na verdade, é uma coisa de terceiros do IntelliJ IDEA. Eu não consegui encontrar os documentos do git para isso, então pensei que estava faltando alguma coisa.
Edgar Martinez -
2
O link do seu documento indica que "prateleiras" são um conjunto de alterações (patches) gerenciadas apenas pelo IntelliJ IDE, "stashes" não vinculados que são itens padrão gerenciados pelo Git. Portanto, evite prateleiras.
Barbara.post
2
@ Jerry Shelf Shelve é melhor do que esconderijo no seu caso. Eu gostaria que shelve estivesse presente no git. O Webstorm suga a RAM. Seria útil se git teve que poderíamos executá-lo na linha cmd
Mahara digender
2
Há um caso de uso comum que a prateleira tem que o estoque não resolve - lidando com práticas problemáticas de colegas de trabalho / empresa. É possível que o lixo completo seja adicionado ao seu repositório e não seja "kosher" corrigi-lo por causa da insanidade de alguém. A alternativa é algo parecido, git stash && <your actual command> && git stash popmas isso é péssimo. Arquivar automaticamente e aplicar está mais próximo do que precisamos.
precisa saber é
1
@VonC similar não é o mesmo - eu tenho um caso de uso em que os projetos que estou usando possuem configurações que exigem que não possam ser confirmadas porque 'não são padrão'. E meia dúzia de outros casos de uso que já deparei com coisas como a necessidade de modificar arquivos de construção etc. para desenvolvimento local vs dev / test / prod.
precisa saber é
187

Ao usar os IDE do JetBrains com o Git, "as ações de esconderijo e descolagem são suportadas, além de prateleiras e descolagens. Esses recursos têm muito em comum; a principal diferença está na maneira como os patches são gerados e aplicados. O Shelve pode operar com arquivos ou agrupamentos individuais de arquivos, enquanto o Stash pode operar com um monte de arquivos alterados de uma só vez. Aqui estão mais alguns detalhes sobre as diferenças entre eles ".

Yekver
fonte
10
Parece que o shelve é mais flexível que o git stash .
Dmitry Davydov 28/09
12
@DmitryDavydov Há git stash -pquem supera os dois. Infelizmente apenas na linha de comando.
The Vee
1
@ TheVee sim, é muito semelhante a arquivar em termos de funcionalidade, obrigado pela informação.
Dmitry Davydov
10
Na verdade, uma vez que Git 2,13 (Q2 2017) você pode esconder arquivos individuais ... leia mais
KYB
5
Eu achei o shelve muito útil quando você tem um patch de alterações que deseja aplicar toda vez que deseja gerar automaticamente documentação, por exemplo. O Shelve criará um arquivo em .idea / shelve e você poderá adicioná-lo ao VCS e compartilhá-lo com toda a sua equipe para que eles possam aplicar essas alterações e executar as mesmas tarefas.
58518 Ingkevin
63

Além das respostas anteriores, há uma importante para mim, observe:

shelveé característica produtos JetBrains (tais como WebStorm, PhpStorm, PyCharm, etc.). Coloca arquivos arquivados no .idea/shelfdiretório.

stashé uma das gitopções. Ele coloca os arquivos ocultos no .gitdiretório.

valex
fonte
2
Obrigado por esclarecer esta questão crítica.
AmerllicA
4

Eu preferiria arquivar as alterações em vez de escondê-las se não estiver compartilhando minhas alterações em outro lugar.

O armazenamento em cache é um recurso do git e não oferece a opção de selecionar arquivos ou alterações específicas dentro de um arquivo. As prateleiras podem fazer isso, mas esse é um recurso específico do IDE, não um recurso git:

insira a descrição da imagem aqui

Como você pode ver, eu posso escolher quais arquivos / linhas incluir na minha prateleira. Note que eu não posso fazer isso com esconderijo.

Cuidado ao usar prateleiras no IDE pode limitar a portabilidade de seus patches porque essas alterações não são armazenadas em uma pasta .git.

Alguns links úteis:

Hamza Belmellouki
fonte