Подтвердить что ты не робот

git gc error: не удалось запустить сообщение перепаковки

Я просто запустил git gc в своем локальном репозитории, чтобы выполнить некоторую регулярную очистку. Сегодня впервые это не удалось. Вот что я сделал: (Windows 7)

C:\Source\TxTranslation>git gc
Counting objects: 880, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (540/540), done.
Writing objects: 100% (880/880), done.
Total 880 (delta 504), reused 589 (delta 333)
rm: cannot unlink 'pack-18179305b5b5dbdaf059e4ded50b736ab93e220c.pack': Permission denied

C:\Source\TxTranslation>git gc
Counting objects: 880, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (369/369), done.
Writing objects: 100% (880/880), done.
Total 880 (delta 504), reused 880 (delta 504)
mv: cannot move '/c/Source/TxTranslation/.git/objects/pack/pack-3002d22690e007a4205f6ecfa19d6e93296fdd78.pack' to '/c/Source/TxTranslation/.git/objects/pack/old-pack-3002d22690e007a4205f6ecfa19d6e93296fdd78.pack'
error: failed to run repack

Я могу повторить это так часто, как хочу, я всегда получаю второй выход снова. Вышеуказанная ошибка "Отказано в разрешении" - это нонсенс Я считаю, что это распространенная ложная ошибка, которую я вижу во многих системах Windows в эти дни. Это может происходить от вирусных сканеров, которые держат файлы открытыми, чтобы их нельзя было удалить немедленно. Это приводит ко всевозможным проблемам, но, очевидно, избежать этого невозможно.

Это проблема? Что-то сломано? Я абсолютно не понимаю, что эти сообщения значат для меня. Просмотр журнала с помощью различий все еще работает. Что я мог сделать, чтобы решить эту проблему? (К счастью, я передал все на Github как раз раньше, поэтому я мог просто перекодировать его, но я хотел бы сначала попытаться исправить это, на случай, если это случится снова.)

4b9b3361

Ответ 1

Как оказалось, Visual Studio заблокировала некоторые из файлов Git. Закрытие Visual Studio разрешило проблему.

FTR, я использую поставщик источника управления Git (в последней используемой версии 0.6.4) в VS2010. Возможно, это часть причины.

Ответ 2

В моем случае git gc не смог бы запустить repack после перечисления, но он был успешным при запуске с некоторыми дополнительными опциями, git gc --aggressive --prune=now.

Ответ 3

У меня проблема с eclipse. Он обращался к репозиторию git через Eclipse, а также к git bash.

Решено, запустив gc после закрытия eclipse

Окружающая среда

Windows 7

Git 1.8.4.mysysgit.0

Eclipse Kepler SR2

Ответ 4

Надеюсь, что это поможет другим.

В моем случае я обнаружил, что процесс Tortoise Git был виновником блокировки файлов. Прекращение процесса позволило мне git gc

Ответ 5

Если вы выполняли какую-либо другую операцию с git или какую-либо связанную с git операцию в графическом интерфейсе, отмените операцию или закройте ошибку и вручную запустите git gc, а затем попробуйте снова выполнить эту операцию. По сути, в Windows это сообщение указывает на конфликт между клиентом командной строки git и какой-либо другой программой.

В моем случае перепаковка была запущена автоматически как часть git pull. Когда я получил ошибку, после исключения проблемы с разрешениями с быстрой проверкой работоспособности, что ни одна из вещей, которые будут запускать процессы git (IDE, git bash, git GUI), не будет работать с повышенными правами, я пошел в Process Explorer, чтобы выяснить, В каком процессе был открыт файл (Найти → Файловый дескриптор или DLL), и он обнаружил git.exe который был родителем другого процесса git.exe. Я предполагаю, что в коде автоматической перепаковки есть некоторые предположения о блокировке, которые не подходят для Windows, где по умолчанию открытие файла устанавливает исключительную блокировку чтения/записи для файла на уровне операционной системы.

Это было с

$ git --version
git version 1.9.2.msysgit.0

Ответ 6

В моем случае виноват исполняемый экземпляр IISExpress.

Ответ 7

Это случилось со мной даже после того, как я закрыл свое решение в Visual Studio, но был разрешен, когда я, наконец, закрыл VS. Я не использовал расширение управления версиями git.