Search code examples
gitgit-subtree

Git subtree: Use only subrepository instead of whole repository


I have a project that uses some 3rd Party libraries. So the directory structure is something like:

MY_COOL_PROJECT
   3rdParty
      LIB_1
      LIB_2
   Source
      MY_PROJECT   

The libraries are located in separate repositories. So, if I want to use a git repository for the 3rd Party libraries I can do:

git subtree add --prefix 3rdParty/LIB_1 --squash http://My3rdPartyLibs.com/lib1.git master

However, inside lib1.git repository there is only one bin folder I need. It contains also folders such as documentation, examples, etc. How can I only "connect" my repository with lib1/bin folder instead of the whole repository? Is that even possible?


Solution

  • Normally, a git repo is done to be fully cloned/loaded.

    You could go for a sparse checkout (Git1.7+), but only if you don't intent to do any modification and push those back. See this example:

    $ git init
    Initialized empty Git repository in /tmp/si-sandbox/.git/
    (master) $ git config core.sparsecheckout true
    (master) $ echo message-store/ >> .git/info/sparse-checkout
    (master) $ git remote add origin git://github.com/iwein/Spring-Integration-Sandbox.git
    (master) $ git pull origin master
    

    The OP user2070238 reports:

    This worked with a few changes.
    Because, I use submodule I had to use

     echo MY_FOLDER/* >> .git/info/modules/MY_MODULE/sparse-checkout 
    

    And for some reason the MY_FOLDER/ part was not working without *