Múltiples bibliotecas de soporte entran en conflicto con los submodules de git

Así que tengo un proyecto con múltiples bibliotecas adjuntas como submodules, lo que significa que no puedo comprometerme con ellas.

Cada una de las bibliotecas ya incluye una biblioteca de soporte de Android, lo que obviamente conduce a un error

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

al intentar build apk.

Por supuesto, puedo eliminar bibliotecas de soporte duplicadas de proyectos de la biblioteca, pero no podré confirmar estos cambios, y como resultado usaré mi repository con Jenkins, etc.

Por ahora, veo solo una opción: bibliotecas de bifurcación, eliminar el bote conflictivo de ellos y usar versiones bifurcadas como submodules. Pero para ser honesto, me gustaría evitarlo.

Entonces, ¿hay alguna manera de build apk con múltiples bibliotecas de soporte, o excluir esas bibliotecas de los submodules de git mientras se clonan?

Si puede automatizar (en una secuencia de commands) la eliminación de esas references de bibliotecas duplicadas, entonces podría registrarse en esos repositorys de submodules una secuencia de commands de smudge que, al finalizar la compra, eliminaría esos duplicates.

Filtro de contenido

(de la página del libro Pro Git de Scott Schacon sobre Atributos de Git : sección "Expansión de palabras key")

Cada vez que actualice esos submodules SHA1, esa secuencia de commands de borrado limpiaría automáticamente ese repository.

Lo hago en un submodule copyndo el filter que quiero directamente en parentRepo/.git/module/asubmodule/info/attribute .
Ver este script, por ejemplo :

 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}" 

Con attributes.gitlab siendo :

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

Eso llamaría:

  • al momento de pagar, un script fileExpandPath_replace (que disparo con la línea de arriba " git checkout HEAD -- /path/to/submodule ")
  • al fileExpandPath_restre una secuencia de commands fileExpandPath_restre (que puede que no necesite ya que no realizará ningún commit en los submodules)