Làm thế nào để di chuyển kho git với tất cả các nhánh từ bitbucket sang github?


334

Cách tốt nhất để di chuyển một kho git với tất cả các nhánh và lịch sử đầy đủ từ bitbucket sang github là gì? Có một kịch bản hoặc một danh sách các lệnh tôi phải sử dụng?


9
Github cung cấp các công cụ và tài liệu cho việc đó: help.github.com/articles/, help.github.com/articles/ mẹo
mems

Ít đến bữa tiệc nhưng đây là một kịch bản để di chuyển: gist.github.com/chinmaya-n/cff02f1277c811dables2e550f2aad9967
inblueswithu

Câu trả lời:


393

Bạn có thể tham khảo trang GitHub " Sao chép kho lưu trữ "

Nó sử dụng:

Điều đó sẽ cho:

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

Như đã lưu ý trong phần bình luận của LS :


2
Phương pháp này tạo ra một vấn đề cho tôi (không chắc nó có vấn đề gì không). Khi tôi nhân đôi repo từ bitbucket sang github thì với 5 nhánh, nó được hiển thị là "So sánh và kéo yêu cầu" trong github. Nó không được hiển thị như các nhánh trong github. Tôi có thể làm gì với nó?
Siddharth

2
Và những vấn đề và wiki thì sao?
Vladislav Rastrusny

@FractalizeR wiki chỉ là một repo khác, bạn cũng có thể sao chép ( github.com/blog/699-making-github-more-open-git-backed-wikis ). Không có cách dễ dàng để nhân rộng các vấn đề mặc dù. Bạn cần sử dụng Api (các chương trình sao lưu repo GitHub khác nhau để làm điều đó: addyosmani.com/blog/backing-up-a-github-account )
VonC

3
Điều này hoạt động nếu bạn muốn chuyển một kho lưu trữ từ Github sang Bitbucket.
simeg

1
Tôi cần sử dụng phương pháp này để sao chép repo vì nó chứa một tệp lớn (> 100MB). GH sẽ không cho phép các tệp lớn trong repos của họ. Tôi đã xóa tập tin lớn trước khi đẩy repo sang GH. Tuy nhiên, việc chặn các vấn đề khác, sử dụng tính năng " Nhập kho " của GH là lựa chọn đúng 95% thời gian, như được mô tả trong câu trả lời khác . Tuy nhiên, nếu thất bại, nó không cung cấp các thông báo lỗi hữu ích và bạn phải liên hệ với bộ phận hỗ trợ của GH. Đó là hỗ trợ GH đã thông báo cho tôi về việc hạn chế kích thước tệp.
LS

411

Nó rất đơn giản.

Tạo kho lưu trữ trống mới trong GitHub (không có readme hoặc licesne, bạn có thể thêm chúng trước) và màn hình sau sẽ hiển thị

Bên trong để nhập tùy chọn mã, bạn dán repo và voilà URL bitbucket của bạn !!

Nhấp vào mã nhập


12
Bạn đang thực sự trả lời câu hỏi ở đây, vì câu trả lời được chấp nhận chỉ hiển thị một phương pháp liên quan đến Git chung. Câu trả lời của bạn đơn giản hơn!
Emile Bergeron

6
Câu trả lời này là tốt miễn là bạn là người tạo ra kho lưu trữ và nó là trần. Nếu ai đó đã tạo kho lưu trữ cho bạn (như quản trị viên của việc tạo chi nhánh) thì điều này không hoạt động. Câu trả lời được chấp nhận là cách để đi trong trường hợp như vậy.
Master.Aurora

4
Dành cho bất kỳ ai khác nghĩ về việc sử dụng phương pháp này, xóa xác thực hai yếu tố của bạn trên máy chủ kho lưu trữ trước đó trước khi bạn sử dụng dịch vụ này, nếu không, bạn sẽ bị mắc kẹt trong một vòng lặp vô tận khi cố gắng xóa kho lưu trữ mới được tạo trong GitHub và cách duy nhất để thoát khỏi điều đó là thay thế /importphần cuối của URL bằng /settingscách truy cập các cài đặt và xóa nó.
Dave

1
Hãy cẩn thận - nếu bạn gặp phải sự cố, bạn sẽ không nhận được thông báo lỗi mô tả.
RobertH

