所以我有一个项目,多个库作为子模块附加 - 这意味着我无法承诺它们。
每个库都已包含一个android支持库,这显然会导致错误
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define...
在尝试构建apk时。
当然我可以从库项目中删除重复的支持库,但我无法提交此更改,因此使用我的repo与Jenkins等。
现在我只看到一个选择 - fork库,从中删除冲突的jar,并使用分叉版本作为子模块。但说实话,我想避免它。
那么,有没有办法用多个支持库构建apk,或者在克隆它们时从git子模块中排除这些库?
答案 0 :(得分:1)
如果您可以自动(在脚本中)删除那些重复的库引用,那么您可以注册到那些子模块repos smudge
脚本,在结帐时将删除这些副本。
(来自Scott Schacon的 Pro Git book 上的Git Attributes页面:“关键字扩展”部分
每次更新这些子模块SHA1时,该涂抹脚本都会自动清理该存储库。
我通过在parentRepo/.git/module/asubmodule/info/attribute
中直接复制我想要的过滤器来对子模块执行此操作
见this script for instance:
githubdir="${H}/.git/modules/gitlab"
if [[ ! -e "${githubdir}/info/attributes" ]]; then
cp "${gtl}/config.gitlab" "${githubdir}/config"
cp "${gtl}/attributes.gitlab" "${githubdir}/info/attributes"
xxgit=1 git --work-tree="${github}" --git-dir="${githubdir}" checkout HEAD -- "${github}"
*.rb filter=fileExpandPath
*.rake filter=fileExpandPath
那会叫:
fileExpandPath_replace
(我用“git checkout HEAD -- /path/to/submodule
”上方的行触发)fileExpandPath_restore
(您可能不需要,因为您不会在子模块中进行任何提交)