Должен быть пользователем root для отправки / передачи в ртутные репозитории - PullRequest
3 голосов
/ 05 января 2012

Я использую Ubuntu на своей рабочей станции, и всякий раз, когда я пытаюсь зафиксировать / отправить в репозиторий Mercurial, расположенный на общем ресурсе CIFS в моей локальной сети, я получаю эту ошибку: abort: Operation not permitted: /media/repos/myRepo/.hg/journal.dirstate

Тем не менее, добавление любой команды, вызывающей это, с помощью sudo, позволит mercurial продолжить работу без каких-либо ошибок.

Что мне делать, чтобы прекратить sudo каждый коммит?

Ответы [ 2 ]

3 голосов
/ 05 января 2012

У вашего пользователя нет прав на запись /media/repos/myRepo.Вы можете проверить владельца и разрешения, используя ls -la.В зависимости от результата вам следует либо:

Попробуйте изменить разрешения с помощью chmod, чтобы разрешить доступ вашему пользователю или группе.

sudo chmod -R ug+w /media/repos/myRepo

(ug+w означает добавить разрешения на записьдля группы и пользователя-владельца это будет работать, если вы находитесь в той же группе, что и владелец. В противном случае вы можете попробовать просто +w, что добавит его для всех пользователей, но это менее безопасно.)

Попробуйте сменить владельца с помощью chown на своего пользователя или группу.

sudo chown -R <myuser>:<mygroup> /media/repos/myRepo

myuser, и mygroup необязательны)

Также обязательно используйте chown и chmod рекурсивно для всего хранилища.Если journal.dirstate воссоздается каждый раз (что, я думаю, так и происходит), он наследует свои разрешения от каталога .hg, поэтому любые разрешения, которые вы изменяете для самого файла, могут быть потеряны.

1 голос
/ 25 сентября 2012

Проблема может быть связана с ошибкой в версиях Mercurial до 2.1.2, связанной с неудачной транзакцией.

Проблема начинает возникать, если hg push не удается в середине операции. Это может произойти, например, из-за разрыва сети или перехвата транзакции на стороне сервера. Это может привести к тому, что устаревший файл journal.dirstate останется внутри серверной директории .hg.

С этого момента ни один пользователь, кроме владельца journal.dirstate или пользователя root, не сможет отправлять файлы независимо от прав доступа к файлу journal.dirstate. Это происходит потому, что во время push Mercurial пытается chmod файл для пользователя, выполняющего push, выдавая ошибку, которую вы заметили:

Чтобы решить эту проблему, вы можете попробовать одно из следующих:

  • Пусть владелец файла journal.dirstate выполнит успешное нажатие. Устаревший файл должен быть очищен в процессе; или

  • Обновление серверной версии Mercurial до версии 2.1.2 или выше; или

  • Удалить файл journal.dirstate на стороне сервера.

После выполнения любого из этих действий все пользователи должны иметь возможность нажать еще раз.

...