como migrar todos os repositórios do gitlab para o bitbucket

5

Minha empresa está avaliando o bitbucket como nosso VCS central. Atualmente, usamos o gitlab 7.13.4. Procuramos uma maneira automatizada de migrar todos os repositórios do gitlab para o bitbucket, mas as pesquisas ficaram vazias. Há muitos exemplos para fazer um de cada vez, mas nada para fazer todos eles em um lote. Com centenas de repos, gostaríamos de usar um processo que tenha uma boa chance de confiabilidade.

Como bônus existe uma maneira de migrar grupos e permissões automaticamente?

    
por chicks 16.02.2017 / 20:57

1 resposta

2

Você pode usar a API REST do Bit Bucket, aqui está algum Perl que eu uso para importar um repositório para o bitbucket:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use File::Basename;
my $numArgs = $#ARGV + 1;

if($numArgs < 2) {
 die "Usage: $0 [Bit Bucket Project e.g. FW, BDPE] [repo name] [-d dry run (optional)]";
}

my $bitbucketProject = lc $ARGV[0];
my $repoName = $ARGV[1];
my $dryRun = $ARGV[2];
my %moduleHash;
my $bitBucketServer = "localhost";
my $user = "admin";
my $password = "bitbucket";


print "Bit Bucket Project: $bitbucketProject\n";
print "Repository name: $repoName\n";

sub importRepo {

     my $command = sprintf("curl -u %s:%s -X POST -H \"Content-Type: application/json\" -d '{
     \"name\": \"%s\",
     \"scmId\": \"git\",
     \"forkable\": true
     \}' http://%s:7990/rest/api/1.0/projects/%s/repos", $user, $password, $repoName, $bitBucketServer, $bitbucketProject); 

    if ($dryRun) {
      print "$command\n";
    } else {
    print "Doing import\n";
        system $command;
    }
    my $bitbucketUrl = sprintf("ssh://git\@%s:7999/%s/%s.git", $bitBucketServer, lc $bitbucketProject, $repoName);   
    my $gitCommand = sprintf("cd %s; pwd;  git repack -a -d -f; git push %s --mirror", $repoName, $bitbucketUrl);
    if ($dryRun) {
      print "$gitCommand\n";
    } else {   
       print "Running git\n";
       system $gitCommand;
    }

}

importRepo();

Então você pode envolver isso com um script de shell:

#!/bin/bash

BITBUCKETPROJECT=$1

if [ $# -ne 2 ]; then
echo "Usage: $0 [Bit Bucket Project] [Path to repos]"
exit 1;
fi

echo "Bit bucket project: $BITBUCKETPROJECT"

    for f in *; do
        if [[ -d $f ]]; then
          echo $f
          ./importRepository.pl $BITBUCKETPROJECT $f 
        fi
    done

Assume que todos os seus repos foram clonados no diretório atual.

link

    
por 12.09.2017 / 07:45