从 gitolite 到 bitbucket 的脚本迁移
Scripted migration from gitolite to bitbucket
我正在尝试的是 previously managed 使用 Bitbucket 的 1.0 版本 API。
我需要从 Gitolite 迁移到 Bitbucket,我遇到了 Bitbucket v2.0 的问题 API。
这是我的脚本代码:
#!/bin/bash
# Usage: ./bitbucket-migrate.sh repos.txt
#
# repos.txt should have one repository per line.
echo "Reading "
while read line
do
repo=$line
echo "###"
echo "Cloning a bare copy of $repo"
git clone --bare git@git.company.com:$repo
echo "Waiting for clone completion"
sleep 45;
cd $repo.git
echo "Creating repo in Bitbucket"
curl -X POST -v -u username@company.com:password -H "Content-Type: application/json" \ https://api.bitbucket.org/2.0/repositories/teamname/$repo \ -d '{"scm": "git", "is_private": "true", "fork_policy": "no_public_forks"}'
echo "Pushing local mirror to bitbucket"
git push --mirror git@bitbucket.org:teamname/$repo.git
echo "Waiting for push completion"
sleep 45;
cd ..
echo "Removing $repo.git"
rm -rf "$repo.git"
echo "Waiting 10 seconds"
echo "###"
sleep 10;
done <
exit
此时脚本成功创建了一个空的 repo,但是在尝试将镜像推送到 BitBucket 时失败了。
我延长了几次睡眠,以防复制需要一段时间,但我不认为它们会以这种方式产生影响。
这是收到的错误:
$ git push --mirror git@bitbucket.org:teamname/$repo.git
conq: not a git repository.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我是否需要将镜像推送作为第二个 API 调用?那个电话会是什么样子?我有点迷路了。
谢谢!
我要回答我自己的问题! [大神见谅]
我发出的 API 请求确实创建了存储库,但是 JSON 中断并且它没有读取我传入的参数。
因此,Bitbucket 使用默认的 hg 而不是 git 创建了 repo,这导致了错误我在尝试将镜像推送到存储库时看到了。
我最终手动删除了使用较早请求创建的第一个存储库,并在 Bitbucket UI 中手动将其重新创建为 git 存储库,这将我的帐户默认设置为 git (因为它自动默认为最后使用的回购类型)。
一旦完成,我就可以使用 --mirror 推送到存储库了。该脚本的后续运行对我有用,因为它使用默认值创建了回购协议(现在设置为 git)并且能够正确推送。
我正在尝试的是 previously managed 使用 Bitbucket 的 1.0 版本 API。
我需要从 Gitolite 迁移到 Bitbucket,我遇到了 Bitbucket v2.0 的问题 API。
这是我的脚本代码:
#!/bin/bash
# Usage: ./bitbucket-migrate.sh repos.txt
#
# repos.txt should have one repository per line.
echo "Reading "
while read line
do
repo=$line
echo "###"
echo "Cloning a bare copy of $repo"
git clone --bare git@git.company.com:$repo
echo "Waiting for clone completion"
sleep 45;
cd $repo.git
echo "Creating repo in Bitbucket"
curl -X POST -v -u username@company.com:password -H "Content-Type: application/json" \ https://api.bitbucket.org/2.0/repositories/teamname/$repo \ -d '{"scm": "git", "is_private": "true", "fork_policy": "no_public_forks"}'
echo "Pushing local mirror to bitbucket"
git push --mirror git@bitbucket.org:teamname/$repo.git
echo "Waiting for push completion"
sleep 45;
cd ..
echo "Removing $repo.git"
rm -rf "$repo.git"
echo "Waiting 10 seconds"
echo "###"
sleep 10;
done <
exit
此时脚本成功创建了一个空的 repo,但是在尝试将镜像推送到 BitBucket 时失败了。
我延长了几次睡眠,以防复制需要一段时间,但我不认为它们会以这种方式产生影响。
这是收到的错误:
$ git push --mirror git@bitbucket.org:teamname/$repo.git
conq: not a git repository.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我是否需要将镜像推送作为第二个 API 调用?那个电话会是什么样子?我有点迷路了。
谢谢!
我要回答我自己的问题! [大神见谅]
我发出的 API 请求确实创建了存储库,但是 JSON 中断并且它没有读取我传入的参数。
因此,Bitbucket 使用默认的 hg 而不是 git 创建了 repo,这导致了错误我在尝试将镜像推送到存储库时看到了。
我最终手动删除了使用较早请求创建的第一个存储库,并在 Bitbucket UI 中手动将其重新创建为 git 存储库,这将我的帐户默认设置为 git (因为它自动默认为最后使用的回购类型)。
一旦完成,我就可以使用 --mirror 推送到存储库了。该脚本的后续运行对我有用,因为它使用默认值创建了回购协议(现在设置为 git)并且能够正确推送。