Sử dụng tính năng " Nhập kho " của GH là lựa chọn đúng 95% . Tuy nhiên, nếu thất bại, nó không cung cấp các thông báo lỗi hữu ích và bạn phải liên hệ với bộ phận hỗ trợ của GH. Tôi không thể sử dụng nó cho một repo vì nó chứa một tệp lớn (> 100MB). Tôi cần sử dụng phương pháp CLI được chấp nhận , loại bỏ tệp lớn ngay trước khi đẩy repo sang GH.
LS

125

Trong trường hợp bạn không thể tìm thấy nút "Nhập mã" trên github, bạn có thể:

  1. trực tiếp mở Trình nhập Github và nhập url. Nó sẽ trông như:Ảnh chụp màn hình của nhà nhập khẩu github
  2. đặt tên cho nó (hoặc nó sẽ tự động nhập tên)
  3. chọn Publichoặc Privaterepo
  4. Nhấp chuột Begin Import

CẬP NHẬT: Gần đây, Github đã công bố khả năng " Nhập kho lưu trữ với các tệp lớn "


Thật không may, điều này đã không làm việc cho nỗ lực của tôi khi chuyển từ codebasehq sang git-hub, đã đưa ra "URL này không được hỗ trợ". :(
sjmcdowall

@sjmcdowall Xin lỗi, nhưng tôi tin rằng nó nên hoạt động vì URL codebasehq trỏ đến kho lưu trữ git.
biniam

URL không còn tồn tại.
Container được mã hóa vào

@CodingContainer Tôi vừa kiểm tra và nó hoạt động. Tôi thậm chí đã cập nhật ảnh chụp màn hình ngay bây giờ.
biniam

1
Url sẽ chỉ trả về 404 nếu bạn chưa đăng nhập vào GitHub. Nếu bạn đã đăng nhập, công cụ nhập sẽ tải.
Jason Hurt

41

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

Điều này giúp tôi chuyển từ một nhà cung cấp git sang một nhà cung cấp khác. Vào cuối của nó, tất cả các cam kết là trong git đích. Đơn giản và thẳng tiến.

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

Khi tôi rất vui khi việc đẩy đã thành công với GitHub, tôi có thể xóa điều khiển từ xa cũ bằng cách phát hành:

git remote rm bitbucket

2
Vui lòng bao gồm các phần có liên quan của một liên kết trong câu trả lời của bạn vì nó có thể tự đứng vững.
k0pernikus 16/2/2015

Tôi gặp một lỗi thông báo "Lỗi: không thể đẩy som refs thành ' url.gi ' gợi ý: các bản cập nhật bị từ chối vì điều khiển từ xa chứa công việc mà bạn không có cục bộ. Điều này thường do một kho lưu trữ khác đẩy vào cùng một ref. Trước tiên, bạn có thể muốn tích hợp các thay đổi từ xa (ví dụ: kéo ...) trước khi đẩy lại. Xem ghi chú về chuyển tiếp nhanh trong git đẩy - trợ giúp để biết chi tiết.
Container được mã hóa vào

1
đây là câu trả lời duy nhất vẫn còn hoạt động vào 3/3/2019 :)
Wang-Zhao-Liu QM

13

Tôi đã có trường hợp sử dụng ngược lại khi nhập một kho lưu trữ hiện có từ github sang bitbucket.

Bitbucket cung cấp một công cụ nhập khẩu . Bước cần thiết duy nhất là thêm URL vào kho lưu trữ.

Nó có vẻ như:

Ảnh chụp màn hình của công cụ nhập bitbucket


5

Tôi nhận ra đây là một câu hỏi cũ. Tôi đã tìm thấy nó vài tháng trước khi tôi đang cố gắng làm điều tương tự, và bị choáng ngợp bởi những câu trả lời được đưa ra. Tất cả đều có vẻ như đối phó với việc nhập từ Bitbucket vào GitHub một kho lưu trữ tại một thời điểm, thông qua các lệnh được ban hành, hoặc thông qua trình nhập GitHub.

Tôi đã lấy mã từ một dự án GitHub có tên là gitter và sửa đổi nó để phù hợp với nhu cầu của tôi.

Bạn có thể ngã ba ý chính , hoặc lấy mã từ đây:

#!/usr/bin/env ruby
require 'fileutils'

