Как заставить Git игнорировать файлы без использования.gitignore?

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

9 ответов

Решение

Не забывайте, согласно gitignore, что в различных "источниках шаблонов игнорирования", которые Git рассматривает, есть порядок приоритета:

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

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

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

(См. Также этот вопрос)


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

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

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

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

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

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

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

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

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

Я не могу изменить.gitignore моего хранилища.

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

По-другому:

  • редактировать местный .gitignore
  • тогда git update-index --assume-unchanged .gitignore

Игнорировать локальные изменения в отслеживаемых файлах: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.

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

*

Т.е.

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

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

Изменениеиспользование vim или emacs отлично работает для меня.

Принимая во внимание комментарий @Desko27, этот подход не работает, если вы хотите игнорировать файлы, которые уже отслеживаются Git.

Поэтому игнорируйте файлы заранее, прежде чем отслеживать их.

Другие вопросы по тегам