Qual é a diferença entre o Shelve do IntelliJ e o Git stash?

99

IntelliJ suporta git stashes, bem como seu próprio comando shelve integrado. Estes parecem ser quase idênticos em propósito e utilidade. Qual a diferença entre eles?

Daniel Compton
fonte
2
Possível duplicata de Git Shelve vs Stash
Vadzim

Respostas:

66

Da documentação do IntelliJ :

Na integração do Git, além de shelving e unshelving, "stashing" e "unstashing" são suportados respectivamente. Esses recursos têm muito em comum, a única diferença está na maneira como os patches são gerados e aplicados.

  • Patches com mudanças escondidas são gerados pelo próprio Git. Para aplicá-los posteriormente, você não precisa do IntelliJ IDEA.
  • Patches com alterações arquivadas são gerados pelo IntelliJ IDEA. Normalmente, eles também são aplicados por meio do IDE. Aplicar alterações arquivadas fora do IntelliJ IDEA também é possível, mas requer etapas adicionais.
Daniel Compton
fonte
21
Bem, então quais são as vantagens de estantes, já que é apenas "menos compatível" com o git simples?
MaxiWheat
17
Parece que as prateleiras seriam úteis se você usasse um VCS que não tivesse um recurso de estilo de armazenamento nativo. Se você usa git, não consigo ver nenhum benefício real.
Daniel Compton
4
Os 'benefícios reais' estão listados na resposta de id.bobr. O principal para mim é ser capaz de escolher quais arquivos / partes armazenar, da mesma forma que ao fazer um commit.
Martin Melka,
Desde o Git 2.13, é possível armazenar arquivos individuais com git stash push.
Deric Lima
45

Eles são muito semelhantes, exceto:

  • Você não pode usar arquivar fora do IDE, porque é um recurso do Intellij.
  • Git stash funciona apenas com diretório de trabalho e índice inteiro. A prateleira do IntelliJ pode trabalhar com arquivos e listas de mudanças individuais (outro recurso do IntelliJ). Como você pode ver, por exemplo, aqui , às vezes é necessário.
  • O Idea tem um suporte integrado melhor para arquivar. Trabalhar com git stash é mais direto. Em particular, você pode arquivar / cancelar suas alterações ou revisar arquivos arquivados na janela da ferramenta de controle de versão.

Além disso, IMHO, shelve funciona um pouco mais rápido, especialmente em um grande projeto, quando muitos arquivos foram alterados.

Veja a documentação para mais informações.

id.bobr
fonte
Acho que clicar com o botão direito em um imutável para arquivá-lo rapidamente é muito útil. Como você alude, acho um pouco mais rápido.
vikingsteve
3
"Git stash funciona apenas com diretório e índice de trabalho inteiros" - isso está errado. O Git stash também pode armazenar arquivos e pastas individuais - por exemplo:git stash -- foo/bar.txt
Chaoz
20

Uma vantagem distinta que o Shelve do Intellij tem sobre o stash do Git simples é que usando o Shelve, você pode salvar alterações pertencentes a vários repositórios em uma lista de mudanças. Usando o stash, você precisaria fazer o stash / unstash em cada repo individualmente. Isso é muito útil em um grande projeto com vários módulos (cada um com seu próprio repo), onde um determinado trabalho de recurso pode cortar vários módulos (e, portanto, vários repos)

riyasvaliya
fonte
0

Aqui está o que a documentação diz

Armazenar alterações é muito semelhante a estantes. A única diferença está na forma como os patches são gerados e aplicados. Stashes são gerados pelo Git e podem ser aplicados de dentro do IntelliJ IDEA ou de fora dele. Patches com alterações arquivadas são gerados pelo IntelliJ IDEA e também são aplicados por meio do IDE. Além disso, o armazenamento envolve todas as alterações não confirmadas, enquanto quando você coloca alterações em uma prateleira, você pode selecionar algumas das mudanças locais em vez de arquivá-las todas.

Sagar
fonte