将包含所有分支和完整历史的Git存储库从Bitbucket移动到GitHub的最佳方法是什么?

是否有我必须使用的脚本或命令列表?


当前回答

有导入一个存储库与GitHub导入器

如果你有一个项目托管在另一个版本控制系统上,如Mercurial,你可以使用GitHub Importer工具自动将它导入到GitHub。

在任意页面的右上角单击,然后单击“导入存储库”。 在"Your old repository's clone URL"下,输入你想要导入的项目的URL。 选择您的用户帐户或拥有存储库的组织,然后在GitHub上键入存储库的名称。 指定新的存储库应该是公共的还是私有的。

公共存储库对GitHub上的任何用户都是可见的,因此您可以从GitHub的协作社区中受益。 公共或私有存储库单选按钮私有存储库仅对存储库所有者以及您选择与之共享的任何合作者可用。

检查您输入的信息,然后单击开始导入。

当存储库完全导入后,您将收到一封电子邮件。

将项目导入GitHub 使用GitHub Importer导入存储库

其他回答

最简单的方法:

git remote rename origin repo_bitbucket

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

git push origin master

一旦推送到GitHub成功,通过运行以下命令删除旧的远程:

git remote rm repo_bitbucket

我有一个相反的用例,从GitHub导入一个现有的存储库到Bitbucket。

Bitbucket也提供了一个导入工具。惟一必要的步骤是将URL添加到存储库。

它看起来是这样的:

我做了下面的Bash脚本,以克隆我所有的Bitbucket(用户)存储库到GitHub作为私有存储库。


要求:

jq(命令行JSON处理器)| macOS: brew install jq

步骤:

转到个人访问令牌并创建一个访问令牌。我们只需要“回购”范围。 将move_me.sh脚本保存在工作文件夹中,并根据需要编辑该文件。 别忘了chmod 755 快跑!。/ move_me.sh 享受你节省下来的时间吧。


注:

它会在脚本所在的目录(你的工作目录)中克隆Bitbucket存储库。 这个脚本不会删除你的Bitbucket存储库。


需要转移到GitHub上的公共存储库?

找到并更改下面的“private”:true为“private”:false。

移动组织的存储库?

请查看开发人员指南。还需要几次编辑。


快乐的运动。

#!/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

如果你在GitHub上找不到“导入代码”按钮,你可以:

直接打开GitHub Importer并输入URL。它看起来像: 给它一个名字(或者它会自动导入这个名字) 选择Public或Private存储库 单击“开始导入”

2016年5月,GitHub宣布能够“导入带有大文件的存储库”。

这很简单。

在GitHub中创建一个新的空存储库(没有README或许可证,您可以稍后添加它们),将显示以下屏幕。 在import code选项中,粘贴你的Bitbucket存储库的URL和voilà!!