Building a living framework
There are various reasons to join an external project to your own project. As there are different reasons to include a project (let’s call it a subproject, or a module) inside another project (let’s call it a superproject, or a master project), there are different types of inclusions geared toward different circumstances. They all have their advantages and disadvantages, and it is important to understand these to be able to choose the correct solution for your problem.
Let’s assume that you work on a web application and that your web app uses JavaScript (perhaps working as a single-page app). To make it easier to develop, you probably use some JavaScript library or a web framework, such as React.
Such a library is a separate project. You would want to be able to pin it to a known working version (to avoid problems where future changes to the library would make it stop working for your project), while also being able to review changes...