2015-10-16 55 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 
        } 
    }