Есть ли в папке .git ваши файлы?

440
IMB

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

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

1

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 содержит достаточно информации, чтобы восстановить ваши файлы и даже ваши исторические коммиты.

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

Рефсы не коммиты; это ветви (ну, подвижные метки коммитов). Логически каждый коммит _до_ хранит каждый файл в полном объеме, хотя основной формат хранения обеспечивает дедупликацию и сжатие незаметно для остальной части git. grawity 5 лет назад 0
Хороший вопрос, я обновил формулировку. Я пытался донести до вас, что вы по-прежнему будете иметь доступ ко всем своим коммитам в истории, но не будете хранить каждый полный файл из своей истории git по отдельности. Justin Hill 5 лет назад 0
0
Austin Hemmelgarn

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

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

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

Похожие вопросы