Как я могу проверить доступ на запись в удаленный Git-репозиторий ("Могу ли я нажать?")
Я создаю (несколько ограниченный) клиент Git. Чтобы настроить хранилище, введите URL-адрес для удаленного хранилища. Я хочу проверить, есть ли у пользователя права на чтение и запись в этом хранилище. Если нет, я представляю диалог аутентификации.
Я проверяю доступ для чтения с git ls-remote <url>
,
Есть ли аналогичный способ проверки доступа на запись без предварительного клонирования репо? (Я знаю, что мог git clone <url>
а потом git push --dry-run
)
8 ответов
Если репозиторий git находится в github, откройте любой файл в репозитории, затем нажмите "изменить", github покажет что-то вроде этого:
Вы редактируете файл в проекте, к которому у вас нет прав записи. Мы создали форк этого проекта, чтобы вы могли зафиксировать предложенные изменения. Отправка изменения в этот файл запишет его в новую ветку вашего форка, поэтому вы можете отправить запрос на извлечение кода.
С помощью последней версии GitHub API вы можете проверить разрешения на конкретное репо для ИМЯ ПОЛЬЗОВАТЕЛЯ (вашего или другого пользователя) с помощью следующей команды (вам нужно будет пройти аутентификацию с использованием вашего личного токена доступа ), например:
curl -u your_username:your_access_token \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/octocat/hello-world/collaborators/USERNAME/permission
Ответ покажет, какие разрешения имеет USERNAME для этого репо. В противном случае он сообщит:
"Сообщение не найдено"
Обратите внимание, что у вас должен быть push-доступ к рассматриваемому репо, иначе он не удастся
{
"message": "Must have push access to view collaborator permission.",
"documentation_url": "https://docs.github.com/rest/reference/repos#get-repository-permissions-for-a-user"
}
Буквально просто нажать (без изменений). Git нужны учетные данные даже для того, чтобы попытаться отправить запрос и сообщить, что в этом нет необходимости.
При правильной настройке учетных данных:
$ git push
Everything up-to-date
после испорченной конфигурации ssh:
$ git push
ERROR: Permission to [some repo] denied to [my user name].
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Вы можете выполнить git push git+ssh://host.org/path/to/repo some_ref без клонирования. Но смотри мой комментарий выше
Отправьте безобидную ветку на сервер:
git clone (...)
git branch -a
# Make sure no branch named "test" exists. If it does, use another name.
git branch test
git push -u origin test
# If the above push worked, you have write access
# Cleaning up
git branch -d test
git push -d origin test # only run this if you do have write access
Перейдите к ветке, которую вы хотите отредактировать, и наведите указатель мыши на кнопку редактирования, и она может сказать «Разветвить этот репозиторий и отредактировать этот файл», если у вас нет доступа к репозиторию. Но предположим, что у вас есть некоторый доступ к репозиторию, тогда всплывающее сообщение покажет «Редактировать этот файл», но у вас может не быть доступа для фиксации ветки. Чтобы проверить доступ к определенной ветке, вы можете нажать на кнопку редактирования и в форме отправки изменений вы увидите «Зафиксировать изменения», если у вас есть доступ. Или, если у вас нет доступа, вы увидите «Предложить изменения», поскольку это создаст новую ветку.
GIT_TERMINAL_PROMPT=0 git push --dry-run &>/dev/null
GIT_TERMINAL_PROMPT=0
: ошибка, если вам необходимо ввести учетные данные вручную.git push
: попробуйте отправить изменения в источник.--dry-run
: моделировать операцию, но не выполнять ее.&>/dev/null
: отключить любой вывод.
Вы можете использоватьgh
(GitHub CLI)api
подкоманда, чтобы проверить ваш доступ к репозиторию (вам нужно использоватьgh auth login
сначала войти в свою учетную запись GitHub).
Команда
gh api /repos{/owner}{/repo}/collaborators/USERNAME/permission
Это даст вам много информации.
Если вы хотите, чтобы команда выводила простоread
илиwrite
, запустите это:
gh api /repos{/owner}{/repo}/collaborators/USERNAME/permission | jq '.permission' -r