如何检查对远程Git存储库的写访问权限("我可以推送吗?")

Yan*_*yer 63 git github git-remote ls-remote

我正在建立一个(有点受限)Git客户端.要设置存储库,请输入远程存储库的URL.我想检查用户是否具有对该存储库的读写访问权限.如果没有,我提出一个身份验证对话框.

我检查"读"访问git ls-remote <url>.

是否有一种类似的方法来检查'写'访问权限,而不首先克隆回购?(我知道我可以git clone <url>,然后git push --dry-run)

小智 38

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

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

  • 你没错--Github确实表现出这种行为.但是,OP要求他们的新工具可以使用类似于`git ls-remote`的东西,因此Github Web UI可能不适合他们. (18认同)
  • 有更多的git存储库而不仅仅是github存储库;) (6认同)
  • @KyleDelaney 您不需要单击编辑按钮,只需将鼠标悬停在它上面即可。它将显示“编辑此文件”或“编辑此项目的分支中的文件”,具体取决于您是否具有写入权限。 (6认同)
  • 关于GUI,如果没有访问权限,工具提示还可以指示您可以“编辑”还是“先分叉再编辑”。无论是Github还是GH Enterprise,都是如此。 (3认同)
  • 分叉一个 repo 会复制整个 repo,对吗?回购可能非常大。这似乎是一个非常繁重的操作,只是为了检查您的访问级别是什么...... (2认同)

Pie*_*erz 7

使用最新的 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
Run Code Online (Sandbox Code Playgroud)

响应将显示 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
Run Code Online (Sandbox Code Playgroud)


Jac*_*k M 7

从字面上看只是推送(没有任何改变)。即使只是尝试推送并报告没有必要,Git 也需要凭据。

设置正确的凭据后:

$ git push
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

弄乱我的 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.
Run Code Online (Sandbox Code Playgroud)


use*_*253 0

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

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

  • 是的,谁想要所有这些随机的虚拟提交?难道没有更干净的方法吗? (21认同)
  • 此方法可以在带有 ref 的工作目录中工作。有没有办法在不设置虚拟存储库并先创建提交的情况下执行此操作? (2认同)