30

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.

jub0bs
  • 54,300
  • 24
  • 162
  • 166
David
  • 3,216
  • 2
  • 25
  • 30

3 Answers3

36

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.

jub0bs
  • 54,300
  • 24
  • 162
  • 166
7

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'
David
  • 3,216
  • 2
  • 25
  • 30
0

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 cmooands, because the aoutpu logged by the server is (almost) equal to that of a "wet" run.

Juan Lanus
  • 2,195
  • 22
  • 17