Схована скринька - це спеціальне об'єднання об'єднання робочого дерева між базовою коміткою та індексом. Одним із способів може бути збереження кожного окремого виправлення, перевірка першої батьківської скриньки, відновлення індексу та робочого дерева з двох патчів і, нарешті, відновлення сховища (здається, одна відповідь іде саме таким чином).
Це потрібно для повного відтворення всієї інформації з сховища, і якщо вам це не важливо, вам слід принаймні перевірити перший батьківський приклад, перш ніж відновити його, щоб уникнути конфліктів і відслідковувати, де створено сховище.
Це я зробив, щоб повністю відновити всі сховища від одного репо до іншого. Якщо ви не можете мати їх на одному комп’ютері, ви можете зберегти сховані теги в пакеті після їх створення та скопіювати список посилань та пакет на цільовий комп'ютер.
Від кореня вихідного репо:
- Отримайте список прихованих посилань
- Позначте свої скриньки, щоб ви могли їх отримати за допомогою git fetch (імена тегів не означають, змінити його, якщо є конфлікт. Я використав
stash_
+ число (-и) у логічній скриньці)
- Перетворіть логічні рефлекси в хеші sha1 у зворотному порядку - ми використаємо їх пізніше
- Збережіть цей шлях репо - також на потім
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
NB: Для цього потрібна bash або сумісна оболонка (ksh, zsh should do ...) Ви також можете збільшити змінну, наприклад, stash_$((i++))
якщо ваша оболонка не підтримує${param//pattern}
Тепер у новому репо, для кожного запиту:
- Витягніть рефлекс зі старого репо (навіть нам не потрібно використовувати імена тегів, тому що ми позначили їх, ми можемо отримати їх із git fetch)
- Повторно імпортуйте сховище із списку, використовуючи тему цього посилання як повідомлення про сховище.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash save
тепер застарілий на користьgit stash push