Executive summary
The public git repositories served up on
gitweb
are maintained by a simple script, called
git-mirror.rb
. This script pulls all heads matching certain patterns from the internal repository. By default, branches fitting the following criteria will be mirrored:
-
the master branch (
master
), -
standard nightly build tags, of the form
YYYY-M[M]-D[D][_X*]
, -
branches whose names end with
-publicbranch
, -
nightly build tags that end with
-publicbranch
and a build date, - release tags, and
-
explicitly whitelisted branches (currently
V7_5-dcloud-branch
andV7_1-procd_osg-branch
)
Frequently-asked questions
Where is all of this stuff?
See
pinguino:/scratch.2/git
for the scripts and the gitweb installation.
How often does this thing run? The old shell-script version ran once every twenty minutes as a cron job. The new Ruby version pulls all matching branches, sleeps for thirty seconds, and then runs itself again; it uses cron essentially as a watchdog. (That is, at most one mirror job targeting a given destination repository will run at a time.)
When should I expect to see my changes to a mirrored branch reflected in the public repository?
A pull shouldn't take more than five minutes, so the worst-case scenario for the new mirror script is probably under ten minutes. (The real worst-case scenario involves waiting for the cron job to restart
git-mirror.rb
, but your average wait time in that case should still be under fifteen minutes.)
How can I tell if my (sensitive) branch will be mirrored to the public repository?
You can run
git-mirror.rb
yourself on your personal repo with the
--dry-run
option, and it will show you the list of branches and tags it would have pushed, given the default options.
How can I tell if my (non-sensitive) branch will be mirrored to the public repository? Push it to the main internal repo and wait for at most fifteen minutes.
How can I recognize an additional set of branch or tag names to be mirrored to the public repository?
The first question to ask yourself is "do I really need to do this?" Unless you're dealing with something inflexible that expects a certain kind of branch or tag name, it's better to use a name that already fits one of the existing patterns. However, it's easy to make the script recognize additional patterns: simply specify the additional pattern as a command-line argument to
git-mirror.rb
in the crontab entry: use
-p REGEX
to specify that head names matching
REGEX
should be pushed or
-w NAME
to add
NAME
to the name whitelist.
What else can I do with this script?
Glad you asked! Run
git-mirror.rb --help
for more details.