2015-10-16 58 views
-1

我創建鏡像回購工作空間是這樣的:如何更新鏡像回購工作區?

repo init -u $url -b $branch -m $manifest --mirror 
repo sync 

我想更新使用不同的清單或更新的清單,然後重新同步到下拉任何新的或丟失的變化鏡子。如果我嘗試運行相同的init命令,它抱怨:

fatal: --mirror is only supported when initializing a new workspace. 
Either delete the .repo folder in this workspace, or initialize in another location. 

我想,我可以手動內.repo/manifests取出,然後更新符號鏈接,.repo/manifest.xml。如果可能的話,我想使用回購工具。

或者我可以刪除整個.repo目錄,然後再次運行init命令。我避免這個,因爲不幸的是我的清單文件是在一個12GB的存儲庫中。因此,重新克隆非常耗時。

回答

0

我最終放棄了這個想法。相反,我創建了一個本地包含清單的廢棄git倉庫。然後我從那裏開始。下面的shell函數將創建臨時清單回購,創建/更新鏡像,然後創建一個可用於構建的工作回購。

功能參數

    • /路徑/到/鏡
  • URL

    • /路徑/到/臨時/ manifests_repo
  • 分支

    • 分支機構名稱中使用。
      這不是嚴格必要的,但它可以很容易地標記您的構建目錄。我使用與當前manifest.xml相對應的主repo中的散列。然後,我可以很容易地看到哪些修改一個build目錄是基於:從當前目錄
  • build_dir $ repo info Manifest ... Manifest merge branch: refs/heads/BRANCH_NAME

  • 清單

    • 相對/路徑/到/ manifest_file

      • /path/to/new_build_directory

    其原因創建鏡是節省時間取作爲該代碼被設計用於自動構建服務器。請注意,構建目錄會從鏡像中進行淺層克隆,甚至可以從本地包中獲取Google的回購工具副本,以便進行脫機構建。同步步驟使用選項僅提取清單所需的變更集,並排除其他分支和提交。

    function pushd_quiet() { 
        pushd "[email protected]" >/dev/null 
    } 
    
    function popd_quiet() { 
        popd "[email protected]" >/dev/null 
    } 
    
    function build_android_os_update_mirror() { 
        local mirror="$1" 
        local url="$2" 
        local branch="$3" 
        local manifest="$4" 
    
        # Create a temporary manifest repo 
        rm -rf "${url}" 
        mkdir -p "${url}" 
        cp -rf "${manifest}" "${url}" 
        pushd_quiet "${url}" 
        { 
         git init 
         git add . 
         git commit -m $branch 
         git branch -m $branch 
         popd_quiet 
        } 
    
        # Update mirror 
        mkdir -p $mirror 
        pushd_quiet $mirror 
        { 
         rm -rf .repo 
         repo init -u $url -b $branch -m $(basename $manifest) --mirror \ 
          --repo-url ${BUILD_HOME}/tools/git-repo-clone.bundle 
         repo sync -c --optimized-fetch -j 16 
         popd_quiet 
        } 
    } 
    
    function build_android_os_create_build_tree() { 
        local build_dir="$1" 
        local mirror="$2" 
        local url="$3" 
        local branch="$4" 
        local manifest="$5" 
    
        rm -rf $build_dir 
        mkdir -p $build_dir 
        pushd_quiet $build_dir 
        { 
         repo init -u $url -b $branch -m $(basename $manifest) --reference=$mirror --depth=1 \ 
          --repo-url ${BUILD_HOME}/tools/git-repo-clone.bundle 
         repo sync -d -c --optimized-fetch -j 16 
         popd_quiet 
        } 
    }