Our CM team likes to use both submodules and branches and it doesn't always work cleanly. Some examples:
1. The new release on branch "next_release" adds a submodule, but then the submodule shows up on all branches including the production branch.
2. For next release on branch "next_release" a submodule was renamed by moving the target directory, but now git submodule update makes two copies.
Git generally does a good job of tracking renames and deletions, so the fact that submodules leave stuff behind is surprising.