我正在构建一个(有些有限的)Git 客户端。要设置存储库,请输入远程存储库的 URL。我想检查用户是否具有对该存储库的读+写访问权限。如果没有,我会显示一个身份验证对话框。
我检查“读取”访问git ls-remote <url>
权限。
是否有类似的方法来检查“写入”访问权限,而无需先克隆存储库?(我知道我可以git clone <url>
然后git push --dry-run
)
我正在构建一个(有些有限的)Git 客户端。要设置存储库,请输入远程存储库的 URL。我想检查用户是否具有对该存储库的读+写访问权限。如果没有,我会显示一个身份验证对话框。
我检查“读取”访问git ls-remote <url>
权限。
是否有类似的方法来检查“写入”访问权限,而无需先克隆存储库?(我知道我可以git clone <url>
然后git push --dry-run
)
如果 git repo 在 github,打开 repo 中的任何文件,然后单击“编辑”,github 将显示如下内容:
您正在编辑您没有写入权限的项目中的文件。我们已经创建了这个项目的一个分支,供您提交您提议的更改。提交对此文件的更改会将其写入您 fork 中的新分支,因此您可以发送拉取请求。在此处输入代码
使用最新的 GitHub API,您可以使用以下命令(您需要使用您的个人访问令牌进行身份验证)检查 USERNAME(您的或其他用户)的特定存储库的权限,例如:
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 对该存储库具有哪些权限。否则会报告:
“未找到信息”
请注意,您应该拥有对相关存储库的推送访问权限,否则它将失败
{
"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 push git+ssh://host.org/path/to/repo some_ref
不克隆的情况下执行。
但是请记住,推送提交链和更新远程引用是两个不同的操作,您可能对前者有权限,但对后者没有权限。此外,某些引用可能是不可修改的。