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 в папке в окне "Хранилища";
- нажмите "Игнорировать".