Git can be used for managing dependencies. It some cases it is the best solution and has to be considered as a viable tool. C++ does not have package management system and thus git submodules are a natural model to add any library dependencies. This results in highly cohesive approach to dependency management. Many languages these days provide “packages”: NodeJS has NPM .NET has NuGet Python has pip However, in a mixed solution environment it can be time consuming to maintain all custom package repositories.
Git can be used for versioning. It is great, because version number autoincrements with every check-in. Even if you branch, each version will remain unique. Version label is easy to control with git tags. Advantages: version is automatically maintained without additional effort. Depending on your goal it is a PRO or CON: rebuilding the same check-in generates the same version number regardless of what machine is used.