1

Теоретически, если вы создали резервную копию только папки .git на флэш-накопителе, а какой-то пользователь rouge удалил все ваши файлы проекта на вашем ПК, можете ли вы восстановить файлы из этой папки .git на флэш-накопителе?

Примечание: это только для сценария локального репо, я понимаю, что вы можете извлечь из онлайн-репо.

3 ответа3

3

Да, большинство из них. Папка .git содержит полную историю репозитория (все коммиты и их содержимое), а также область подготовки (вещи, которые вы git add но еще не зафиксировали).

Действительно, когда Git-серверы хранят репозитории, они используют только папку .git ("пустой" репозиторий).

Однако он не содержит копий разных файлов, о которых вы еще не сказали Git. Если вы внесли некоторые изменения, но не git add их, они еще не будут скопированы в .git/objects/.

Способ извлечения файлов - это git checkout -f или git checkout <paths> (который скопирует промежуточную область в рабочее дерево).

1

Каталог .git в проекте будет иметь достаточно информации для восстановления любой версии в вашей истории коммитов.


Просто для удовольствия я запустил это локально:

cd <my local repo>
rm -r *
ls     # nothing there
ls -la # some dot files/directories
git checkout .
ls     # my stuff is back!

Все мои вещи вернулись (за исключением некоторых незафиксированных изменений, вывода компиляции и т.д.), А затем я сразу же пожалел об этом "забавном" упражнении


Тем не менее, каталог .git содержит достаточно информации, чтобы восстановить ваши файлы и даже ваши исторические коммиты.

Смотрите: https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain

0

То, о чем вы говорите, это то, что известно как «голое» хранилище.

По сути, каталог .git содержит все данные обо всех ревизиях, отслеживаемых в этом хранилище. Это включает в себя все данные, необходимые для восстановления рабочего каталога для проверки.

По этой причине, если вы никогда не получите доступ к отдельным файлам репозитория, а только клонируете репозиторий или извлекаете или извлекаете из него, вы можете сэкономить потенциально большой объем пространства, просто имея каталог .git .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .