The following people have commit access to the Subversion sources.
Note that this is not a full list of Subversion's authors, however --
for that, you'd need to look over the log messages to see all the
patch contributors.

If you have a question or comment, it's probably best to mail
dev@subversion.tigris.org, rather than mailing any of these people
directly.

Blanket commit access:

          jimb   Jim Blandy <jimb@red-bean.com>
       sussman   Ben Collins-Sussman <sussman@red-bean.com>
        kfogel   Karl Fogel <kfogel@red-bean.com>
        gstein   Greg Stein <gstein@gmail.com>
         brane   Branko Čibej <brane@xbc.nu>
           joe   Joe Orton <joe@manyfish.co.uk>
       ghudson   Greg Hudson <ghudson@mit.edu>
          fitz   Brian W. Fitzpatrick <fitz@red-bean.com>
        daniel   Daniel Stenberg <daniel@haxx.se>
      cmpilato   C. Michael Pilato <cmpilato@collab.net>
        philip   Philip Martin <philip.martin@wandisco.com>
   jerenkrantz   Justin Erenkrantz <justin@erenkrantz.com>
        rooneg   Garrett Rooney <rooneg@electricjellyfish.net>
         blair   Blair Zajac <blair@orcaware.com>
       striker   Sander Striker <striker@apache.org>
           dlr   Daniel Rall <dlr@finemaltcoding.com>
           mbk   Mark Benedetto King <mbk@lowlatency.com>
           jaa   Jani Averbach <jaa@iki.fi>
    julianfoad   Julian Foad <julian.foad@wandisco.com>
  jszakmeister   John Szakmeister <john@szakmeister.net>
           ehu   Erik Hülsmann <e.huelsmann@gmx.net>
        breser   Ben Reser <ben@reser.org>
          maxb   Max Bowsher <maxb1@ukf.net>
       dberlin   Daniel Berlin <dberlin@dberlin.org>
     danderson   David Anderson <david.anderson@natulte.net>
          ivan   Ivan Zhakov <chemodax@gmail.com>
        djames   David James <james@cs.toronto.edu>
        pburba   Paul Burba <pburba@collab.net>
       glasser   David Glasser <glasser@davidglasser.net>
           lgo   Lieven Govaerts <lgo@mobsol.be>
       hwright   Hyrum Wright <hyrum.wright@wandisco.com>
    vgeorgescu   Vlad Georgescu <vgeorgescu@gmail.com>
       kameshj   Kamesh Jayachandran <kamesh@collab.net>
      markphip   Mark Phippard <mphippard@collab.net>
      arfrever   Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
          stsp   Stefan Sperling <stsp@elego.de>
           kou   Kouhei Sutou <kou@cozmixng.org>
      danielsh   Daniel Shahaf <d.s@daniel.shahaf.name>
        peters   Peter Samuelson <peter@p12n.org>
      rhuijben   Bert Huijben <b.huijben@competence.biz>
      stylesen   Senthil Kumaran S <senthil@collab.net>
     steveking   Stefan Küng <tortoisesvn@gmail.com>
         neels   Neels J. Hofmeyr <neels@elego.de>
     jwhitlock   Jeremy Whitlock <jcscoobyrs@gmail.com>
       sbutler   Stephen Butler <sbutler@elego.de>

[[END ACTIVE FULL COMMITTERS.  LEAVE THIS LINE HERE; SCRIPTS LOOK FOR IT.]]

Full committers who have asked to be listed as dormant:

        bdenny   Brian Estlin <brian@implementality.com>
           epg   Eric Gillespie <epg@pretzelnet.org>
         kraai   Matt Kraai <kraai@alumni.cmu.edu>
      bcollins   Ben Collins <bcollins@debian.org>
           djh   D.J. Heap <djheap@gmail.com>
       dwhedon   David Kimdon <dwhedon@debian.org>
       jpieper   Josh Pieper <jjp@pobox.com>
         kevin   Kevin Pilch-Bisson <kevin@pilch-bisson.net>
      lundblad   Peter N. Lundblad <peter@famlundblad.se>
       malcolm   Malcolm Rowe <malcolm-svn-dev@farside.org.uk>
         naked   Nuutti Kotivuori <naked@iki.fi>
     ringstrom   Tobias Ringström <tobias@ringstrom.mine.nu>


Partial committers who have asked to be listed as dormant:

           kon   Kalle Olavi Niemitalo <kon@iki.fi>          (psvn.el)
      rassilon   Bill Tutt <bill@tutts.org> (Win32, COM, issue-1003-dev br.)
           pll   Paul lussier <p.lussier@comcast.net>        (releases)


