Git: игнорирование файлов с контролируемой версией

Файл .gitignore очень полезен при игнорировании некоторых файлов, которые мы не хотим контролировать. К сожалению, он не может использоваться, когда файл уже находится под управлением версиями. Например, мой .gitignore (который уже добавлен в файл git) может отличаться от того, что хочет мой коллега (например, я хочу игнорировать файлы Vim). Всякий раз, когда я вношу изменения в этот файл, git показывает его как измененный файл. Итак, мои вопросы:

  • Есть ли способ игнорировать изменения для определенного файла, который уже контролируется Git?!
  • Есть ли способ совершить эти изменения, но сохранить его только для себя? Очевидно, я не хочу использовать ветку, потому что я работаю над определенной ветвью.

Ответ 1

Если вы хотите исключить файлы, специфичные для вашего процесса (например, временные файлы Vim), отредактируйте (локальный) файл .git/info/exclude и добавьте в него свои шаблоны исключения. Этот файл предназначен для исключений, специфичных для разработчиков, а не .gitignore, который предназначен для исключений для всего проекта.

Краткий итог: каждый должен согласиться с тем, что добавлено в .gitignore. Для файлов, в которых вы не согласны, используйте .git/info/exclude.

Ответ 2

Используйте git-update-index, чтобы временно игнорировать изменения в файлах, которые уже находятся под управлением версиями:

git update-index --assume-unchanged <files>

Чтобы отменить это использование:

git update-index --no-assume-unchanged <files>

Также ознакомьтесь с параметрами skip-worktree и no-skip-worktree для индекса обновления, если вам нужно это, чтобы сохранить прошлое git - reset

Ответ 3

вы можете использовать эту команду, чтобы вы захотели.

git rm --cached path/to/file

или

git rm -r --cached path/ignore/dir

Это приведет к удалению дорожки из git, не удалит реальные файлы.

Затем вы можете отредактировать файл игнорирования, чтобы не проверять эти файлы или директории.

Ответ 4

Я не могу ответить на общий вопрос (имея Git игнорировать отслеживаемые файлы) - он поражает меня как функцию, которая была бы намного более вредной, чем полезная.

Тем не менее, страница руководства gitignore определяет несколько способов настройки шаблонов для исключенных файлов.

В частности, он дает ясные инструкции о том, как использовать эти различные способы:

  • Шаблоны, которые должны контролироваться версиями и распределяться в другие репозитории через клон (т.е. файлы, которые все разработчики захотят игнорировать), должны войти в файл .gitignore.

Значит, ваш файл .gitignore не должен отличаться от ваших сотрудников - он работает по назначению.

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

  • Шаблоны, которые пользователь хочет Git игнорировать во всех ситуациях (например, резервные или временные файлы, созданные выбранным редактором пользователей), обычно входят в файл, указанный core.excludesfile в пользователях ~/.gitconfig.

Там у вас есть. Укажите путь к файлу core.excludesfile в ваш файл ~/.gitconfig, а затем вставьте в него шаблоны, которые вы хотите исключить.

Ответ 5

Я написал о трех способах исключения файлов в другом месте.

Вкратце:

  • Глобальный файл git ignore применяется ко всем репозиториям в этой системе
  • Файл .gitignore в репозитории применяет репозиторий и все клоны этого репозитория.
  • Файл .git/info/exclude применяется только к этому репозиторию.

Более низкие элементы списка имеют приоритет над более высокими позициями, а ! перед элементом в любом из шаблонов в файле отменяет предыдущее исключение.

Эта парадигма рассматривается в другом месте в Git. Например, если вы использовали подмодули, URL-адрес подмодуля для использования находится в файле .gitmodules в репозитории, но вы можете перенаправить URL-адрес для использования в файле .git/config.

Ответ 6

Вот обобщенное решение ubiquitos (не индивидуальное) для тех, кто использует Git в интерфейсе виртуального интерфейса SmartGitHG:

  • выберите папку, которую вы хотите игнорировать, в окне "Хранилища";
  • выберите все файлы из этой папки в окне "Файлы" (отобразите неизменяемые файлы, щелкнув соответствующий значок фильтра в правой верхней области главного окна);
  • нажмите "Удалить" на панели управления (установите флажок "Удалить локальные файлы", если вам это нужно);
  • зафиксировать локальные изменения;
  • rightclick в папке в окне "Хранилища";
  • нажмите "Игнорировать".