Reputation: 3442
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
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
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
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