Commit access for specific areas:

  Bindings:

       pmayweg   Patrick Mayweg <mayweg@qint.de>             (JavaHL bindings)
          rey4   Russell Yanofsky <rey4@columbia.edu>        (Swig bindings)
         clkao   Chia-liang Kao <clkao@clkao.org>            (Swig-Perl b.)
    joeswatosh   Joe Swatosh <joe.swatosh@gmail.com>         (Swig-Ruby b.)
    jrvernooij   Jelmer Vernooij <jelmer@samba.org>          (Python bindings)
          sage   Sage LaTorra <sagelt@gmail.com>             (Ctypes-Python bindings)
        rdonch   Роман Донченко <DXDragon@yandex.ru>         (Swig-Python b.)

  Packages:

           dws   David Summers <david@summersoft.fay.ar.us>  (RPMs)
       ebswift   Troy Simpson <troy@ebswift.com>             (windows-innosetup)

  Miscellaneous:

      kbohling   Kirby C. Bohling <kbohling@birddog.com>     (tools/dev)
           nsd   Nick Duffek <nick@duffek.com>               (doc)
        xsteve   Stefan Reichör <stefan@xsteve.at>           (psvn.el)
      josander   Jostein Andersen <jostein@vait.se>          (various)
      niemeyer   Gustavo Niemeyer <niemeyer@conectiva.com>   (svnperms.py)
        zbrown   Zack Brown <zbrown@tumblerings.org>         (doc)
        mprice   Michael Price <ectospheno@gmail.com>        (releases)
    jrepenning   Jack Repenning <jrepenning@collab.net>      (tools/dev)
      lonestar   Martin Maurer <martin.maurer@email.de>      (svnshow)
       shlomif   Shlomi Fish <shlomif@vipe.technion.ac.il>   (svn-push)
       mthelen   Michael W Thelen <mike@pietdepsi.com>       (doc)
  jeremybettis   Jeremy Bettis <jeremy@deadbeef.com>         (case-insensitive)
      martinto   Martin Tomes <lists@tomes.org>              (case-insensitive)
        danpat   Daniel Patterson <danpat@danpat.net>        (svn-graph.pl)
   archiecobbs   Archie Cobbs <archie@awarix.com>            (svnmerge)
  giovannibajo   Giovanni Bajo <rasky@develer.com>           (svnmerge)
        offby1   Eric Hanchrow <offby1@blarg.net>            (doc)
       nomis80   Simon Perreault <nomis80@nomis80.org>       (svn-clean)
      jlvarner   Joshua Varner <jlvarner@gmail.com>          (doc)
          nori   Kobayashi Noritada <nori1@dolphin.c.u-tokyo.ac.jp> (Ruby tools,
                                                              po: ja)
            mf   Martin Furter <mf@rola.ch>                  (svnmirror.sh
                                                          svn-backup-dumps.py)
       adejong   Arthur de Jong <arthur@ch.tudelft.nl>       (svn2cl)
      wsanchez   Wilfredo Sánchez <wsanchez@wsanchez.net>    (various contrib)
       mhagger   Michael Haggerty <mhagger@alum.mit.edu>     (svntest)
       madanus   Madan U S <madan@collab.net>                (svnmerge)
          wein   Mathias Weinert <wein@mccw.de>              (mailer)
        bhuvan   Bhuvaneswaran <bhuvan@collab.net>           (svn2feed.py,
                                                              build/hudson)
        aogier   Anthony Ogier <aogier@iorga.com>            (svn-merge-vendor.py)
      dkagedal   David Kågedal <davidk@lysator.liu.se>       (dsvn.el)
      mattiase   Mattias Engdegård <mattias@virtutech.com>   (dsvn.el)
        dustin   Dustin J. Mitchell <dustin@zmanda.com>      (svnmerge)
   rocketraman   Raman Gupta <rocketraman@fastmail.fm>       (svnmerge)
       rhansen   Richard Hansen <rhansen@bbn.com>            (svnstsw)
        larrys   Larry Shatzer, Jr. <larrys@gmail.com>       (svn-keyword-check.pl)
         nmiyo   MIYOKAWA, Nobuyoshi <n-miyo@tempus.org>     (www: ja)
       rocksun   Rock Sun <daijun@gmail.com>                 (www: zh)
       kmradke   Kevin Radke <kmradke@gmail.com>             (add-needs-lock.py)
           esr   Eric S. Raymond <esr@thyrsus.com>           (svncutter)

  Translation of message files:

       niqueco   Nicolás Lichtmaier <nick@reloco.com.ar>     (po: es)
        luebbe   Lübbe Onken <luebbe@tigris.org>             (po: de)
    jensseidel   Jens Seidel <jensseidel@users.sf.net>       (po: de)
      oyvindmo   Øyvind Møll <svn@moll.no>                   (po: nb)
      sunny256   Øyvind A. Holm <sunny@sunbase.org>          (po: nb)
        jzgoda   Jaroslaw Zgoda <jzgoda@o2.pl>               (po: pl)
      karolszk   Karol Szkudlarek <karol@mikronika.com.pl>   (po: pl)
        plasma   Wei-Hon Chen <plasma@ms9.hinet.net>         (po: zh_TW)
       jihuang   June-Yen Huang <jihuang@iis.sinica.edu.tw>  (po: zh_TW)
       marcosc   Marcos Chaves <marcos.nospam@gmail.com>     (po: pt_BR)
        pynoos   Hojin Choi <hojin.choi@gmail.com>           (po: ko)
       blueboh   Jeong Seolin <blueboh@gmail.com>            (po: ko)
     dongsheng   Dongsheng Song <songdongsheng@live.cn>      (po: zh_CN)
        hynnet   YingNing Huang <hyn@bao.hynnet.com>         (po: zh_CN)
          lark   Wang Jian <lark@linux.net.cn>               (po: zh_CN)
