2015-02-09 4 views
10

Я использую ubuntu 14.10 (64 бит), git версии 2.1.0. Это хранилище, которое существует уже несколько лет, и у него недавно возникли проблемы.Как мой git-репозиторий продолжает расти?

Иногда я буду менять ветки, редактировать файл и набирать статус git. Он покажет кучу файлов как «измененных», которые на самом деле вообще не изменились.

Если я печатаю следующее:

$ git commit -am "fixed sms message"

Я получаю ошибки как это:

error: short read No such file or directory 
error: globalstatic/images/console/avatar_f.gif: failed to insert intodatabase 
error: unable to index file globalstatic/images/console/avatar_f.gif 
fatal: updating files failed 

Если я не делаю ничего другого, кроме нажмите клавишу со стрелкой вверх и нажмите клавишу ВВОД еще раз, я Вы получите ошибку в следующем файле, который появился в git status, который никогда не менялся. Я могу это сделать, пока не исчерпал список файлов в git status, который не изменился, и тогда он будет зафиксирован правильно.

git fsck --full сообщает, что он обнаружил проблемы, но на самом деле ничего не исправляет. Я просто должен продолжать пытаться совершить, пока это не сработает. Вот вывод git fsck --full, когда он дает мне вопросы:

Checking object directories: 100% (256/256), done. 
Checking objects: 100% (120625/120625), done. 
dangling tag c7539416829fb0748bc32dda3beb386bac46ea9a 
dangling blob 88a0700db2a75e6ea2b14b9a5af15ece63a80805 
dangling blob f4c664b0044f3d5efff1148717dc68b940e08574 
dangling blob 1bf6185091177fd5a496f5bf031f4d666fec92da 
dangling commit fee4bdcc078789a3745aa1311f128a6b61a81736 
dangling blob 9f14e68da29d49895b1ea303ed33cb390fc56b76 
dangling blob 784a02e974b81f35952fb7c31bf2dcb1a7bfeda8 
dangling blob 9e92d6cf395206152123f9a29edb95652114fd34 
dangling commit 1294f626dcb76cafa560f65792517655fb8a52ae 
dangling blob bceb1adde285e71109723211a1bcb5b0fa126681 
dangling tag 19f4be8e7b53465b13359bc4350b5e87c5942560 
dangling blob 93f96a3b5e995032a50723af796dab9ae36fb974 
dangling blob a25bdfab82fef920935478ee2cefe4dc2e81bbf6 
dangling blob af7187350341f3d7795d35cc1f0cee78eb9f9fdf 
dangling blob e2a1db9e3d3d438c8b03cb6254ca492e505be6f8 

Если я запускаю его более чем один раз, я получаю такое же сообщение. Ничего не меняется.

Что происходит?

+0

Время проверки файловой системы и дисков, я думаю ... Не только репо. Тем более, что он жалуется на файлы в рабочем каталоге (в дополнение к проблемам 'git fsck'). – twalberg

+0

О какой файловой системе это хранится? Это синхронизация Dropbox или что-то в этом роде? – jszakmeister

+0

На самом деле, глядя на него больше, это не похоже на то, что ваше репо повреждено. Оборванные объекты могут быть результатом ветвей, которые больше не существуют, или от восстановления вашей работы. Оборванный тег немного подозрительный, но может быть, потому, что вы удалили тег где-то на этом пути. Что, кажется, происходит, так это то, что Git не будет связываться с репо. Вы можете попробовать добавить 'GIT_TRACE = 2' в начало вашей командной строки, чтобы получить дополнительную информацию о том, что происходит. – jszakmeister

ответ

8

Не знаю, что происходит (не считая очевидного, что что-то развращает ваше git-репо), но я знаю, как я исправляю такие вещи - я надеюсь, что это был неявный вопрос!

  • толкать репозиторий где-то (локальное голое хранилище будет хорошо)
  • переименовать старый репозиторий myrepo.broken или подобную проверку
  • из свежей копии РЬИХ вы толкнули на прежнее место
  • После того, как вы уверены, что ничего не потеряли, удалите старый репо

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

  • Обратите внимание, что оборванные капли и фиксации вполне могут быть проблемой - см., Например, here. Короткая прочитанная вещь должна не.
  • git gc --prune=now будет обрезать все ваши оборванные капли и совершает.
  • Here - учебное пособие по обслуживанию и восстановлению данных.

Насколько то, что происходит, то, у меня были проблемы с

  • NFS установлены домашние каталоги, содержащие GIT деревья, когда сервер NFS является хитроумный
  • нечувствителен к регистру системы подачи
  • потери мощности/сбоя системы, вызвавшего повреждение FS, или происходит на полпути через фиксацию
  • неопознанные гремлины в системе

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

+0

Я отдам его. Благодаря! – synic

+0

Хуже всего то, что гремлины могут быть очень вероятной причиной. Могут быть вирусы, сканеры, системы резервного копирования файлов и т. Д., Изменяя файлы «на лету», поскольку материал изменяется. Следует подумать о том, что недавно изменилось в среде (вы сделали обновление? Установили ли вы новое программное обеспечение?) – sjagr

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