使用git子模块发生多个支持库冲突

时间:2013-08-08 06:03:14

标签: android git github egit git-submodules

所以我有一个项目,多个库作为子模块附加 - 这意味着我无法承诺它们。

每个库都已包含一个android支持库,这显然会导致错误

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define...

在尝试构建apk时。

当然我可以从库项目中删除重复的支持库,但我无法提交此更改,因此使用我的repo与Jenkins等。

现在我只看到一个选择 - fork库,从中删除冲突的jar,并使用分叉版本作为子模块。但说实话,我想避免它。

那么,有没有办法用多个支持库构建apk,或者在克隆它们时从git子模块中排除这些库?

1 个答案:

答案 0 :(得分:1)

如果您可以自动(在脚本中)删除那些重复的库引用,那么您可以注册到那些子模块repos smudge脚本,在结帐时将删除这些副本。

content filter

(来自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}"

使用attributes.gitlab being

*.rb filter=fileExpandPath
*.rake filter=fileExpandPath

那会叫:

  • 结帐时脚本 fileExpandPath_replace (我用“git checkout HEAD -- /path/to/submodule”上方的行触发)
  • on checkin 脚本 fileExpandPath_restore (您可能不需要,因为您不会在子模块中进行任何提交)
相关问题