How can I add a specific folder when using git subtree?

后端 未结 2 741
执笔经年
执笔经年 2021-02-09 15:03

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

相关标签:
2条回答
  • 2021-02-09 15:37

    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.

    0 讨论(0)
  • 2021-02-09 15:53

    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.

    0 讨论(0)
提交回复
热议问题