Гіт Шелв проти Шташа


275

Мені дуже незнайомий shelveаспект Git. Якщо stashвикористовується, щоб залишити незакінчену роботу, що shelveтоді? Для чого ти б це використав?

Наприклад, у проекті оновлення (у меню VCS)

введіть тут опис зображення

один отримає (в Idea 2019.2)

введіть тут опис зображення


14
shelveне є командою git. Який контекст цього питання, звідки беруться ці терміни? shelveіснує в деяких інших інструментах, але це не є частиною git.
Йона

2
Git stash схожий на shelvebzr, hg тощо. Ви маєте на увазі якийсь пакет сумісності git?
drRobertz

3
більше обґрунтованих результатів, ніж прийнята відповідь, ймовірно, підтверджує, це питання є дійсним, а термін "" Полка "однаково неправильно розуміється як команда git. Дякую за запитання, це було також моїм сумнівом (також від IDEA).
PravyNandas

Відповіді:


266

git shelve не існує в Git.

Тільки git stash:

  • коли ви хочете записати поточний стан робочого каталогу та індексу, але хочете повернутися до чистого робочого каталогу.
  • який зберігає ваші локальні модифікації і повертає робочий каталог, щоб він відповідав команді HEAD.

У вас був старий полки для проектів 2008 року для ізоляції модифікацій у гілці, але це було б не дуже корисно на сьогодні.

Як задокументовано у діалоговому вікні стелажів Intellij IDEA , функція " стелажі та відхилення " пов'язана не з VCS (інструментом системи управління версіями ), а з самим IDE, щоб тимчасово зберігати очікувані зміни, які ви ще не внесли до списку змін.

Зауважте, що з Git 2.13 (Q2 2017) ви також можете зберігати окремі файли .


73
Виявляється, я неправильно зрозумів цю концепцію. Я подумав, що це команда Git, коли насправді це сторона від IntelliJ IDEA. Я не зміг знайти для цього документи git, тому подумав, що я щось пропускаю. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Едгар Мартінес

2
Ваш посилання на doc вказує, що "полички" - це набір змін (виправлення), якими керується лише IntelliJ IDE, від’єднайте "скрині", які є стандартними речами, якими керує Git. Тому уникайте полиць.
barbara.post

2
Полка для підборіддя @jerry краще, ніж приховування у вашому випадку. Мені б хотілося, щоб на полиці була присутня полка. Webstorm висмоктує оперативну пам’ять. Було б корисно, якби це було у нас, ми могли б запустити його у cmd-рядку
дихандер-махара

2
Існує поширений випадок використання, коли на полиці стоїть таємна скринька - вирішення проблемних колег / компаній. Можливо, щоб повне сміття було додано до вашого сховища, і щоб воно не коштувало, щоб «виправити» це через чиїсь божевілля. Альтернатива - це щось на кшталт, git stash && <your actual command> && git stash popале це смокче. Автополки та нанесення ближче до того, що нам потрібно.
smaudet

1
@VonC схожий не те саме - у мене є випадок використання, коли проекти, які я використовую, мають налаштування, які я вимагаю, щоб їх не можна було робити, оскільки вони "не є стандартними". І півдесятка інших випадків використання я натрапив на такі речі, як потреба змінити файли збірки тощо для локальної розробки проти dev / test / prod.
smaudet

187

Під час використання ID JetBrains IDE з Git "додатки зберігання та відкручування підтримуються на додаток до зберігання та відкочування. Ці функції мають багато спільного; головна відмінність полягає в тому, як генеруються та застосовуються патчі. Shelve може працювати як з окремими файлами, так і з пакетом. файлів, тоді як Stash може працювати одразу лише з цілою низкою змінених файлів. Ось ще кілька деталей щодо відмінностей між ними. "


10
Здається, що полиця гнучкіша, ніж приховування git .
Дмитро Давидов

12
@DmitryDavydov Там git stash -pкотрий і козири . На жаль, лише в командному рядку.
The Vee

1
@TheVee так, це дуже схоже на стелажі за функціональністю, дякую за інформацію.
Дмитро Давидов

10
Власне, з Git 2.13 (Q2 2017) ви можете зберігати окремі файли ... читати далі
kyb

5
Я вважаю, що стелаж дуже корисний, коли у вас є виправлення змін, які ви хочете застосувати кожен раз, коли ви хочете, наприклад, автоматично генерувати документацію. Shelve створить файл у .idea / полиці, і ви можете додати його до VCS та поділитися ним із усією командою, щоб вони могли застосувати ці зміни та виконати ті самі завдання.
ingkevin

63

Окрім попередніх відповідей, є одна важлива для мене примітка:

shelveце JetBrains продукти функція (наприклад WebStorm, PhpStorm, PyCharmі т.д.). Він поміщає збережені файли в .idea/shelfкаталог.

stashє одним із gitваріантів. Він поміщає сховані файли під .gitкаталог.


2
Дякуємо за уточнення цього критичного питання.
AmerllicA

4

Я вважаю за краще відкладати зміни, а не приховувати їх, якщо я не поділюсь своїми змінами в іншому місці.

Зашивання - це функція git і не дає вам можливості вибирати конкретні файли або зміни всередині файлу. Стелажі можуть зробити це, але це особливість IDE, а не функція git:

введіть тут опис зображення

Як ви бачите, я маю змогу вказати, які файли / рядки потрібно включити на мою полицю. Зауважте, що я не можу цього зробити з приховуванням.

Остерігайтеся використання полиць у IDE може обмежити переносимість ваших патчів, оскільки ці зміни не зберігаються у папці .git.

Кілька корисних посилань:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.