检查当前用户是否是 zsh 中 GitHub 远程的所有者

Check if current user is owner of GitHub remote in zsh

我正在尝试编写一个 git pre-push 挂钩,在推送到 origin 之前执行一些操作 如果 推送的人是回购协议的所有者。有没有办法在 bash/zsh 中检查这个?

如果用户使用 HTTPS,您可以这样做。您需要使用 authenticated user endpoint 来查找当前用户的用户 ID,例如,使用 curl,然后通过检查 curl 来查看该用户是否与存储库的所有者相同=32=].

要获得适当的凭据,您可以使用远程 URL(例如 https://github.com/git/git.git)并将其通过管道传输到 git credential fill 以查找用户名和密码,如下所示:

echo url=https://github.com/git/git.git | git credential fill

输出格式在 git-credential 手册页中定义。这些凭据也应该能够用于 API 来发出您的请求,但请注意,由于 curl 需要在命令行上传递密码,因此您会将这些凭据公开给其他任何人机器。非 shell 选项可能是更注重安全的选择。

从技术上讲,还有一些方法可以通过 SSH 确定这一点,但这些方法依赖于解析可能会发生变化的固定输出,因此,您应该假设您无法获得 SSH 远程信息。

请注意,这会告诉您当前用户,您可以对照 URL 进行检查,但它不会告诉您该用户是否对不属于他们自己的存储库具有管理权限(例如一个组织拥有的)。由于您还没有告诉我们您想用这些信息做什么,我们无法帮助您,但如果您尝试使用 API,您可以直接执行并查看是否成功与否。

由于您在这种情况下使用的是用户的凭据存储,因此您需要明确并预先告知用户您在做什么,这样用户就不会对您使用凭据感到惊讶。在用户不知情和不同意的情况下以我描述的方式使用用户的凭据是不道德的,并且可能是非法的。