Git: Игнорирование файлов с управлением версиями - PullRequest
45 голосов
/ 08 января 2011

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

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

Ответы [ 6 ]

116 голосов
/ 08 января 2011

Используйте 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

13 голосов
/ 08 января 2011

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

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

5 голосов
/ 03 августа 2015

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

git rm --cached path/to/file

или

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

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

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

2 голосов
/ 08 января 2011

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

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

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

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

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

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

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

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

1 голос
/ 08 января 2011

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

В итоге:

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

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

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

0 голосов
/ 09 октября 2014

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

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