Set Git submodule to shallow clone & sparse checkout?

ma11hew28 picture ma11hew28 · Jun 4, 2011 · Viewed 18.7k times · Source

Many vendor Objective-C libraries (e.g., facebook-ios-sdk) instruct you to copy a certain subset of its repo's files/dirs into your Xcode project. One problem with this is then you do not know what revision of the vendor code you have. Another is that if you make changes to the vendor code, it's not easy to contribute your changes via Git.

As a solution, I want to add each vendor library as a Git submodule of my project's repo with some extra settings (say, in the .gitmodules file). This way, if another person clones my project and does git submodule update --init, their repo & submodules will have the same state as mine because they'll be using the same default settings I set:

  1. Sparse checkout: Only check out certain files of the submodule.
  2. Shallow clone: Only clone a certain SHA1 of the submodule.

How do I set the above settings for a Git submodule?

Answer

gwohpq9 picture gwohpq9 · Aug 2, 2012

You can do sparse checkouts of submodules the same way as normal sparse checkout. Just remember the sparse-checkout file for each module goes in .git/modules/<mymodule>/info/. But, as discussed in git 1.7 sparse checkout feature, sparse checkouts are exactly that: checkouts. You can't move files or share the settings.