Comment déplacer le repository git avec toutes les twigs de bitbucket à github?

Quelle est la meilleure façon de déplacer un repository git avec toutes les twigs et l’historique complet de bitbucket à github? Existe-t-il un script ou une liste de commandes que je dois utiliser?

Vous pouvez vous référer à la page GitHub ” Dupliquer un référentiel ”

Il utilise:

  • git clone --mirror : pour cloner toutes les références (commits, tags, twigs)
  • git push --mirror : pour tout pousser

Cela donnerait:

 git clone --mirror https://bitbucket.org/exampleuser/repository-to-mirror.git # Make a bare mirrored clone of the repository cd repository-to-mirror.git git remote set-url --push origin https://github.com/exampleuser/mirrored # Set the push location to your mirror git push --mirror 

Comme noté dans le commentaire de LS :

  • il est plus facile d’utiliser la fonctionnalité de Import Code de GitHub décrite par MarMass .
    Voir https://github.com/new/import
  • Sauf si votre repository inclut un fichier volumineux: le problème est que l’outil d’importation échouera sans un message d’erreur clair. Seul le support GitHub pourrait diagnostiquer ce qui s’est passé.

C’est très simple.

Créez un nouveau repository vide dans GitHub (sans readme ni licesne, vous pouvez les append auparavant) et l’écran suivant affichera

À l’intérieur de l’option de code d’importation , vous collez le référentiel de votre URL bitbucket et voilà !!

Cliquez dans le code d'importation

Si vous ne trouvez pas le bouton “Importer le code” sur github, vous pouvez:

  1. ouvrez directement Github Importer et entrez l’ url . Cela ressemblera à: Capture d'écran de l'importateur de github
  2. donnez-lui un nom (ou importera automatiquement le nom)
  3. sélectionnez repo Public ou Private
  4. Cliquez sur Begin Import

MISE À JOUR: Github a récemment annoncé la possibilité d’ importer des référentiels avec des fichiers volumineux

http://www.blackdogfoundry.com/blog/moving-repository-from-bitbucket-to-github/

Cela m’a aidé à passer d’un fournisseur à un autre. A la fin, tous les commits étaient dans la destination git. Simple et simple.

 git remote rename origin bitbucket git remote add origin https://github.com/edwardaux/Pipelines.git git push origin master 

Une fois que je suis content que le push ait réussi avec GitHub, je peux supprimer l’ancienne télécommande en émettant:

 git remote rm bitbucket 

J’ai eu le cas d’utilisation inverse de l’importation d’un référentiel existant de github vers bitbucket.

Bitbucket propose également un outil d’importation . La seule étape nécessaire consiste à append une URL au référentiel.

Ça ressemble à:

Capture d'écran de l'outil d'importation bitbucket

Je me rends compte que c’est une vieille question. Je l’ai trouvé il y a plusieurs mois alors que j’essayais de faire la même chose et j’étais déçu par les réponses données. Elles semblaient toutes concerner l’importation de Bitbucket vers GitHub un référentiel à la fois, soit via des commandes à la carte, soit via l’importateur GitHub.

J’ai saisi le code d’un projet GitHub appelé gitter et l’ ai modifié pour répondre à mes besoins.

