1

所以我有一个项目,其中有多个作为子模块附加的库——这意味着我不能提交它们。

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

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

在尝试构建apk时。

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

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

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

4

1 回答 1

1

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

内容过滤器

(来自Scott Schacon的关于Git 属性的Pro Git 书籍页面:“关键字扩展”部分)

每次更新这些子模块 SHA1 时,该涂抹脚本都会自动清理该存储库。

我通过将我想要的过滤器直接复制到子模块上来做到这一点parentRepo/.git/module/asubmodule/info/attribute
例如,请参阅此脚本

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

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

那将调用:

  • 在结帐一个脚本fileExpandPath_replace(我用上面的行“”触发git checkout HEAD -- /path/to/submodule
  • 在签入脚本 时fileExpandPath_restore(您可能不需要,因为您不会在子模块中进行任何提交)
于 2013-08-08T06:37:31.490 回答