2013-09-12 4 views
3

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

$ git remote add github [email protected]:me/myrepo.git 
error: could not commit config file .git/config 

Что? Почему я должен выполнить файл конфигурации git? И как мне сделать эту остановку?

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

+0

Пожалуйста, укажите точные команды, которые вы использовали, когда получили сообщение об ошибке. – sleske

+1

Возможно ли записать файл .git/config? – knittl

+0

Это доступно для записи. – amd

ответ

5

Некоторые команды git изменяют файл конфигурации git. Один из них - git remote add, поскольку удаленный файл хранится в файле конфигурации.

Чтобы избежать проблем с несколькими процессами git, одновременно изменяющими файл конфигурации, git блокирует файл конфигурации перед его заменой (путем записи файла блокировки) и освобождает блокировку после этого (путем переименования файла блокировки в файл конфигурации) ,

Сообщение об ошибке

error: could not commit config file .git/config 

означает, что мерзавец не может должным образом освободить эту блокировку. Это, вероятно, означает, что либо другой процесс работал над одним и тем же файлом, либо была какая-то ошибка файловой системы (или есть ошибка в git или вашей ОС/библиотеках).

К сожалению, git не говорит вам, что именно было проблемой, поэтому вам придется вручную отладить это. Вы можете попробовать запустить git с dtruss, чтобы узнать, что именно происходит неправильно.

+1

Спасибо за это. Я закончил редактирование файла конфигурации вручную, и это сработало. Впоследствии я смог без проблем добавить другой пульт через командную строку. – amd

0

Это может быть проблема с разрешениями, особенно для автоматизированных заданий, запущенных в Windows, которые могут иметь меньше разрешений, чем интерактивный вход одного и того же пользователя. От this answer on ServerFault:

Each logon session to a Windows (NT-based versions, that is) machine has a "security token"-- a data structure that describes, amongst other things, the groups that the user represented by the token is a member of.

The "Interactive" identity isn't a group that you can manually place members into, but rather is added by the operating system, automatically, when a security token is constructed for a user who has logged-on via the Windows Graphical User Interface. This is similar to the "Network" identity, which is added automatically to tokens created for users who are accessing the machine via the network.

These automatically-generated group memberships allow you to construct permissions that might allow or deny access to resources based on how the user is accessing the machine. This supplements the permission system's default behavior of arbitrating access based on who is accessing the resource.

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