git: Невозможно проиндексировать файл - разрешение запрещено - PullRequest
20 голосов
/ 19 июня 2011

Только для одного файла я получаю следующую ошибку:

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied

error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database
fatal: unable to index file wp/wp-admin/css/theme-install.dev.css

Я проверил свои разрешения для рассматриваемого файла, каталога объектов .git и .git сам.Я могу добавить любые другие файлы, кроме этого.Я мог stat/r/w/touch файл, и касание не помогло. разрешения все правильно.

Это какая-то сумасшедшая ошибка?

Ответы [ 6 ]

51 голосов
/ 08 октября 2015

Если вы используете visual studio или что-то подобное, что создает файл mdf, просто закройте VS и повторите команду git еще раз.На этот раз все должно работать.

Чтобы сохранить закрытие и повторное открытие, вы должны добавить ссылки в файл .gitignore в корне проекта.Например, если это база данных, вызывающая проблему, добавьте следующее:

# SQL Server files
*.mdf
*.ldf
14 голосов
/ 19 июня 2011

Глядя на исходный код Git (sha1_file.c, функция move_temp_to_file()), похоже, что Git не удается переименовать временный файл с именем /opt/www/.git/objects/3f/tmp_obj_XXXXXX (где XXXXXX - это шесть случайных символов) в /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47.Это может произойти, если у вас нет разрешения на удаление файлов в /opt/www/.git/objects/3f.

Некоторые вещи, которые нужно попробовать:

  • Если несколько пользователей обращаются к репозиторию Git, вам может потребоватьсявыполните что-то вроде git config core.sharedRepository 0664 (подробности см. git help config), чтобы убедиться, что вновь созданные каталоги и файлы имеют надлежащие разрешения для всех пользователей хранилища.
  • Попробуйте запустить rm -f /opt/www/.git/objects/3f/tmp_obj_* и посмотрите, не создает ли это проблемууходите.
  • Проверьте, можете ли вы воспроизвести проблему за пределами Git, выполнив следующие действия:

    mkdir -p /opt/www/.git/objects/3f
    cd /opt/www/.git/objects/3f
    rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47
    echo "testing" >tmp_obj_abcdefg
    mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47
    rm -f tmp_obj_abcdefg
    

    Обязательно запустите вышеприведенные команды того же пользователя, который столкнулся с ошибкой.

  • Попробуйте рекурсивно chown ing и chmod каталог объектов.
5 голосов
/ 22 января 2015

У вас нет разрешения на запись в /opt/www/.git/objects/3f.

Самое быстрое решение - использовать команду sudo для выполнения вашей команды с привилегиями root.

sudo <Your git command>

Решил для меня.

3 голосов
/ 15 октября 2018

Просто закройте Visual Studio (или Unity) и попробуйте добавить эти файлы снова.

1 голос
/ 23 августа 2018

В вашем git-репозитории что-то пошло не так, вероятно, из-за того, что внешний процесс создал файл или каталог, принадлежащий другому пользователю, а не текущему.

Эта ошибка встречается часто при использовании Docker, а служба в вашем файле docker-compose.yml имеет локально смонтированный том, который был создан с использованием пользователя, отличного от пользователя локального компьютера.

Если эта ошибка возникает впервые, выполните приведенные ниже действия в вашем рабочем каталоге, чтобы изменить владельца файлов и папок обратно вошедшему в систему пользователю:

sudo chown -R ${USER}:${USER} .

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

Безусловно, самое быстрое решение - выполнить следующее из корневого каталога проекта, в котором находится ваш репозиторий git:

sudo chown -R ${USER}:${USER} .git/objects

Чтобы проверить, что все исправлено, выполните следующее:

git add .

Быстро с последующим выполнением:

git status

Вы увидите, что все было добавлено в репозиторий git без необходимости что-либо тестировать / возиться с чем-либо еще.

0 голосов
/ 01 мая 2018

У меня была эта проблема в моем исходном репозитории, когда права были root: git 770, очевидно, мне пришлось изменить его на 771, даже если мой пользователь находится в группе git.Я подозреваю, что, возможно, git, возможно, либо не знает ACL, либо не совместим со вторичными группами, так как в этом случае группа GIT была одной из моих вторичных групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...