111

我正在构建一个(有些有限的)Git 客户端。要设置存储库,请输入远程存储库的 URL。我想检查用户是否具有对该存储库的读+写访问权限。如果没有,我会显示一个身份验证对话框。

我检查“读取”访问git ls-remote <url>权限。

是否有类似的方法来检查“写入”访问权限,而无需先克隆存储库?(我知道我可以git clone <url>然后git push --dry-run

4

3 回答 3

114

如果 git repo 在 github,打开 repo 中的任何文件,然后单击“编辑”,github 将显示如下内容:

您正在编辑您没有写入权限的项目中的文件。我们已经创建了这个项目的一个分支,供您提交您提议的更改。提交对此文件的更改会将其写入您 fork 中的新分支,因此您可以发送拉取请求。在此处输入代码

于 2016-10-30T06:15:46.720 回答
10

使用最新的 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"
}
于 2021-01-12T11:49:35.057 回答
1

您可以在git push git+ssh://host.org/path/to/repo some_ref不克隆的情况下执行。

但是请记住,推送提交链和更新远程引用是两个不同的操作,您可能对前者有权限,但对后者没有权限。此外,某些引用可能是不可修改的。

于 2014-04-02T12:20:34.097 回答