2015-12-09 2 views
6

Я только что создал новый репозиторий и создал начальную фиксацию.Почему мой репозиторий Git намного больше, чем рабочий каталог?

Рабочий каталог составляет 2 ГБ. Но каталог .git имеет колоссальные 15 ГБ.

Почему репозиторий git имеет только одну фиксацию, почти в 8 раз большую, чем рабочий каталог?

Я что-то не так? Есть ли способ исправить это?

+1

Попробуйте запустить git gc (запустите git gc -help, чтобы посмотреть, что это значит). Я не отправляю это как ответ, потому что я не знаю, почему ваше репо настолько велико в первую очередь, но «git gc' * может помочь». –

+0

Это действительно странно. Возможно, вы добавили некоторые файлы в промежуточную область, но удалили их перед выполнением коммита? – Nayuki

+0

Как вы создали этот новый репозиторий? Похоже, что там хранится какая-то история. Важно: Вы использовали 'git clone' или' git init'? –

ответ

7

Размер большого репозитория заключается в том, что вы временно добавили содержимое подкаталога «.hg», но не использовали данные в фактической начальной фиксации. Давайте проследим, что произошло шаг за шагом:

  1. git init: Создает «.git» подкаталог с небольшой бит метаданных.

  2. git add .: Это скопировано всем рабочим деревом в индекс Git (промежуточная область a.k.a.) - другими словами, все файлы в вашем проекте, включая все файлы каталога «.hg». Когда мы говорим, что они были добавлены в индекс, это означает, что все содержимое файла было добавлено в базу данных хранилища объектов в «.git/objects», а файл «.git/index» имеет указатели на все файлы.

  3. git reset .hg: Это удалило подкаталог «.hg» из индекса. Но объекты, которые были добавлены в хранилище, не удаляются, потому что другие записи фиксаций или индексов могут указывают на них. (Git в настоящее время не отслеживает, сколько ссылок указывает на объект. Оно работает с отслеживанием сбора мусора, а не с подсчетом ссылок.)

  4. git commit: Это последняя команда, которую вы выполнили, которая скопировала индекс в новую фиксацию и хранится в хранилище.

Чтобы решить вашу проблему:

  • Вы можете избежать файла наворотов в первую очередь, если вы начинаете с пустым репозиторием и добавить только те файлы, которые вам нужны, тщательно исключая». ХГ».

  • Если вы хотите исправить проблему после факта, вы можете запустить git gc и надеяться, что неиспользуемые объекты будут удалены.

+1

Решение, которое я использовал для устранения проблемы, заключалось в клонировании репозитория с использованием протокола file: //. – PortMan

Смежные вопросы