Thanks for the @-mention!
There is no "single tool to learn" when dealing with C code, because there is no such thing as a "standard" C project. Every project does it slightly differently.
For this reason, cargo
doesn't have any standard functionality for it (also because the cargo team is has been under-staffed for years now, they need a couple extra volunteers/colleagues even for their current workload).
If you don't want to learn submodules, cargo won't care. Cargo treats a git-submodule exactly the same as a good ol' manual Ctrl+C, Ctrl+V copy. (in fact, they're identical on the filesystem, all the magic is in the .git
subfolder).
The only person who cares about submodule-vs-ctrlC is future-You, when the time comes to upgrade your C-dependency from version X to vX+1.
I learned this annoying lesson the hard way, so I hope to save people the trouble with my advice 
With a "manual" copy, you'll have to figure out all the diffing yourself and do a replace-all update commit.
Tracking which old commit exactly you had becomes a matter of manual note-keeping in textfiles.
With git submodules, git itself remembers the commits of the child-repo, so the process becomes:
#go into the submodule dir
cd vendor/my-dep/
#get latest version
git pull --ff-only
# go back "up" to main project
cd ../..
git add vendor/
git commit -m "update my-dep to latest"
The added advantage is that you have the full git history, and all it's commit messages ("fix bug #123", "refractor xyz") available instead of one mega-diff saying "update v0.9 -> v1.5".
Of course, if you think you don't need this, I won't lose any sleep of someone doesn't use submodules
