One gotcha I have found with sub-modules is that you are checked out that point in history, they do not update with your main code. Under our CI I have a line which then gets the latest version(cd to the directory; git checkout master; git pull) and then when I get to a version I am happy with I can check out a specific tag. For me, they seem to fit into the project more naturally as the code goes with my check-in and not as a separate aside, looking at you VIPM. This has caused issues on the CI Server as you then have to rebuild your .vipc files and reload on the server. I know this can be done automatically, but having the configuration of LabVIEW changed everytime it does a build has an element that doesn't seem to fit with the idea of having a consistent build process.