giorgio_valoti   Giorgio Valoti <giorgio_v@mac.com>          (po: it)
        nebiac   Federico Nebiacolombo <cint1@amsjv.it>      (po: it)
        fabien   Fabien Coelho <fabien@coelho.net>           (po: fr)
       marcelg   Marcel Gosselin <marcel.gosselin@polymtl.ca> (po: fr)

  Experimental branches:

     gthompson   Glenn A. Thompson <gthompson@cdr.net>       (pluggable-db br.)
       sigfred   Sigfred Håversen <bsdlist@mumak.com>        (svnserve-ssl br.)
        pmarek   Ph. Marek <philipp@marek.priv.at>           (meta-data-v br.)
      jpeacock   John Peacock <jpeacock@rowman.com>          (perl-bindings-
                                                              improvements br.)
    nikclayton   Nik Clayton <nik@ngo.org.uk>                (perl-bindings-
                                                              improvements br.)
       cacknin   Charles Acknin <charlesacknin@gmail.com>    (svnpatch-diff 
                                                              br.)
        holden   Holden Karau <holden@pigscanfly.ca>         (scheme-bindings br.)

  Subprojects that are complete, abandoned or have moved elsewhere:

          xela   Alexander Müller <alex@littleblue.de>       (Java JNI b.)
       yoshiki   Yoshiki Hayashi <yoshiki@xemacs.org>        (Non-SWIG Ruby b.)
        mmacek   Marko Maček <Marko.Macek@gmx.net>           (cvs2svn branch)
          mass   David Waite <mass@akuma.org>                (certs branch)
      sergeyli   Sergey A. Lipnevich <sergey@optimaltec.com> (neon-0.24 port)
      ballbach   Michael Ballbach <ballbach@rten.net>        (Old Mandrake RPM)
        morten   Morten Ludvigsen <morten@2ps.dk>            (Swig-Java b.)
      jespersm   Jesper Steen Møller <jesper@selskabet.org>  (Swig-Java b.)
        knacke   Kai Nacke <kai.nacke@redstar.de>            (Swig-Java b.)
       fmatias   Féliciano Matias <feliciano.matias@free.fr> (doc: fr)
      dimentiy   Dmitriy O. Popkov <dimentiy@dimentiy.info>  (doc: ru)
    khmarbaise   Karl Heinz Marbaise <khmarbaise@gmx.de>     (doc: de)
  gerhardoettl   Gerhard Oettl <gerhard.oettl.ml@oesoft.at>  (doc: de)
     beerfrick   Ariel Arjona <beerfrick@gmail.com>          (doc: es)
        gradha   Grzegorz A. Hankiewicz <gradha@titanium.sabren.com> (doc: es)
         ruben   Rubén Gómez <rugoli@euskalnet.net>          (doc: es)
      dbrouard   Diego Brouard <dbrouard@gmail.com>          (doc: es)
    firemeteor   Guo Rui <timmyguo@mail.ustc.edu.cn>         (issue-2843-dev
                                                              br.)


## Local Variables:
## coding:utf-8
## End:
## vim:encoding=utf8
