Добавление файлов игнорирования в репозиторий Git задним числом - PullRequest
5 голосов
/ 19 апреля 2011

Итак, у меня был этот проект, где сначала я сделал

git add .

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

Это, конечно, стало больно, так как между каждым коммитом я обычно просто меняю 3-5 файлов, все файлы сборки (.class, .html, .xml и т. Д.) Полностью восстанавливаются, что означает 1006 *

git add .

добавит сотни файлов вместо 3-5 файлов, которые я действительно изменил.

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

Возможно ли это сделать в git? Если да, то как?

Ответы [ 3 ]

7 голосов
/ 19 апреля 2011

Да, вы можете использовать git filter-branch.

В Pro Git Book есть хороший раздел по удалению объектов из истории

--index-filter <command> 

Это фильтр для перезаписи индекса. Он похож на фильтр дерева, но не проверяет дерево, что делает его намного быстрее. Часто используется с git rm --cached --ignore-unmatch …, см. ПРИМЕРЫ ниже. О случаях волосатости смотрите в git-update-index (1).

В качестве примера:

git filter-branch \
    --index-filter 'git rm --cached --ignore-unmatch filename' \
    --tag-name-filter cat \
    -- --all

tag-name-filter также существует для перезаписи ваших тегов, поэтому вы их не потеряете.

Отказ

Будьте осторожны при переписывании публичной истории. Вы можете сделать невозможным / трудным для других быть в курсе последних событий или внести свой вклад.

2 голосов
/ 19 апреля 2011

http://help.github.com/removing-sensitive-data/

Не удаляет конфиденциальные данные, но, похоже, это то, что вы ищете.

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.<filetype>' HEAD

0 голосов
/ 19 апреля 2011

Насколько я знаю, git не сделает этого задним числом. Вам нужно git rm или git rm --cached их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...