sparse checkout

Странно, но я мало встречаю упоминаний этой возможности в различных заметках и документации. Однако частичный (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.

комментарии Disqus