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

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


当前回答

我做了下面的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中创建一个新的空存储库(没有README或许可证,您可以稍后添加它们),将显示以下屏幕。 在import code选项中,粘贴你的Bitbucket存储库的URL和voilà!!

Se移动存储库从Bitbucket到GitHub。

这帮助我从一个Git提供者切换到另一个提供者。最后,所有提交都在目标Git存储库中。简单明了。

Git远程重命名原点bitbucket git远程添加origin https://github.com/edwardaux/Pipelines.git Git push origin master 一旦我很高兴在GitHub上的推送成功了,我就可以了 通过以下命令删除旧的远程: Git远程rm bitbucket

根据@MarMass的回答,如果GitHub导入器不断将你重定向到身份验证屏幕,你需要在BitBucket中创建一个应用程序密码,以便导入你的私有存储库:

去Bitbucket >个人设置>应用程序密码。 创建具有存储库读访问权限的应用程序密码。 当在GitHub导入器中提示输入您的用户名/密码时,输入您的BitBucket用户名,并将上面创建的令牌作为密码。

在设法解决身份验证问题后,我的导入也出现了以下消息:“有一个错误将提交推到GitHub.”。

这里的问题是,至少对我来说,我的GitHub帐户被设置为“阻止暴露我的电子邮件的命令行推送”,而我试图从Bitbucket导入的存储库包含来自我个人电子邮件地址的提交。在暂时禁用这个设置(GitHub >设置>电子邮件)后,我就可以去了。

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

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

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

下面是移动私有Git存储库的步骤:

步骤1:创建一个GitHub存储库

首先,在GitHub上创建一个新的私有存储库。保持存储库为空是很重要的,例如,在创建存储库时,不要勾选“使用README初始化这个存储库”选项。

步骤2:移动现有内容

接下来,我们需要用Bitbucket存储库中的内容填充GitHub存储库:

从Bitbucket中查看现有的存储库: git克隆https://USER@bitbucket.org/USER/PROJECT.git 添加新的GitHub存储库作为Bitbucket签出的存储库的上游远程: cd项目 git远程添加upstream https://github.com:USER/PROJECT.git 将所有分支(下面:只是master)和标签推到GitHub 存储库: Git推送上游master Git推——标签上游

步骤3:清理旧的存储库

最后,我们需要确保开发人员不会因为同一个项目有两个存储库而感到困惑。下面是删除Bitbucket存储库的方法:

仔细检查GitHub存储库是否包含所有内容 转到旧Bitbucket存储库的web界面 选择菜单项“设置→删除存储库” 添加新的GitHub存储库的URL作为重定向URL

这样,存储库就完全安顿在了GitHub的新家。让所有开发人员知道!