Git: Игнорирование Файлов, Контролируемых Версиями

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

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

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, не удалит реальные файлы.

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


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

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

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

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

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

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

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

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


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

в итоге:

  1. глобальный файл игнорирования git применяется ко всем репозиториям в этой системе
  2. The .файл gitignore в репозитории применяет репозиторий и все клоны этого репозитория.
  3. The .файл git/info/exclude применяется только к этому репозиторию.

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

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


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

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