#!/usr/bin/perl use warnings; use strict; # Remember that you must ensure the obj database is shared - either symlink it # or setup alternates! #my $remoteurl = 'git://git.kernel.org/pub/scm/git/git.git'; #my %config = ( # '/pub/scm/git/git.git' => { # 'next' => { # '/home/xpasky/q/gg' => 'origin' # }, # 'master' => { # '/home/xpasky/q/gg' => 'origin2', # '/home/xpasky/q/gg2' => 'origin' # } # }, # '/pub/scm/cogito/cogito-doc.git' => { # master => { # '/home/xpasky/q/gg2' => 'origin2' # } # } #); my $remoteurl = 'puturlofremotehosthere'; my %config = ( 'remoterepo1' => { branch1 => { 'localrepo1' => 'origin' }, branch2 => { 'localrepo1' => 'origin2', 'localrepo2' => 'origin' } }, 'remoterepo2' => { master => { 'localrepo2' => 'origin2' } } ); my @args = ($remoteurl); foreach my $repo (keys %config) { push (@args, '--repo='.$repo); foreach my $branch (keys %{$config{$repo}}) { push (@args, $branch); } } open (F, '-|', 'git-fetch-pack', @args) or die "$!"; while () { chomp; split / /, $_; my ($sha, $ref, $repo) = @_; $ref =~ s#^refs/heads/##; foreach my $lrepo (keys %{$config{$repo}->{$ref}}) { system("GIT_DIR=$lrepo git-update-ref $config{$repo}->{$ref}->{$lrepo} $sha"); } } close (F);