Сколько / как долго сохраняются тайники с помощью git?
Я очень новичок в Git и у меня есть вопрос о сборе. Если я работал над веткой, но не смог попасть в положение, в котором я могу зафиксировать ветку, то рекомендуется использовать тайнинг. Мои вопросы относительно кражи:
- Сколько тайников сохранено?
- Как долго хранятся эти тайники?
- Они просто временно сохраняют работу так, что изменения теряются при перезагрузке компьютера?
Если кто-то может быстро помочь прояснить это, будет очень признателен.
2 ответа
1 - Сколько тайников сохранено?
Тайники не появляются из воздуха; только если вы создаете их, используя
git stash
или, что эквивалентно,
git stash save
Так сколько же сохранено? Столько, сколько вы создаете.
2 - Как долго хранятся эти тайники?
Этот вопрос выглядит невинным, но ответ на самом деле довольно тонкий. Здесь необходимо рассмотреть два аспекта: 1) тайник журнала и 2) объектную базу данных хранилища.
Когда вы создаете тайник, Git
- добавляет запись в тайник reflog,
- создает два (три, если вы используете
--include-untracked
flag) фиксировать объекты в базе данных репозитория: один соответствует WIP (работа в процессе) в вашем рабочем дереве, а другой соответствует состоянию вашей промежуточной области (он же индекс).
Изменить: эти объекты коммитов являются добросовестными коммитами, что можно проверить, выполнив git cat-file -t
на них. Просто так получилось, что они недоступны из любой ветки; см . комментарий Торека.
По умолчанию сборка мусора в Git автоматически удаляет записи reflog старше 90 дней; Вы можете указать другое "время жизни" для записей stash reflog, запустив
git config gc.refs/stash.reflogexpire <lifetime>
За исключением механизма сбора мусора, описанного выше, Git не будет самостоятельно удалять тайники; тайник останется в вашем локальном хранилище (не менее 90 дней), если вы не сделаете это добровольно
брось, используя
git drop <stash-reference>
который удаляет указанную запись тайника из журнала ссылок;
поп это, используя
git pop <stash-reference>
который применяет указанный тайник, а затем удаляет соответствующую запись из журнала тайлов; или же
бежать
git stash clear
который удаляет все записи из stash reflog (будьте осторожны с этим).
Однако следует помнить, что эти три действия влияют только на тайник журнала. В частности, они не вызывают немедленного удаления связанных объектов "WIP" и "index" из базы данных вашего репозитория; они просто делают эти объекты недоступными. Последние будут оставаться в "хранилище неопределенности" некоторое время, пока в конце концов не соберут мусор и не умрут "настоящей смертью".
Это полезно знать: если вы случайно уроните тайник, вы все равно сможете извлечь его из недр репо, если сможете вспомнить или идентифицировать SHA двух его объектов (WIP и индекс).
3 - Они просто временно сохраняют работу так, что изменения теряются при перезагрузке компьютера?
Нет. Тайники ничем не отличаются от любых других объектов коммитов; перезагрузка не влияет на них.
Git-тайники сохраняются до тех пор, пока ваш жесткий диск не умрет (в отличие от коммитов, которые обычно передаются на другой компьютер через git push
так переживет сбой жесткого диска).
Вы можете иметь столько тайников, сколько захотите. Избавьтесь от старых, когда захотите, запустив git stash drop
или же git stash clear
(читать документы для тех).