2013-11-19 12 views
1

Я использую частное размещение git repo на малине pi для хранения всей моей школьной работы. Я сделал это, чтобы помочь мне ознакомиться с Git и запустить Linux-сервер в целом. Все работает нормально, до прошлой ночи я не получаю ошибку, которая говорит следующее:Ошибка Git - из памяти malloc не удалось. Необходимо изменить репо с фильтром или аналогичным

remote: Counting objects: 2688, done. 
remote: Compressing objects: 100% (1784/1784), done. 
remote: fatal: Out of memory, malloc failed (tried to allocate 243315665 bytes) 
error: git upload-pack: git-pack-objects died with error.rRemote: aborting due t 
fatal: git upload-pack: aborting due to possible repository corruption on the re 
mote side.ly EOF: 72% (1937/2688), 42.41 MiB | 293.00 KiB/s 
fatal: index-pack failed 

Я предполагаю, что актуальная проблема в том, что сервер просто не хватает памяти. Я проверил размер моего репо, и это было более 300 МБ. Это связано с тем, что в качестве нового пользователя я не понимал, что загрузка таких файлов, как файлы Visual Studio, Eclipse и Netbeans temp, была плохим. Я знаю, как удалить эти файлы для текущих и будущих коммитов, но мне было очень трудно попытаться полностью удалить их из репозитория. Все методы фильтрации, которые Google помог мне разобраться, похоже, только для пары файлов. Мне нужно сделать пакетное удаление многих файлов, и мне нужно, чтобы он не жаловался на меня, когда он так сильно не мог найти ни одного файла в заданном каталоге.

Так что мой вопрос в том, есть ли разумный способ делать то, что я прошу? Или было бы проще в моем случае просто потерять историю сообщений о совершении сделки и начать новое репо со всеми файлами .gitignore безопасно на месте с первого дня?

ответ

0

Я исправил проблему, но не использовал какие-либо методы, о которых я бы мог подумать. Оказывается, я должен был просто доверять сообщению об ошибке, потому что мой репозиторий был фактически поврежден. Я вручную скопировал два коммита, которые я сделал локально, на другую машину, на которой был репо, вручную скопировал сообщения фиксации вручную и удалил поврежденное репо из моего пи. Затем я инициализировал голый репо на pi и переместил локально обновленное вручную репо на сервер, который работал отлично. Теперь я могу тянуть и нажимать на него без проблем. Там никогда не было проблемы с памятью, я проверил размер другого репо, которое у меня было на нем, и поскольку в нем есть несколько HD-видео, оно было размером более 800 МБ, отлично работает.

Спасибо тем, кто пытался ответить на мой вопрос, за то, что вы нашли время. И создателю BFG - спасибо за публикацию. Я определенно буду использовать ваш инструмент для очистки моего репо теперь, когда у меня он снова работает.

2

https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html

Первый пример выглядит актуально для вас.

В основном:

мерзавец фильтр-ветвь --index Задает фильтр 'мерзавец гт --cached --ignore-unmatch имя_файла' ГОЛОВА

Вы можете заменить скрипт для «мерзавец гт --cached - -ignore-unmatch filename ', который удалит все и все файлы, которые вы не хотите. Пока он возвращает «успех» для каждого результата, он должен работать нормально.

Я еще не пробовал! Сделайте резервную копию своего репо, прежде чем вы начнете с ним (будь то это решение или любое другое).

2

Я уверен, что вам не нужна фильтрующая ветка, чтобы завершить нажим, хотя это выглядит неплохо по другим причинам, которые вы уже знаете. Существуют размеры пакета и параметры сжатия, доступные для хранения pack-objects от таких орехов. См. git config docs, начиная с pack.window, те, которые вам нужны, - это различные крышки памяти и размера. Помните, что сжатие пакетов многопоточно, каждое ядро ​​будет использовать полное окно сжатия.

Но для вашей фильтрации BFG Repo-Cleaner может быть тем, что вам нужно. Я никогда не использовал его, но он, кажется, хорошо расценен.

1

Использование по BFG для удаления больших файлов, а не ГИТ-фильтр-ветвь ...

BFG дает надежный метод избавления от больших файлов, гораздо проще, чем при использовании git filter-branch см http://rtyley.github.io/bfg-repo-cleaner/:

$ bfg --strip-blobs-bigger-than 100M my-repo.git 

Или, если вы хотите, чтобы ориентироваться на конкретные папки:

$ bfg --delete-folders "{VisualStudio,Eclipse,NetBeans}" my-repo.git 

Полное раскрытие: Я являюсь автором BFG Repo-Cleaner.