2012-06-14 2 views
3

При попытке вызвать мерзавец тянуть команду он возвращает ошибку следующим образом:мерзавец тянуть фатальная ошибка

[email protected]:~/restoranya/restoranya$ git pull origin master

error: object file .git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de is empty

fatal: loose object 2a0836034919f0cfe0f8f1ab98037884dd1c93de (stored in .git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de) is corrupt

[email protected]:~/restoranya/restoranya$ fatal: The remote end hung up unexpectedly

Что причина такой ошибки? Что я должен сделать, чтобы выздороветь?

ответ

2

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

Вам нужен еще один клон этого репозитория, где вы можете запустить

git cat-file -t 2a0836034919f0cfe0f8f1ab98037884dd1c93de 

без ошибок, и вы хотите, чтобы придать хорошую версию этого объекта в базу данных объекта происхождения в.

Описание проблемы может быть сложным, потому что мы говорим о множественных клонов, которые могут находиться на разных хостах и, возможно, принадлежат различным пользователям. Приведенные ниже шаги предполагают, что у вас есть доступ к оболочке вашего хоста как пользователь, которому принадлежит ваш исходный репозиторий. В приведенном ниже подсказке origin$ показаны команды, которые должны быть запущены на машине, на которой размещено ваше происхождение.

Плохой объект по происхождению находится в свободном формате, поэтому последний шаг восстановления - простая копия.

Предполагая, что объект в хорошем клоном также свободно, а затем запустить

origin$ cp /path/to/good-repo/.git/objects/\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/objects/2a 

если ваше происхождение голое хранилище или

origin$ cp /path/to/good-repo/.git/objects/\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/.git/objects/2a 

иначе.

Если в хорошем клоне этот объект хранится в упаковке, то вам нужно его вытащить. Я рекомендую сделать это в клочья сбрасывания царапин.

origin$ git clone file:///path/to/good-repo /tmp/restore-repo 

Если good-repo находится на другой машине, клон URL будет отличаться.

origin$ git clone [email protected]:src/foo/.git /tmp/restore-repo 

Перейдите в каталог, в котором хранится ваш временный репозиторий.

origin$ cd /tmp/restore-repo 

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

origin$ mkdir /tmp/restore-packs 
origin$ mv .git/objects/pack/* /tmp/restore-packs 

Теперь вы готовы распаковать.

origin$ for pack in /tmp/restore-packs/*.pack; do 
    git unpack-objects -r < $pack 
done 

Опция -r говорит git-unpack-objects продолжать распаковку, даже если он сталкивается с плохим объектом.

На данный момент /tmp/restore-repo теперь должен содержать 2a08360 ... как свободный объект, поэтому запустить

origin$ cp /tmp/restore-repo/.git/objects\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/objects/2a 

или

origin$ cp /tmp/restore-repo/.git/objects\ 
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \ 
/path/to/origin/.git/objects/2a 

в зависимости от того, происхождение голый репозиторий.

0

Вы попробовали переупаковать?

git-repack is used to combine all objects that do not currently reside in a "pack", 
into a pack. It can also be used to re-organize existing packs into a single, more 
efficient pack. 
A pack is a collection of objects, individually compressed, with delta compression 
applied, stored in a single file, with an associated index file. Packs are used 
to reduce the load on mirror systems, backup engines, disk storage, etc. 

есть некоторые команды для очистки вашего репо ..

$ git-prune 
$ git-gc --aggressive 
$ git-repack 
$ git-repack -a 
$ git-prune-packed 
+0

его не работает человек. я получаю ту же ошибку :( –

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