将包含所有分支和完整历史的Git存储库从Bitbucket移动到GitHub的最佳方法是什么?
是否有我必须使用的脚本或命令列表?
将包含所有分支和完整历史的Git存储库从Bitbucket移动到GitHub的最佳方法是什么?
是否有我必须使用的脚本或命令列表?
当前回答
我有一个相反的用例,从GitHub导入一个现有的存储库到Bitbucket。
Bitbucket也提供了一个导入工具。惟一必要的步骤是将URL添加到存储库。
它看起来是这样的:
其他回答
我有一个相反的用例,从GitHub导入一个现有的存储库到Bitbucket。
Bitbucket也提供了一个导入工具。惟一必要的步骤是将URL添加到存储库。
它看起来是这样的:
你可以参考GitHub页面“复制存储库”
它使用:
Git克隆——镜像:克隆每个引用(提交,标签,分支) Git push—mirror:用于推送所有内容
这将给予:
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
正如L S在评论中指出的那样:
使用MarMass描述的GitHub导入代码功能更容易。 参见https://github.com/new/import 除非…您的回购包括一个大文件:问题是,导入工具将失败,没有一个明确的错误消息。只有GitHub支持才能诊断出发生了什么。
如果你想要将本地Git存储库移动到另一个上游,你也可以这样做:
获取当前远程URL:
git remote get-url origin
将显示如下内容: https://bitbucket.com/git/myrepo
设置新的远程存储库。
git remote set-url origin git@github.com:folder/myrepo.git
现在推送当前(开发)分支的内容:
Git push -set-upstream源码开发
现在,您在新的远程中拥有了分支的完整副本。
可选地,返回到这个本地文件夹的原始git-remote:
git remote set-url origin https://bitbucket.com/git/myrepo
它的好处是,你现在可以从GitHub的另一个文件夹中获得新的Git存储库,这样你就有两个本地文件夹都指向不同的远程,以前的(Bitbucket)和新的都可用。
我做了下面的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
Se移动存储库从Bitbucket到GitHub。
这帮助我从一个Git提供者切换到另一个提供者。最后,所有提交都在目标Git存储库中。简单明了。
Git远程重命名原点bitbucket git远程添加origin https://github.com/edwardaux/Pipelines.git Git push origin master 一旦我很高兴在GitHub上的推送成功了,我就可以了 通过以下命令删除旧的远程: Git远程rm bitbucket