I'm setting up Git with Gerrit Code Review and am looking for a way to make the necessary Git commands relatively straightforward for users who might be new to Git.
The commands I currently have for starting a new feature branch are essentially (assuming Gerrit is origin
):
git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234
This starts a new work package work1234
branched from some baseline
, and the final push creates the branch in Gerrit and sets the upstream. So .git/config
looks something like:
[branch "work1234"]
remote = origin
merge = refs/heads/work1234
Now, Gerrit wants new commits for review to be pushed to a special refspec, refs/for/work1234
for example. I can do this manually with:
git push origin work1234:refs/for/work1234
What I would like to do is find some way to set up .git/config
so that a plain git push
will push the current branch to the refspec on the remote that Gerrit requires. I have looked at the following git config
areas:
branch.<name>.*
- doesn't seem to have any specific option for setting the push refspecpush.default
- I sort of wantupstream
hereremote.<name>.push
- I triedrefs/heads/*:refs/for/*
here butgit push
always wants to push all local branches in this case, while I just want the current branch
If I can't make Git do this by itself, I'll write a small wrapper script that fully specifies the refspecs. However, it would be better if Git could push to the right place natively.
I ended up writing a new
git-submit
script:I put this script in
/usr/local/libexec/git-core/git-submit
and now there's one command to submit new code to Gerrit for review:If Gerrit is not the
origin
remote, then usegit submit <remote>
as appropriate.