Ответ 1
Легкий ответ: переместите старый репо и зажгите. Если у вас есть материал в старом репо, который вы хотите сохранить, есть способы их получить, но сначала получите хорошее репо.
Один из моих клонированных репозиториев получает это от git fsck
фатальный: свободный объект 40bda4e3b79c3d7bf598df31d9e68470f97a3f79 (хранится в .git/objects/40/bda4e3b79c3d7bf598df31d9e68470f97a3f79) поврежден
У меня есть еще одна копия, что fsck чисто.
Я попытался подключить каталог/подкаталоги, содержащие фатальный, и откладывая его. Проблема продолжается.
Мне действительно не нужен какой-либо конкретный файл, я просто хочу, чтобы репозиторий Оформить заказ. Что мне делать?
Примечание. Удаленный репозиторий размещен на github.
Легкий ответ: переместите старый репо и зажгите. Если у вас есть материал в старом репо, который вы хотите сохранить, есть способы их получить, но сначала получите хорошее репо.
Во-первых, вы можете проверить файловую систему на наличие ошибок: fsck -y
Затем проверьте репозиторий git: git fsck
Идея такова:
.git
под вашим текущим проектом (обозначим его "проектом A" ).cd
в проект A и git клон и reset до последней фиксации.cd
в проект A и используйте git status
, чтобы увидеть статус проекта A. Это должно быть так, как если бы коррупция никогда не происходила.Короче говоря, сделайте копию, чтобы зарезервировать текущую рабочую область, и объедините ее со свежим клоном, заменив файлы, а затем обработайте свои изменения как обычно.
Здесь он в действии:
Сначала я вижу, что у меня есть коррупция (это потому, что я заставил мою виртуальную машину отключиться вчера: P):
✘ domicor @ubuntu ~/dotfiles мастер ● git статус
ошибка: объектный файл .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4 пуст
ошибка: объектный файл .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4 пуст
фатальный: свободный объект cd593f6db1d5050406e15b9c80d215fd48db39f4 (хранится в .git/objects/cd/593f6db1d5050406e15b9c80d215fd48db39f4) поврежден
Сделайте копию моей папки dotfiles
и теперь удалите папку .git
.
$cd ~/dotfiles $ rm -rf.git
Затем заново создайте репозиторий git.
$git init
Добавить пульт.
$git удаленный добавочный источник git @git.oschina.net: domicor/dotfiles.git
Извлечь из пульта дистанционного управления.
$git fetch
Теперь reset HEAD.
$git reset - грубое происхождение/мастер
Обратите внимание, что сразу после того, как я вытащил из удаленного, я выпустил команду git status
, чтобы проверить статус моего репо. Вы можете видеть, что все файлы не отслеживаются. И первая строка запроса командной строки оранжевая от моей команды git init
до git reset
, указывающая, что при инициализации моего репо, git обнаруженных файлов и после reset все файлы восстанавливаются до состояния HEAD, таким образом, приглашение зеленого цвета.
Установите ветвь восходящего потока:
$git branch --set-upstream-to = origin/master master
Теперь скопируйте файлы из папки резервного копирования (для меня это dotfiles (copy)
) вручную или через командную строку для замены файлов в папке dotfiles
. Проверьте статус и должны быть изменения, как и мой снимок экрана:
Теперь вы можете git diff your-filename
проверить правильность применения ваших изменений, и теперь вы можете добавлять файлы и фиксировать их.\О/
Чтобы понять это, VCS git просто записывает ваши изменения. Когда VCS поврежден, ваши файлы по-прежнему безопасны. Они все еще там, когда вы их оставили. Таким образом, вы создаете резервную копию своих файлов и восстанавливаете записи git из других источников, а git можете сравнивать копию восстановления с текущим статусом файла и иметь представление о том, что изменилось так же, как и до коррупции. И приветствия\o/
Сделайте git checkout
в другую ветку, вы получите список измененных файлов, просто скопируйте их и вставьте в ветвь.
Если вы это сделаете, проблема будет решена, в следующий раз, когда вы сделаете некоторые изменения, git status
должен работать.
Я столкнулся с этой проблемой, и этот простой трюк решил проблему.
Предположим, вы столкнулись с этой проблемой в папке с именем "my-project" с веткой "my-new-feature", клонируйте репозиторий в новую папку с именем "my-project-dummy" и извлеките в "my-new-feature"
Удалите папку ".git" в папке "my-project" и скопируйте папку ".git" из папки "my-project-dummy" в папку "my-project"
Самый простой ответ: "rm -rf.git..." http://www.bazhukov.net/2015/02/git-corrupt-loose-object/