David
David

Reputation: 3442

How can one dry run a git push to check whether one has write permissions to a remote?

Is there a way to dry run a git push to know whether the user has permissions to actually create a new remote branch? I'd like to be able to verify that all is good in regards to permissions for a bunch of repos where the user will attempt to create new branches before they are actually created so that I can dry run the full execution before actually doing it.

Upvotes: 43

Views: 54061

Answers (3)

jub0bs
jub0bs

Reputation: 66244

Shawn Pierce wrote the following about git push --dry-run:

A --dry-run doesn't send the commands the client would use from client to server, so the server can't tell the client if it would accept them or not. The entire --dry-run thing is client side only.

(my emphasis)

So, if there is a way to check whether one has write permissions to a remote, git push --dry-run is definitely not it.


Clarification by @RobArthan: --dry-run is read-only at the remote: it checks whether the remote has changes that you don't have locally but doesn't send any updates to the the remote.

Upvotes: 56

Juan Lanus
Juan Lanus

Reputation: 2344

In the git push docs @ https://git-scm.com/docs/git-push --dry-run apears as an option:

git push [--all | --mirror | --tags] [--follow-tags] 
[--atomic] [-n | --dry-run ] ... (more flags)

It usually means that the commands are handled as usual by the server, except that the data is not modified, that is, nothing is changed.
It is useful for testing critical commands, because the output logged by the server is (almost) equal to that of a "wet" run.

Upvotes: 0

David
David

Reputation: 3442

Posting as an answer on the test I did where I don't think it works in my scenario. I'm creating a branch form another one without further changes

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

and it passed even though I have zero push permissions on this server/repo combo

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

Pushing without dry-run hits the error condition I was expecting

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'

Upvotes: 9

Related Questions