我创建了一个镜像的repo工作区,如下所示:
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工具。
或者我可以删除整个.repo
目录,然后再次运行init命令。我正在避免这种情况,因为不幸的是我的清单文件位于12GB存储库中。因此,重新克隆是非常耗时的。
答案 0 :(得分:0)
我最终放弃了这个想法。相反,我在本地创建一个包含清单的一次性git repo。然后我从那开始。下面的shell函数将创建临时清单仓库,创建/更新镜像,然后创建一个工作仓库进行构建。
功能参数
镜
URL
分支
$ repo info Manifest
...
Manifest merge branch: refs/heads/BRANCH_NAME
清单
build_dir
创建镜像的原因是为了节省时间,因为此代码是为自动构建服务器设计的。请注意,构建目录从镜像中执行浅层克隆,甚至可以从本地捆绑包中获取Google的repo工具副本,以便进行脱机构建。同步步骤使用选项仅获取清单所需的更改集,并排除其他分支和提交。
function pushd_quiet() {
pushd "$@" >/dev/null
}
function popd_quiet() {
popd "$@" >/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
}
}