Vous pouvez fourrer le gros ou prendre le code ici:

 #!/usr/bin/env ruby require 'fileutils' # Originally -- Dave Deriso -- deriso@gmail.com # Consortingbutor -- G. Richard Bellamy -- rbellamy@terradatum.com # If you consortingbute, put your name here! # To get your team ID: # 1. Go to your GitHub profile, select 'Personal Access Tokens', and create an Access token # 2. curl -H "Authorization: token " https://api.github.com/orgs//teams # 3. Find the team name, and grabulate the Team ID # 4. PROFIT! #---------------------------------------------------------------------- #your particulars @access_token = '' @team_id = '' @org = '' #---------------------------------------------------------------------- #the verison of this app @version = "0.2" #---------------------------------------------------------------------- #some global params @create = false @add = false @migrate = false @debug = false @done = false @error = false #---------------------------------------------------------------------- #fancy schmancy color scheme class Ssortingng; def c(cc); "\e[#{cc}m#{self}\e[0m" end end #200.to_i.times{ |i| print i.to_s.c(i) + " " }; puts @sep = "-".c(90)*95 @sep_pref = ".".c(90)*95 @sep_thick = "+".c(90)*95 #---------------------------------------------------------------------- # greetings def hello puts @sep puts "BitBucket to GitHub migrator -- v.#{@version}".c(95) #puts @sep_thick end def goodbye puts @sep puts "done!".c(95) puts @sep exit end def puts_title(text) puts @sep, "#{text}".c(36), @sep end #---------------------------------------------------------------------- # helper methods def get_options require 'optparse' n_options = 0 show_options = false OptionParser.new do |opts| opts.banner = @sep +"\nUsage: gitter [options]\n".c(36) opts.version = @version opts.on('-n', '--name [name]', Ssortingng, 'Set the name of the new repo') { |value| @repo_name = value; n_options+=1 } opts.on('-c', '--create', Ssortingng, 'Create new repo') { @create = true; n_options+=1 } opts.on('-m', '--migrate', Ssortingng, 'Migrate the repo') { @migrate = true; n_options+=1 } opts.on('-a', '--add', Ssortingng, 'Add repo to team') { @add = true; n_options+=1 } opts.on('-l', '--language [language]', Ssortingng, 'Set language of the new repo') { |value| @language = value.ssortingp.downcase; n_options+=1 } opts.on('-d', '--debug', 'Print commands for inspection, doesn\'t actually run them') { @debug = true; n_options+=1 } opts.on_tail('-h', '--help', 'Prints this little guide') { show_options = true; n_options+=1 } @opts = opts end.parse! if show_options || n_options == 0 puts @opts puts "\nExamples:".c(36) puts 'create new repo: ' + "\t\tgitter -c -l javascript -n node_app".c(93) puts 'migrate existing to GitHub: ' + "\tgitter -m -n node_app".c(93) puts 'create repo and migrate to it: ' + "\tgitter -c -m -l javascript -n node_app".c(93) puts 'create repo, migrate to it, and add it to a team: ' + "\tgitter -c -m -a -l javascript -n node_app".c(93) puts "\nNotes:".c(36) puts "Access Token for repo is #{@access_token} - change this on line 13" puts "Team ID for repo is #{@team_id} - change this on line 14" puts "Organization for repo is #{@org} - change this on line 15" puts 'The assumption is that the person running the script has SSH access to BitBucket,' puts 'and GitHub, and that if the current directory contains a directory with the same' puts 'name as the repo to migrated, it will deleted and recreated, or created if it' puts 'doesn\'t exist - the repo to migrate is mirrored locally, and then created on' puts 'GitHub and pushed from that local clone.' puts 'New repos are private by default' puts "Doesn\'t like symbols for language (ex. use \'c\' instead of \'c++\')" puts @sep exit end end #---------------------------------------------------------------------- # git helper methods def gitter_create(repo) if @language %q[curl https://api.github.com/orgs/] + @org + %q[/repos -H "Authorization: token ] + @access_token + %q[" -d '{"name":"] + repo + %q[","private":true,"language":"] + @language + %q["}'] else %q[curl https://api.github.com/orgs/] + @org + %q[/repos -H "Authorization: token ] + @access_token + %q[" -d '{"name":"] + repo + %q[","private":true}'] end end def gitter_add(repo) if @language %q[curl https://api.github.com/teams/] + @team_id + %q[/repos/] + @org + %q[/] + repo + %q[ -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ] + @access_token + %q[" -d '{"permission":"pull","language":"] + @language + %q["}'] else %q[curl https://api.github.com/teams/] + @team_id + %q[/repos/] + @org + %q[/] + repo + %q[ -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ] + @access_token + %q[" -d '{"permission":"pull"}'] end end def git_clone_mirror(bitbucket_origin, path) "git clone --mirror #{bitbucket_origin}" end def git_push_mirror(github_origin, path) "(cd './#{path}' && git push --mirror #{github_origin} && cd ..)" end def show_pwd if @debug Dir.getwd() end end def git_list_origin(path) "(cd './#{path}' && git config remote.origin.url && cd ..)" end # error checks def has_repo File.exist?('.git') end def has_repo_or_error(show_error) @repo_exists = has_repo if !@repo_exists puts 'Error: no .git folder in current directory'.c(91) if show_error @error = true end "has repo: #{@repo_exists}" end def has_repo_name_or_error(show_error) @repo_name_exists = !(defined?(@repo_name)).nil? if !@repo_name_exists puts 'Error: repo name missing (-n your_name_here)'.c(91) if show_error @error = true end end #---------------------------------------------------------------------- # main methods def run(commands) if @debug commands.each { |x| puts(x) } else commands.each { |x| system(x) } end end def set_globals puts_title 'Parameters' @git_bitbucket_origin = "git@bitbucket.org:#{@org}/#{@repo_name}.git" @git_github_origin = "git@github.com:#{@org}/#{@repo_name}.git" puts 'debug: ' + @debug.to_s.c(93) puts 'working in: ' + Dir.pwd.c(93) puts 'create: ' + @create.to_s.c(93) puts 'migrate: ' + @migrate.to_s.c(93) puts 'add: ' + @add.to_s.c(93) puts 'language: ' + @language.to_s.c(93) puts 'repo name: '+ @repo_name.to_s.c(93) puts 'bitbucket: ' + @git_bitbucket_origin.to_s.c(93) puts 'github: ' + @git_github_origin.to_s.c(93) puts 'team_id: ' + @team_id.to_s.c(93) puts 'org: ' + @org.to_s.c(93) end def create_repo puts_title 'Creating' #error checks has_repo_name_or_error(true) goodbye if @error puts @sep commands = [ gitter_create(@repo_name) ] run commands end def add_repo puts_title 'Adding repo to team' #error checks has_repo_name_or_error(true) goodbye if @error puts @sep commands = [ gitter_add(@repo_name) ] run commands end def migrate_repo puts_title "Migrating Repo to #{@repo_provider}" #error checks has_repo_name_or_error(true) goodbye if @error if Dir.exists?("#{@repo_name}.git") puts "#{@repo_name} already exists... recursively deleting." FileUtils.rm_r("#{@repo_name}.git") end path = "#{@repo_name}.git" commands = [ git_clone_mirror(@git_bitbucket_origin, path), git_list_origin(path), git_push_mirror(@git_github_origin, path) ] run commands end #---------------------------------------------------------------------- #sequence control hello get_options #do stuff set_globals create_repo if @create migrate_repo if @migrate add_repo if @add #peace out goodbye 

