2016-02-05 79 views
2

我試圖使用1.0版本的Bitbucket API的previously managed從gitolite到bitbucket的腳本遷移

我需要從Gitolite遷移到Bitbucket,並且遇到與Bitbucket API v2.0有關的問題。

這裏是我的腳本代碼:

#!/bin/bash 

# Usage: ./bitbucket-migrate.sh repos.txt 
# 
# repos.txt should have one repository per line. 

echo "Reading $1" 

while read line 
do 
    repo=$line 
    echo "###" 
    echo "Cloning a bare copy of $repo" 
    git clone --bare [email protected]:$repo 

    echo "Waiting for clone completion" 
    sleep 45; 
    cd $repo.git 

    echo "Creating repo in Bitbucket" 
    curl -X POST -v -u [email protected]: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 [email protected]: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 < $1 

exit 

此時腳本成功創建一個空的回購協議,而是試圖鏡子推到位桶時失敗。

爲了避免副本花費一段時間,我投入了幾次延長的睡眠,但我不相信它們會以這種方式產生效果。

這裏是收到錯誤回:

$ git push --mirror [email protected]: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調用?那個電話會是什麼樣子?我有點迷失在這裏。

謝謝!

回答

2

我要回答我自己的問題! [主見諒]

我做了沒創建存儲庫的API請求,但是JSON休息,並沒有看我傳遞的參數。

由於這個原因,到位桶創建回購其默認hg而不是git這導致了我在試圖將鏡像推向回購時看到的錯誤。

我最終手動刪除了使用先前請求創建的第一個回購,並在Bitbucket UI中手動重新創建它作爲git回購,它將我的賬戶默認設置爲git(因爲它自動默認爲最後使用的回購類型)。

一旦完成這一步,我能夠推 - 使用--mirror到存儲庫就好了。後續運行的腳本爲我工作,因爲它創建了默認(現在設置爲git)的回購並能夠正確推送。

+0

如果沒有更好的答案,那麼自學者就是這樣。 [http://stackoverflow.com/help/badges/14/self-learner] –