Как заставить Git игнорировать файлы без использования .gitignore? - PullRequest
106 голосов
/ 17 марта 2009

Из-за внешних странных ограничений я не могу изменить .gitignore моего хранилища. Есть ли способ игнорировать файлы и каталоги, кроме изменения .gitignore? Даже если это глобальное решение, подобное глобальной конфигурации, которое будет применяться ко всем моим репозиториям.

Ответы [ 7 ]

146 голосов
/ 17 марта 2009

Не забывайте, согласно gitignore , что в различных «источниках шаблонов игнорирования», которые Git считает, существует порядок приоритета:

  • Шаблоны, прочитанные из командной строки для тех команд, которые их поддерживают.
  • Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь, или в любом родительском каталоге, причем шаблоны в файлах более высокого уровня (вплоть до корня) переопределяются шаблонами в файлах более низкого уровня вплоть до каталога, содержащего файл.
  • Шаблоны, прочитанные с $GIT_DIR/info/exclude.
  • Шаблоны, считанные из файла, указанного в переменной конфигурации core.excludesfile.

Последние два могут быть решением вашей проблемы, но:

  • они не реплицируются для удаленного хранилища
  • их шаблоны могут быть переопределены другими источниками

(см. Также ТАК вопрос )


Два других решения включают обновление индекса (git update-index):

Однако, когда вы извлекаете другую ветку или когда вы git pull, этот статус "игнорирования" может быть сброшен. Отсюда и другой вариант:

Разница между ними объясняется в " Git - разница между 'assume-unchanged' и 'skip-worktree' ".

112 голосов
/ 17 марта 2009

Если вы можете изменить .git/info/exclude, вы можете поместить там те же правила. Но этот файл находится только в вашем локальном репо.

20 голосов
/ 17 марта 2009

Есть три способа сообщить GIT, какие файлы игнорировать:

  • .gitignore файлы
  • $ GIT_DIR / .git / Информация / исключить
  • Файлы, на которые указывает настройка core.excludesfile

Последние два пункта могут решить вашу проблему.

Для получения дополнительной информации см. gitignore (5) .

3 голосов
/ 05 марта 2015

Если вы просто хотите, чтобы в хранилище было несколько локальных файлов, а расположение подкаталога гибкое, вы можете поместить файлы в tracked_dir1/tracked_dir2/untracked_dir/, а затем добавить tracked_dir1/tracked_dir2/untracked_dir/.gitignore с содержимым, например:

*

1008 * Т.е. *

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
2 голосов
/ 26 апреля 2018

Я был в подобных ситуациях, поэтому я добавляю свое предпочтительное решение, которое я не вижу упомянутым. Проблема с git update-index --assume-unchanged в этом случае заключается в том, что вы не можете сделать это для неотслеживаемого файла. Вы сказали

Я не могу изменить .gitignore моего репозитория.

Я собираюсь предположить, что вы имеете в виду, что вы не можете перенести какие-либо изменения в .gitignore в начало координат. В этом случае вы можете добавить неотслеживаемый файл в локальный файл .gitignore, а затем выполнить команду git update-index --assume-unchanged .gitignore, чтобы ваше изменение на .gitignore никогда не выдвигалось. Теперь вы игнорируете (возможно) неотслеживаемый файл и не затрагивает удаленный файл .gitignore.

1 голос
/ 12 августа 2014

Игнорировать локальные изменения в отслеживаемых файлах: git update-index --assume-unchanged my-file.php

Игнорировать локальные изменения в отслеживаемых файлах: git update-index --no-assume-unchanged my-file.php

источник: git help update-index

--[no-]assume-unchanged
           ...
           This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
           files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
           modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
           changed upstream, you will need to handle the situation manually.
0 голосов
/ 03 апреля 2015

Вы можете использовать глобальный метод gitignore вместо изменения метода в проекте https://help.github.com/articles/ignoring-files/#create-a-global-gitignore

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