Ensuite, pour utiliser le script:

 # create a list of repos foo bar baz # execute the script, iterating over your list while read p; do ./bitbucket-to-github.rb -a -n $p; done 

Il y a le Importer un repository avec GitHub Importer

Si vous avez un projet hébergé sur un autre système de contrôle de version comme Mercurial, vous pouvez l’importer automatiquement dans GitHub à l’aide de l’outil GitHub Importer.

  1. Dans le coin supérieur droit d’une page, cliquez sur, puis sur Importer un référentiel.
  2. Sous “URL de clone de votre ancien référentiel”, tapez l’URL du projet que vous souhaitez importer.
  3. Choisissez votre compte d’utilisateur ou une organisation pour posséder le référentiel, puis tapez un nom pour le référentiel sur GitHub.
  4. Indiquez si le nouveau référentiel doit être public ou privé.
    • Les référentiels publics sont visibles par tous les utilisateurs de GitHub. Vous pouvez donc bénéficier de la communauté de collaboration de GitHub.
    • Boutons radio de référentiel public ou privé Les référentiels privés ne sont disponibles que pour le propriétaire du référentiel, ainsi que pour les collaborateurs avec lesquels vous choisissez de partager.
  5. Vérifiez les informations que vous avez entrées, puis cliquez sur Commencer l’importation.

Vous recevrez un courrier électronique lorsque le référentiel aura été complètement importé.

  1. https://help.github.com/categories/importing-your-projects-to-github
  2. https://help.github.com/articles/importing-a-repository-with-github-importer/

Manière la plus simple

git remote renommer origine repo_bitbucket

git remote append l’origine https://github.com/abc/repo.git

git push origine master

Une fois que la poussée vers GitHub est un succès, supprimez l’ancienne télécommande par

git remote rm repo_bitbucket