Как мой репозиторий git продолжает расти?

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

Иногда я меняю ветки, редактирую файл и набираю статус 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

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

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

Ответ 1

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

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

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

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

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

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

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