Как заставить git игнорировать подкаталоги (которые являются частью репозитория) для таких операций, как git status - PullRequest
1 голос
/ 24 марта 2011

У меня есть хранилище, включающее много подкаталогов.Я точно знаю, что не буду вносить изменения в некоторые из них.Есть ли способ сообщить 'git status' и другим операциям, которые сканируют всю файловую систему, чтобы не связываться с этими каталогами, тем самым ускоряя эти операции?

Ответы [ 4 ]

3 голосов
/ 25 марта 2011

Я предполагаю, что под «[они] являются частью хранилища» (в заголовке вашего вопроса) вы подразумеваете, что подкаталоги, которые вы хотите пропустить, на самом деле содержат отслеживаемые файлы и что вы хотите избежать git status проверки состояния даже эти отслеживаемые файлы.

По умолчанию git status проверит все отслеживаемые пути. У него нет опций для пропуска заданного списка путей, но он принимает pathspec аргументы, которые можно использовать для указания путей, которые он должен проверять (неявно, другие пути будут пропущены).

Чтобы напрямую использовать доступную доступную функциональность, вам нужно перевернуть проблему: Как показать состояние только определенных файлов и каталогов?

Ответ в том, что вы просто перечисляете их в командной строке. Например, если мы хотим знать только о src, doc (оба, вероятно, каталоги) и Makefile:

git status src doc Makefile

Печатая это каждый раз, будет громоздко, поэтому вы, вероятно, захотите использовать сценарий оболочки и / или псевдоним Git.

Однако это хорошо работает, только если вы можете определить интересующий вас набор путей, не говоря что-то вроде «все, кроме X, Y и Z». Git не включает поддержку «все, кроме…» (пока 1 ), поэтому вам придется полагаться на что-то еще, чтобы расширить список и присвоить ему git status. Некоторые оболочки имеют функции, которые могут помочь.

Пример: обработать все записи в текущем каталоге (включая «точечные» файлы / каталоги), если они не совпадают с .V, .W (т.е. шаблоны, начинающиеся с точки), X, или Y:

  • zsh с включенной опцией EXTENDED_GLOB (setopt EXTENDED_GLOB),

    git status ^(.V|.W|X|Y)(D)
    

    Вы можете отключить (D), если у вас также включена GLOB_DOTS .

  • bash с включенными опциями dotglob и extglob (shopt -s extglob dotglob):

    git status !(.V|.W|X|Y)
    
  • ksh (шаблон для «точечных» имен немного странный из-за эмуляции GLOB_DOTS ):

    git status .!(|.|V|W) !(X|Y)
    

И снова, вы, вероятно, захотите заключить их в скрипт (или псевдоним Git) вместо того, чтобы вводить их напрямую.


1 В рассылке Git обсуждалась добавленная поддержка «отрицательных» спецификаций пути («все, кроме…»), которые могли бы позволить вам сделать это без помощи оболочки, но пока нет твердого дизайна или открытого кода.

3 голосов
/ 24 марта 2011

Возможно, поместите их в .git / info / exclude, это, в принципе, то же самое, что и .gitignore, но вы не трогаете содержимое хранилища.

0 голосов
/ 24 марта 2011

В вашем каталоге, в котором у вас есть git-репо, создайте / отредактируйте файл .gitignore и добавьте следующее:

dir1/
dir2/

и т.д.игнорировать dir1 и dir2.

0 голосов
/ 24 марта 2011

Об этом позаботится файл .gitignore.

Создайте его в корне вашего хранилища.Документация здесь:

http://git -scm.com / docs / gitignore

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...