# Originally  -- Dave Deriso        -- deriso@gmail.com
# Contributor -- G. Richard Bellamy -- rbellamy@terradatum.com
# If you contribute, 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 <very-long-access-token>" https://api.github.com/orgs/<org-name>/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 String; 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]', String, 'Set the name of the new repo') { |value| @repo_name = value; n_options+=1 }
    opts.on('-c', '--create', String, 'Create new repo') { @create = true; n_options+=1 }
    opts.on('-m', '--migrate', String, 'Migrate the repo') { @migrate = true; n_options+=1 }
    opts.on('-a', '--add', String, 'Add repo to team') { @add = true; n_options+=1 }
    opts.on('-l', '--language [language]', String, 'Set language of the new repo') { |value| @language = value.strip.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

Sau đó, để sử dụng tập lệnh:

# 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<repos

# good nuff

5

một Nhập kho với Trình nhập GitHub

Nếu bạn có một dự án được lưu trữ trên một hệ thống kiểm soát phiên bản khác là Mercurial, bạn có thể tự động nhập nó vào GitHub bằng công cụ Trình nhập GitHub.

  1. Ở góc trên bên phải của bất kỳ trang nào, bấm, rồi bấm Nhập kho.
  2. Trong "URL bản sao của kho lưu trữ cũ của bạn", nhập URL của dự án bạn muốn nhập.
  3. Chọn tài khoản người dùng hoặc tổ chức của bạn để sở hữu kho lưu trữ, sau đó nhập tên cho kho lưu trữ trên GitHub.
  4. Chỉ định xem kho lưu trữ mới nên công khai hay riêng tư.
    • Các kho lưu trữ công khai được hiển thị cho bất kỳ người dùng nào trên GitHub, vì vậy bạn có thể hưởng lợi từ cộng đồng hợp tác của GitHub.
    • Các nút radio kho lưu trữ công khai hoặc riêng tư Kho lưu trữ cá nhân chỉ có sẵn cho chủ sở hữu kho lưu trữ, cũng như bất kỳ cộng tác viên nào bạn chọn để chia sẻ.
  5. Xem lại thông tin bạn đã nhập, sau đó nhấp vào Bắt đầu nhập.

Bạn sẽ nhận được email khi kho lưu trữ đã được nhập hoàn toàn.

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

2

Trong trường hợp bạn muốn di chuyển kho git cục bộ của mình sang một dòng khác, bạn cũng có thể làm điều này:

để lấy url từ xa hiện tại:

nguồn gốc git từ xa git

sẽ hiển thị nội dung như: https://bitbucket.com/git/myrepo

để thiết lập kho lưu trữ từ xa mới:

git nguồn gốc set-url từ xa git@github.com: thư mục / myrepo.git

bây giờ đẩy nội dung của chi nhánh (phát triển) hiện tại:

git đẩy - nguồn gốc thượng nguồn phát triển

Bây giờ bạn có một bản sao đầy đủ của chi nhánh trong điều khiển từ xa mới.

tùy chọn trở về git-remote gốc cho thư mục cục bộ này:

git nguồn gốc set-url từ xa https://bitbucket.com/git/myrepo

Cung cấp lợi ích bây giờ bạn có thể nhận kho lưu trữ git mới của mình từ github trong một thư mục khác để bạn có hai thư mục cục bộ cả hai trỏ đến các điều khiển từ xa khác nhau, trước đó (bitbucket) và cả hai mới có sẵn.


2

Tôi đã tạo tập lệnh bash sau đây để sao chép TẤT CẢ các kho lưu trữ Bitbucket (người dùng) của tôi sang GitHub dưới dạng các kho riêng .


Yêu cầu:

  • jq (bộ xử lý JSON dòng lệnh) | Hệ điều hành Mac:brew install jq

Các bước:

  1. Tới https://github.com/settings/tokens và tạo ra một thẻ truy cập. Chúng tôi chỉ cần phạm vi "repo".

  2. Lưu move_me.shtập lệnh trong một thư mục làm việc và chỉnh sửa tập tin khi cần thiết.

  3. Đừng quên CHMOD 755

  4. Chạy! ./move_me.sh

  5. Tận hưởng thời gian bạn đã tiết kiệm.


Ghi chú:

  • Nó sẽ sao chép các kho lưu trữ BitBucket bên trong thư mục mà tập lệnh nằm trong thư mục làm việc của bạn.)

  • Tập lệnh này không xóa kho lưu trữ BitBucket của bạn.


Cần chuyển đến kho lưu trữ công khai trên GitHub?

Tìm và thay đổi "private": truethành "private": falsebên dưới.

Di chuyển kho của một tổ chức?

Hãy xem hướng dẫn dành cho nhà phát triển , đó là một vài chỉnh sửa.


