如何检查对远程Git存储库的写访问(“我可以推吗?”)

如何检查对远程Git存储库的写访问(“我可以推吗?”),git,github,git-remote,ls-remote,Git,Github,Git Remote,Ls Remote,我正在构建一个(有点有限的)Git客户端。要设置存储库,请输入远程回购的URL。我想检查用户是否具有对该存储库的读写访问权限。如果没有,我将显示一个身份验证对话框 我使用git ls remote检查“读取”访问 是否有类似的方法来检查“写入”访问,而不首先克隆repo?(我知道我可以git克隆然后git推送--干运行)你可以执行git推送+ssh://host.org/path/to/repo 有些人没有克隆。但是,请参见我上面的评论如果git repo位于github中,请打开repo中的任

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

我使用git ls remote检查“读取”访问


是否有类似的方法来检查“写入”访问,而不首先克隆repo?(我知道我可以
git克隆
然后
git推送--干运行

你可以执行
git推送+ssh://host.org/path/to/repo 有些人没有克隆。但是,请参见我上面的评论

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

您正在编辑项目中没有写入权限的文件。我们已经为您创建了此项目的分支,以提交您建议的更改 到提交对此文件的更改会将其写入中的新分支 你的叉子,所以你可以发送拉请求。在这里输入代码


使用最新的GitHub API,您可以使用以下命令(您需要)检查用户名(您或其他用户),例如:

响应将显示用户名对该回购协议的权限。否则,它将报告:

“消息”:“未找到”

请注意,您应该具有对有问题的回购协议的推送访问权限,否则它将失败

{
“消息”:“必须具有推送访问权限才能查看协作者权限。”,
“文档url”:https://docs.github.com/rest/reference/repos#get-repository-permissions-for-a-user“
}

从技术上讲,要将提交推送到回购中,不需要先克隆它。但请记住,推送提交链和更新远程引用是两种不同的操作,您可能对前者有权限,但对后者没有权限。此外,某些引用可能是不可修改的。本文中提到“git push--dry run”是在克隆后检查写访问的一种方法。然而,对于我的一些遥控器,这会打开一个密码提示&无限期挂起。似乎并没有一种非交互式的方法来检查您是否具有写访问权限,即使您确实拥有repo的克隆。如果我有一个git存储库的克隆,我如何检查对它的写访问?一个非常简单的检查方法是,您是否在repo的主代码页上的README.MD的右上角看到编辑“pencil”图标(如果有一长串顶级文件/文件夹,请向下滚动到它)。显然,当你登录到Github时要这样做。这种方法可以从一个带有ref的工作目录中工作。有没有一种方法可以做到这一点,而不必先设置一个虚拟repo和创建一个提交?是的,谁想要所有这些随机的虚拟提交?难道没有更干净的方法吗?我自己还没有尝试过,但也许可以使用
--dry run
参数来测试推送访问,而无需推送真正的提交<代码>--干运行
不能用于此目的。检查这个答案以了解解释:您没有错——Github确实显示了这种行为。然而,OP要求他们的新工具可以使用类似于
git ls remote
的东西,因此Github web UI可能不适合他们。git存储库比Github存储库更多;)关于GUI,如果没有访问权限,工具提示还可以指示您是否可以“编辑”或“Fork-then-Edit”。Github Profect和GH Enterprise都是如此。分叉回购会复制整个回购,对吗?回购协议可能非常庞大。这似乎是一个相当大的操作,只是为了检查你的访问级别…@KyleDelaney你不需要点击编辑按钮,只需将鼠标悬停在上面。它将显示“编辑此文件”或“编辑此项目分支中的文件”,具体取决于您是否具有写访问权限。
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