如何进行Git push干运行以检查是否具有对远程的写权限?

36

有没有办法模拟运行 git push 来知道用户是否有权限实际创建新的远程分支?我想要能够在实际创建新分支之前验证用户对一堆存储库的权限是否正常,以便我可以在实际执行之前进行全面的试运行。


1
请查看关于此问题的这个问题这个答案 - Anshul Goyal
同样的问题,更新的答案:https://dev59.com/B3A65IYBdhLWcg3wyRyk#29801749 - Sandra
一个仅包含 Github 链接的回答:https://dev59.com/QGEh5IYBdhLWcg3wGwKO#65683358 - Hawkeye Parker
3个回答

46
Shawn Pierce在wrote中提到了关于git push --dry-run的以下内容:

--dry-run不会将客户端将要发送到服务器的命令发送出去,因此服务器无法告知客户端是否接受这些命令。整个--dry-run的过程在远程端是只读的:它检查远程端是否有你本地没有的更改,但不会向远程端发送任何更新。

(我强调)

因此,如果想要检查自己是否有写入远程权限的方法,git push --dry-run绝对不是其中之一。


6
只是一条评论,以防其他人像我一样被上面的内容稍微误导了一下。git push --dry-run除了实际发送更新之外,几乎可以完成所有操作,特别是它会检查远程是否有您本地没有的更改(正如我刚刚通过实验确认的那样)。因此,说它仅是客户端操作有点误导人,它确实访问远程,但不尝试更新它。 - Rob Arthan
@RobArthan 感谢您的评论。请随意更新答案,并附上相关文档的链接。 - undefined

7

在我进行的测试中,我认为这种方法在我的情况下不起作用。我正在从另一个分支创建一个分支,但没有进行进一步的更改。

git clone ....
git checkout master
git branch -f test master
git push --dry-run origin test

尽管我在此服务器/存储库组合上没有任何推送权限,但它仍然通过了。

To ssh://<server>/repo
 * [new branch]      test -> test

推送时未进行试运行会触发我预期的错误条件。
git push origin test
Total 0 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done    
To ssh://<server>/repo
 ! [remote rejected] test -> test (can not create new references)
error: failed to push some refs to 'ssh://<server>/repo'

0
在关于git push的文档https://git-scm.com/docs/git-push中,--dry-run出现作为一个选项:
git push [--all | --mirror | --tags] [--follow-tags] 
[--atomic] [-n | --dry-run ] ... (more flags)

通常意味着命令在服务器上像往常一样处理,除了数据没有被修改,也就是说,没有改变任何东西。
对于测试关键命令非常有用,因为服务器记录的输出与“湿”运行的输出(几乎)相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接