Git — зафиксировать файл в .gitignore

Я хочу зафиксировать и отправить два новых файла, которые находятся внутри папки, указанной в проекте .gitignore. Я полагаю, что могу просто изменить файл .gitignore, но тогда мне потребуются две фиксации: одна фиксация для отправки двух новых файлов, а вторая фиксация для сброса .gitignore. Я хотел бы сделать это в одном коммите, если это возможно.

Есть ли способ зафиксировать и нажать определенный файл, который игнорируется?


person Isaac    schedule 16.02.2015    source источник
comment
Вы могли бы просто не фиксировать .gitignore, чтобы он никогда не нажимался :)   -  person Anonymous Penguin    schedule 02.04.2016


Ответы (2)


Вам не нужно изменять .gitignore:, вы можете принудительно добавить эти файлы:

git add --force -- file1 file2
git commit -m "add previously ignored files"
git push

С git add справочной страницы:

-f
--force

Разрешить добавление игнорируемых файлов.

Как отмечает Якуб Наребски, эти файлы больше не игнорируются, даже если бы они все еще были выбраны директивами .gitignore.


Том Харт спрашивает в комментариях:

Просто интересно, можно ли повторно игнорировать файлы после использования --force?

Вам нужно зафиксировать их удаление из индекса, чтобы эти файлы снова не игнорировались в рабочем дереве:

git rm --cached file1 file2
git commit -m "Remove files which should be ignored"
git push

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

Если вы просто хотите игнорировать эти файлы локально и временно, используйте:

git update-index --assume-unchanged -- file1 file2

(как я подробно описал ранее сегодня в «GIT Игнорировать уже зафиксированные файлы, используя исключение для локальных изменений")

Поскольку Zeeker добавляет в комментариях:

Atm git не предоставляет механизма для игнорирования всех изменений в зафиксированном файле в каждом клоне.

So:

  • git rm --cache удалит файл (сохранив его предыдущую историю): файл1 или файл2 больше не будут видны и будут проигнорированы.
  • git update-index --assume-unchanged -- file1 file2 не удаляет файлы, но больше не обнаруживает локальные изменения.
person VonC    schedule 16.02.2015
comment
Обратите внимание, что отслеживаемые файлы больше не игнорируются. - person Jakub Narębski; 16.02.2015
comment
@JakubNarębski Верно. Я включил ваш комментарий в ответ для большей наглядности. - person VonC; 16.02.2015
comment
Просто интересно, есть ли способ повторно игнорировать файлы после использования --force? - person TMH; 16.02.2015
comment
Спасибо, хотя мне лично не нужно делать это в данный момент, я могу придумать несколько вариантов использования, когда мне нужно будет просто зафиксировать файл один раз, а затем снова его игнорировать. Спасибо за быстрое обновление :) - person TMH; 16.02.2015
comment
Однако @TomHart отмечает, что update-index --assume-unchanged полностью локальный. Atm git не предоставляет механизма для игнорирования всех изменений в зафиксированном файле для каждого клона. - person Sascha Wolf; 16.02.2015
comment
@Zeeker Правда, отсюда и локальное и временное выражение, которое я использовал. Я включил ваш комментарий в ответ для большей наглядности. - person VonC; 16.02.2015
comment
Примечание для себя: это мой 1000-й хороший ответ. - person VonC; 04.07.2020

git add -f /path/to/file

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

person pankijs    schedule 16.02.2015