Firstly, I do not agree that external ones are evil. Although they are not perfect.
You are currently doing a few checks to create a working copy. If you used external resources, this will do just that, but automatically and consistently every time.
If you point your external elements to tags (or specific versions) in the target projects, you only need to mark the current project for release (since this tag will indicate exactly what you pointed to). You will also have an entry in your project when you change links to external links to use the new version of a specific library.
External actions are not a panacea, and, as the message shows, there may be problems. I am sure that there is something better than external ones, but I have not found it yet (even conceptually). Of course, the structure you use can provide great information and control in your development process using external resources. However, the problems that he had were not fundamental corruption issues - a clean get resolved everything and quite rarely (can you really not create a new library branch in your repo?).
Points to consider - using recursive external ones. I don’t sell either yes or no, and usually take a pragmatic approach.
Consider using a piston, as the article suggests, I have not seen it in action, so I can’t comment, it can do the same work as the external ones in the best possible way.
Jim t source share