sparse checkout

Странно, но я мало встречаю упоминаний этой возможности в различных заметках и документации. Однако частичный (sparse) чекаут часто необходим пользователям переходящим с svn и использующим svn externals в своих проектах.

В git архитектуре заложено, что локально клонируется весь удалённый репозиторий, но пользователям svn externals часто нужна лишь часть проекта. С версии 1.7 в git доступна схожая функциональность, которую назвали sparse checkout, с её помощью вы можете оставить в своей рабочей копии проекта лишь те файлы и директории, которые вам необходимы.

Вот как это работает:

  1. клонируем весь репозиторий
    git clone <repo_url> <directory>
  2. переходим в директорию проекта
    cd <directory>
  3. включаем опцию частичного чекаута
    git config core.sparsecheckout true
  4. добавляем директории и файлы, которые хотим видеть в подключённом проекте (в моём случае я хочу отфильтровать не только директории, но и конткретные технологии, например только файлы JavaScript)
    echo "/blocks-desktop/*/.js" > .git/info/sparse-checkout
  5. перечитываем рабочую копию проекта
    git read-tree -m -u HEAD

Видно, что синтаксис файла .git/info/sparse-checkout аналогичен синтаксису .gitignore, но объявляющий наличие попадающих под маску сущностей, а следовательно чуть более гибкий, чем svn externals.

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