Теоретически, если вы создали резервную копию только .gitпапки на флеш-накопителе, а какой-то пользователь Rouge удалил все файлы вашего проекта на вашем ПК, вы все равно сможете восстановить файлы из этой .gitпапки на флеш-накопителе?
Примечание: это только для сценария локального репо, я понимаю, что вы можете извлечь из онлайн-репо.
3 ответа на вопрос
3
grawity
Да, большинство из них. .gitПапка содержит полную историю репозитория (все фиксации и их содержимое), а также плацдарм (вещи вы git add-ed, но еще не было зафиксированы).
Действительно, когда Git-серверы хранят репозитории, они используют только папку .git («пустой» репозиторий).
Однако он не содержит копий разных файлов, о которых вы еще не сказали Git. Если вы внесли некоторые изменения, но не сделали git addих, они еще не будут скопированы в .git / objects /.
Способ извлечения файлов - git checkout -fили git checkout <paths>(который скопирует промежуточную область в рабочее дерево).
1
Justin Hill
.gitКаталог в проекте будет иметь достаточно информации, чтобы восстановить любую версию в коммиттере истории.
Просто для удовольствия я запустил это локально:
cd <my local repo> rm -r * ls # nothing there ls -la # some dot files/directories git checkout . ls # my stuff is back!
Все мои вещи вернулись (за исключением некоторых незафиксированных изменений, вывода компиляции и т. Д.), А затем я сразу же пожалел об этом "забавном" упражнении
Тем не менее, каталог .git содержит достаточно информации, чтобы восстановить ваши файлы и даже ваши исторические коммиты.
Рефсы не коммиты; это ветви (ну, подвижные метки коммитов). Логически каждый коммит _до_ хранит каждый файл в полном объеме, хотя основной формат хранения обеспечивает дедупликацию и сжатие незаметно для остальной части git.
grawity 5 лет назад
0
Хороший вопрос, я обновил формулировку. Я пытался донести до вас, что вы по-прежнему будете иметь доступ ко всем своим коммитам в истории, но не будете хранить каждый полный файл из своей истории git по отдельности.
Justin Hill 5 лет назад
0
0
Austin Hemmelgarn
То, о чем вы говорите, это то, что известно как «голое» хранилище.
По сути, .gitкаталог содержит все данные обо всех ревизиях, отслеживаемых в этом хранилище. Это включает в себя все данные, необходимые для восстановления рабочего каталога для проверки.
По этой причине, если вы никогда не получите доступ к отдельным файлам репозитория, а только клонируете репозиторий или извлекаете или извлекаете из него, вы можете сэкономить потенциально большой объем пространства, просто имея .gitкаталог.