Похоже, у вас слишком много вещей в одном хранилище. Вы должны изменить его, чтобы использовать подмодули. * Если есть папка, которая может жить независимо от их предков или братьев и сестер, тогда это хороший кандидат для подмодуля.
Подмодули Git сами являются репозиториями git и, таким образом, могут быть клонами, извлечены, изменены и отправлены в независимый от родительского репозитория.
Вы также можете иметь иерархию подмодулей. Таким образом, в вашем примере каждая подпапка может быть подмодулем. (но вы должны учитывать вышесказанное *).
Еще одним преимуществом этого подхода является то, что вы можете клонировать основной репозиторий (который может быть 2 ГБ) и предполагать, что он состоит из нескольких субмодулей (скажем, 10 ~ 200 МБ), не занимая все 2 ГБ. Затем вы можете запустить проверки субмодулей для нужных вам репо.
Вот пример:
Файловая структура
/MainApp/
/Utils 200MB
/Lib
^ /OSX 200MB
^ /WIN32 200MB
^ /WIN64 200MB
^ /NIX 200MB
/Source 150MB
=====
1.15GB
Если каждая из папок ^ является подмодулем, вы можете сделать следующее
$ git clone MainApp
# Downloads the 200MB for Utils and the 150MB for Source (plus git files)
$ cd MainApp
$ git submodule update /Lib/OSX
# Downloads the 200MB OSX folder