Git: Игнорирование файлов с управлением версиями
Файл.gitignore очень полезен для игнорирования некоторых файлов, которыми мы не хотим управлять. К сожалению, его нельзя использовать, когда файл уже находится под контролем версий. Например, мой файл.gitignore (который уже добавлен в git) может отличаться от того, что хочет мой коллега (например, я хочу игнорировать файлы Vim). Всякий раз, когда я делаю изменения в этом файле, git показывает его как измененный файл. Итак, мои вопросы:
- Есть ли способ игнорировать изменения для определенного файла, который уже контролируется Git?!
- Есть ли способ зафиксировать эти изменения, но оставить его только для себя? Очевидно, я не хочу использовать ветку, потому что я работаю над определенной веткой.
6 ответов
Если вы хотите исключить файлы, относящиеся к вашему процессу (например, временные файлы Vim), отредактируйте (локальный) файл .git/info/exclude
и добавьте туда свои шаблоны исключения. Этот файл предназначен для исключений конкретного разработчика, а не .gitignore
, который предназначен для исключений всего проекта.
Краткое резюме: все должны договориться о том, что добавляется в .gitignore
, Для файлов, где вы не согласны, используйте .git/info/exclude
,
Используйте git-update-index для временного игнорирования изменений в файлах, которые уже находятся под контролем версий:
git update-index --assume-unchanged <files>
Чтобы отменить это использование:
git update-index --no-assume-unchanged <files>
Также посмотрите на skip-worktree
а также no-skip-worktree
опции для update-index, если вам нужно это сохранить после git-reset
Вы можете использовать эту команду, чтобы получить, что вы хотите.
git rm --cached path/to/file
или же
git rm -r --cached path/ignore/dir
Это только удалит трек из git, не удалит реальные файлы.
Затем вы можете отредактировать файл игнорирования, чтобы отследить эти файлы или каталоги.
На самом деле я не могу ответить на общий вопрос (если Git игнорирует отслеживаемые файлы) - мне кажется, что это скорее вредно, чем полезно.
Однако на странице руководства gitignore указано несколько способов настройки шаблонов для исключаемых файлов.
В частности, он дает четкие инструкции о том, как использовать эти различные способы:
- Шаблоны, которые должны контролироваться версиями и распространяться в других репозиториях через клон (т. Е. Файлы, которые все разработчики захотят игнорировать), должны войти в
.gitignore
файл.
Это означает, что ваш .gitignore
Файл не должен отличаться от ваших коллег - он работает так, как задумано.
Шаблоны, которые являются специфическими для конкретного репозитория, но которые не должны использоваться совместно с другими связанными репозиториями (например, вспомогательные файлы, которые находятся внутри репозитория, но специфичны для рабочего процесса одного пользователя), должны войти в
$GIT_DIR/info/exclude
файл.Шаблоны, которые пользователь хочет игнорировать git во всех ситуациях (например, резервные копии или временные файлы, сгенерированные выбранным редактором пользователя), обычно помещаются в файл, указанный в
core.excludesfile
в пользователе~/.gitconfig
,
Там у вас есть это. Укажите core.excludesfile
путь к файлу в вашем ~/.gitconfig
файл, а затем вставьте в него шаблоны, которые вы хотите исключить.
Я написал о трех способах исключения файлов в другом месте.
В итоге:
- Глобальный файл git ignore применяется ко всем репозиториям в этой системе
- Файл.gitignore в хранилище применяет хранилище и все клоны этого хранилища.
- Файл.git / info / exclude применяется только к этому хранилищу.
Нижние элементы в списке имеют приоритет над более высокими элементами, и !
перед элементом в любом из шаблонов в файле отменяет предыдущее исключение.
Эта парадигма видна в другом месте в Git. Например, если вы использовали субмодули, URL-адрес субмодуля для использования находится в .gitmodules
файл в хранилище, но вы можете переопределить URL для использования в файле.git/config.
Вот обобщенное решение (не индивидуальное) для тех, кто использует Git под интерфейсом SmartGitHG viusal:
- выберите папку, которую хотите игнорировать, в окне "Хранилища";
- выделите все файлы из этой папки в окне "Файлы" (чтобы отобразить неизмененные файлы, щелкните соответствующий значок фильтра в правой верхней части главного окна);
- нажмите "Удалить" на панели управления (если нужно, установите флажок "Удалить локальные файлы");
- совершать локальные изменения;
- щелкните правой кнопкой мыши на папке в окне "Хранилища";
- нажмите "Игнорировать".