Git: Игнорирование файлов с управлением версиями

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

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

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

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

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

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

Это означает, что ваш .gitignore Файл не должен отличаться от ваших коллег - он работает так, как задумано.

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

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

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

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

В итоге:

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

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

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

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

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