Could an alternative be to use individual repos and also a meta-repo? The metarepo contents are the commit ids of each individual repo.
So let's say you want to update a repo which depends on another one:
Update project A, commit changes.
# Your product hasn't changed at this point
Update project B, commit changes.
# Your product hand't changed at this point
In metarepo, checkout to the new 'master' branches of Projects A and B, commit that to metarepo
# Your product is now updated!