Странно, но я мало встречаю упоминаний этой возможности в различных заметках и документации. Однако частичный (sparse) чекаут часто необходим пользователям переходящим с svn и использующим svn externals в своих проектах.
В git архитектуре заложено, что локально клонируется весь удалённый репозиторий, но пользователям svn externals часто нужна лишь часть проекта. С версии 1.7 в git доступна схожая функциональность, которую назвали sparse checkout, с её помощью вы можете оставить в своей рабочей копии проекта лишь те файлы и директории, которые вам необходимы.
Вот как это работает:<ol>
<li>клонируем весь репозиторий
<pre>git clone <repo_url> <directory>
</pre>
</li>
<li>переходим в директорию проекта
<pre>cd <directory>
</pre>
</li>
<li>включаем опцию частичного чекаута
<pre>git config core.sparsecheckout true
</pre>
</li>
<li>добавляем директории и файлы, которые хотим видеть в подключённом проекте (в моём случае я хочу отфильтровать не только директории, но и конткретные технологии, например только файлы JavaScript)
<pre>echo "/blocks-desktop/**/*.js" > .git/info/sparse-checkout
</pre>
</li>
<li>перечитываем рабочую копию проекта
<pre>git read-tree -m -u HEAD
</pre>
</li>
</ol>
Видно, что синтаксис файла .git/info/sparse-checkout
аналогичен синтаксису .gitignore
, но объявляющий наличие попадающих под маску сущностей, а следовательно чуть более гибкий, чем svn externals.