Hạnh phúc di chuyển.

#!/bin/bash

BB_USERNAME=your_bitbucket_username 
BB_PASSWORD=your_bitbucket_password

GH_USERNAME=your_github_username
GH_ACCESS_TOKEN=your_github_access_token

###########################

pagelen=$(curl -s -u $BB_USERNAME:$BB_PASSWORD https://api.bitbucket.org/2.0/repositories/$BB_USERNAME | jq -r '.pagelen')

echo "Total number of pages: $pagelen"

hr () {
  printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -  
}

i=1

while [ $i -le $pagelen ]
do
  echo
  echo "* Processing Page: $i..."
  hr  
  pageval=$(curl -s -u $BB_USERNAME:$BB_PASSWORD https://api.bitbucket.org/2.0/repositories/$BB_USERNAME?page=$i)

  next=$(echo $pageval | jq -r '.next')
  slugs=($(echo $pageval | jq -r '.values[] | .slug'))
  repos=($(echo $pageval | jq -r '.values[] | .links.clone[1].href'))

  j=0
  for repo in ${repos[@]}
  do
    echo "$(($j + 1)) = ${repos[$j]}"
    slug=${slugs[$j]}
  git clone --bare $repo 
  cd "$slug.git"
  echo
  echo "* $repo cloned, now creating $slug on github..."  
  echo  

  read -r -d '' PAYLOAD <<EOP
  {
    "name": "$slug",
    "description": "$slug - moved from bitbucket",
    "homepage": "https://github.com/$slug",
    "private": true
  }
  EOP

  curl -H "Authorization: token $GH_ACCESS_TOKEN" --data "$PAYLOAD" \
      https://api.github.com/user/repos
  echo
  echo "* mirroring $repo to github..."  
  echo
  git push --mirror "git@github.com:$GH_USERNAME/$slug.git"
  j=$(( $j + 1 ))
  hr    
  cd ..
  done  
  i=$(( $i + 1 ))
done

1
Kịch bản thú vị, kết hợp với mã thông báo. Khéo léo. Nâng cao.
VonC

@VonC Cảm ơn bạn!
cenk

1

Dưới đây là các bước để di chuyển kho Git riêng:

Bước 1: Tạo kho lưu trữ Github

Đầu tiên, tạo một kho lưu trữ riêng mới trên Github.com. Điều quan trọng là giữ cho kho lưu trữ trống, ví dụ: không chọn tùy chọn Khởi tạo kho lưu trữ này bằng README khi tạo kho lưu trữ.

Bước 2: Di chuyển nội dung hiện có

Tiếp theo, chúng tôi cần điền vào kho lưu trữ Github với nội dung từ kho lưu trữ Bitbucket của chúng tôi:

  1. Kiểm tra kho lưu trữ hiện có từ Bitbucket:
    $ git clone https://USER@bitbucket.org/USER/PROJECT.git
  1. Thêm kho lưu trữ Github mới dưới dạng từ xa ngược dòng của kho lưu trữ được kiểm tra từ Bitbucket:
    $ cd PROJECT
    $ git remote add upstream https://github.com:USER/PROJECT.git
  1. Đẩy tất cả các nhánh (bên dưới: chỉ cần chính) và các thẻ vào kho lưu trữ Github:
    $ git push upstream master
    $ git push --tags upstream

Bước 3: Dọn dẹp kho cũ

Cuối cùng, chúng tôi cần đảm bảo rằng các nhà phát triển không bị nhầm lẫn bằng cách có hai kho lưu trữ cho cùng một dự án. Dưới đây là cách xóa kho lưu trữ Bitbucket:

  1. Kiểm tra kỹ xem kho lưu trữ Github có tất cả nội dung không

  2. Chuyển đến giao diện web của kho lưu trữ Bitbucket cũ

  3. Chọn tùy chọn menu Cài đặt> Xóa kho lưu trữ

  4. Thêm URL của kho lưu trữ Github mới dưới dạng URL chuyển hướng

Cùng với đó, kho lưu trữ hoàn toàn ổn định vào ngôi nhà mới của nó tại Github. Hãy để tất cả các nhà phát triển biết!


-1

Cách đơn giản nhất để làm điều đó:

git remote rename origin repo_bitbucket

git remote add origin https://github.com/abc/repo.git

git push origin master

Khi quá trình đẩy tới GitHub thành công, hãy xóa điều khiển từ xa cũ bằng cách chạy:

git remote rm repo_bitbucket
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.