Я сталкиваюсь с проблемой, когда пользователь не может вставить свои коммиты в репозиторий Mercurial, и я озадачен, почему он не работает для него.Я попробовал несколько вещей, чтобы выяснить, в чем дело, Google не находит ничего полезного ... вот и я.
Во-первых, конфигурация.В нашей сети есть машина с Windows XP SP2 x64, которая выступает в качестве официального сервера хранилища.Это содержит несколько репозиториев на нем.Мы клонируем / толкаем / вытягиваем, используя папку на этом диске, которая является общей.Разрешения предоставляются каждому для доступа на чтение.Пользователи, которые могут нажать (включая пользователя, у которого есть проблемы), получают полный контроль.Машина пользователя основана на Win XP.Моя машина (используется для устранения неполадок) также основана на Win XP.
Во-вторых, симптомы.Пользователь использует TortoiseHg 2.1.1 для выполнения своей работы.Он может клонировать просто отлично, коммиты в его локальный репозиторий принимаются и т. Д. Однако, когда он пытается нажать, TortoiseHg возвращает код «abort, ret 255».Не очень полезно.Итак, мы перешли в командную строку и выдали «hg push -v --debug».Здесь возвращается «abort: доступ запрещен».Этот же пользователь может без проблем писать в общую папку сервера - он может создавать файлы, каталоги и удалять их.Таким образом, доступ для чтения / записи к диску / папке не является проблемой.
В-третьих, наши результаты экспериментов.Вот некоторые странные результаты тестирования.Пользователь создал новое локальное тестовое репо.Я вошел в систему на сервере и создал тестовое репо, чтобы он мог нажать на него.Пользователь зарегистрировал файл и затем отправил его в тестовое хранилище на сервере.Это работало нормально.Нет прерываний.Жизнь была хорошей.Он смог сделать еще несколько толчков, и он продолжал работать, как ожидалось.Затем я клонировал репо на свою машину, обновил файл и вытолкнул его обратно.После того как пользователь извлек мои изменения и попытался вернуться на сервер, он снова столкнулся с ужасным сообщением «Доступ запрещен».Между тем, я все еще могу обновить проект без каких-либо проблем.
В качестве другого эксперимента у нас был выход пользователя из системы и другой вход пользователя. Они сделали это и смогли без проблем перейти на репозиторий сервера.Исходный пользователь снова входит в систему, вносит некоторые изменения и т. Д. И снова сталкивается с кирпичной стеной «Доступ запрещен».
Насколько мы можем судить, проблема не связана с учетными данными Windows.В противном случае мы ожидаем, что создание произвольных файлов в общей папке на сервере не будет работать.Кроме того, до тех пор, пока я не обновил тестовое репо, созданное пользователем, он мог просто толкнуть этот репо.
Есть идеи?Какие дополнительные проверки учетных данных выполняет Mercurial, что может вызвать это?
ОБНОВЛЕНИЕ:
После получения подсказки от Wim я начал просматривать разрешения на различные объектырепо с использованием «cacls».Это инструмент Windows, который «отображает или изменяет списки контроля доступа к файлам».Я попросил пользователя создать новый репозиторий, а затем сделал снимок разрешений.Затем я зарегистрировал файл в том же репо и сделал еще один снимок изменений.
Оказывается, что в результате этого обновляются несколько разрешений для файлов репо: undo.bookmarks, undo.branch, undo.desc, undo.dirstate, branchheads, 00changelog.i, 00manifest.i, отменить и единственный файл хранилища.Все эти файлы имеют разрешения, аналогичные следующим:
C:\Projects\Mercurial\hgtest4\.hg\store\undo BUILTIN\Administrators:F
NT AUTHORITY\SYSTEM:F
DOMAINxxxx\USERIDxxxx:F
BUILTIN\Users:R
(фактические значения DOMAINxxxx и USERIDxxxx были изменены). До моей регистрации DOMAINxxxx & USERIDxxxx отражал домен пользователя и идентификатор пользователя. После моей регистрации они были обновлены до моего (мы находимся в одном домене, но идентификатор пользователя, очевидно, отличается.) Я смог проверить и проверить, даже если мой идентификатор пользователя не был в списке, потому что я являюсь членом группы BUILTIN \ Администраторы. Пользователь с проблемой не является. Итак, я предполагаю, что после того, как я что-то зарегистрировал, система больше не видела в нем пользователя с правами доступа с правами на запись (BUILTIN \ User: R указывает на доступ только для чтения) и поэтому вызвала отказ в доступе.
У меня сейчас ужасное исправление Q & D (пользователь теперь входит в группу администраторов ...). Реальное исправление будет состоять в том, чтобы получить репо от общего доступа Windows и перейти к правильной конфигурации сервера .