В чем разница между IntelliJ Shelve и Git stash?

104

IntelliJ поддерживает git stash, а также собственную встроенную команду shelve. Они кажутся почти идентичными по назначению и полезности. В чем разница между ними?

Дэниел Комптон
источник
2
Возможный дубликат Git Shelve vs Stash
Вадим

Ответы:

69

Из документации IntelliJ :

В интеграции с Git, помимо складирования и снятия с полок, поддерживаются «спрятать» и «откладывать» соответственно. У этих функций много общего, разница только в способе создания и применения исправлений.

  • Патчи с сохраненными изменениями генерируются самим Git. Чтобы применить их позже, вам не нужна IntelliJ IDEA.
  • Патчи с отложенными изменениями генерируются IntelliJ IDEA. Обычно они также применяются через IDE. Применение отложенных изменений вне IntelliJ IDEA также возможно, но требует дополнительных действий.
Дэниел Комптон
источник
23
Итак, каковы преимущества стеллажей, поскольку они просто «менее совместимы» с простым git?
MaxiWheat
17
Похоже, что стеллажи были бы полезны, если бы вы использовали VCS, в котором не было встроенной функции стиля тайника. Если вы используете git, я не вижу реальных преимуществ.
Дэниел Комптон,
5
«Реальные преимущества» перечислены в ответе id.bobr. Главное для меня - это возможность выбирать, какие файлы / фрагменты хранить, как при фиксации.
Мартин Мелка
1
Начиная с Git 2.13, можно хранить отдельные файлы с расширениями git stash push.
Deric Lima
Shelve дает вам гораздо лучший обзор того, что внутри, а что отличает. Проще применить только некоторые части измененных файлов. Сначала меня не убедила эта функция, но теперь я использую ее чаще, чем тайник.
Итачи
47

Они очень похожи, за исключением:

  • Вы не можете использовать полку вне IDE, потому что это функция Intellij.
  • Git stash работает только со всем рабочим каталогом и индексом. Полка IntelliJ может работать с отдельными файлами и списками изменений (еще одна функция IntelliJ). Как видите, например, здесь , иногда это необходимо.
  • Идея имеет лучшую встроенную подставку для полки. Работать с git stash проще. В частности, вы можете отложить \ убрать свои изменения или просмотреть файлы, хранящиеся на полке, из окна инструмента контроля версий.

К тому же, IMHO, полка работает немного быстрее, особенно в большом проекте, когда было изменено много файлов.

См. Документацию для получения дополнительной информации.

id.bobr
источник
Я считаю, что щелчок правой кнопкой мыши по неизменяемому, чтобы быстро убрать его с полки, был очень полезным. Как вы упомянули, я считаю, что это немного быстрее.
vikingsteve
4
«Git stash работает только со всем рабочим каталогом и индексом» - это неправильно. Git stash также может хранить отдельные файлы и папки - например:git stash -- foo/bar.txt
Chaoz
21

Одно явное преимущество, которое имеет Intellij Shelve по сравнению с обычным хранилищем Git, заключается в том, что с помощью Shelve вы можете сохранять изменения, принадлежащие нескольким репозиториям, в одном списке изменений. Используя stash, вам нужно будет спрятать / распаковать в каждом репо отдельно. Это очень полезно в большом проекте с несколькими модулями (каждый из которых имеет собственное репо), где работа конкретной функции может затрагивать несколько модулей (и, следовательно, несколько репозиториев).

риясвалия
источник
0

Вот что говорится в документации

Хранение изменений очень похоже на стеллажи. Единственная разница заключается в способе создания и применения исправлений. Тайники создаются Git и могут применяться как в IntelliJ IDEA, так и за ее пределами. Патчи с отложенными изменениями генерируются IntelliJ IDEA, а также применяются через IDE. Кроме того, хранение включает в себя все незафиксированные изменения, а когда вы помещаете изменения на полку, вы можете выбрать некоторые из локальных изменений вместо того, чтобы откладывать их все.

Сагар
источник