木魚ブログ

@sainoky

Repoを使わずGerritにuploadする

基本的な方法

refs/for/branchnameというおまじないref *1 にpushすればrepo uploadしたとき同様レビューにあげることができる。

例えばgit.example.comというGerritサーバにホストされているkernel/commonプロジェクトのexブランチにあげたい場合は

$ git push ssh://sainoky@git.example.com:29418/kernel/common HEAD:refs/for/ex

ショートカット(1)

特定のGerritサーバによくgit pushする場合は、~/.ssh/configに設定を書いておくと少し楽になる。

$ cat ~/.ssh/config
...
Host rv
  Hostname git.example.com
  Port 29418
  User sainoky
$ git push rv:kernel/common HEAD:refs/for/ex

ショートカット(2)

さらにreviewerも同時に指定したい場合はgit receive-packを利用して

$ git push --receive-pack='git receive-pack --reviewer=a@a.com' rv:kernel/common HEAD:refs/for/ex

同じプロジェクト/ブランチ/reviewerでgit pushする機会が多いならこれらも適宜ショートカットしたい。

$ cat .git/config
...
[remote "rv-ex"]
  url = rv:kernel/common
  receivepack = git receive-pack --reviewer=a@a.com
  push = HEAD:refs/for/ex
$ git push rv-ex

参考: Gerrit - git push

*1:このrefは実際には存在しない。Gerritは独自のSSH/Gitスタックをもっていて、これがGit clientに対してはあたかもrefs/for/branchnameが存在しているかのように振る舞う。 参考: Gerrit - Gritty Details