I have a complicated Ionic project I\'m developing. Many of the components and providers I\'m developing are generic and can be used in other projects my company is doing. This
I researched Scott Weldon's solution. It would work, but it seems git subtree splits the said directory into its own repo. At least that's what I gleaned from reading man pages and books and what not. (If I'm wrong, which may well be the case, please let me know.) That's not what I wanted to do.
I did, however, find the solution to my problem. Here's what I did using the Git Subtree Merge Strategy (instead of the GIT SUBTREE command) in my project:
$ git remote add my-library <my-library-url>
$ git fetch my-library
$ git checkout -b my-library-branch my-library/master
$ git checkout master
$ git read-tree --prefix=<desired/library/dir> -u my-library-branch
$ git commit -m "Merged library project as subdirectory"
$ git push
This worked great. I have my library in a reasonable subfolder. Admittedly, I have to take the whole library, not just a chunk like a custom component or provider, but that's OK in this case.
Before adding the subtree to my-app-repo
, split a subtree from my-company-library-repo
:
# In my-company-library-repo
git subtree split -P src/app/providers/... -b feature-new feature
This will create a new history with the contents of src/app/providers/...
at the root of the repo, starting at the feature
branch, and create the branch feature-new
at the end of this history.
Then add that new branch as a subtree to my-app-repo
:
# In my-app-repo
git subtree add -P <destination-dir/feature> --squash <my-company-library-repo> feature-new
Now you will have the contents of src/app/providers/...
at <destination-dir/feature>
.
You didn't mention whether you will be repeating this process regularly, but that is possible too. From the git-subtree
man page:
Repeated splits of exactly the same history are guaranteed to be identical (ie. to produce the same commit ids). Because of this, if you add new commits and then re-split, the new commits will be attached as commits on top of the history you generated last time, so '
git merge
' and friends will work as expected.