Добавление игнорируемых файлов в репозиторий git задним числом

#git #version-control

#git #контроль версий

Вопрос:

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

 git add .
  

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

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

 git add .
  

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

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

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

Ответ №1:

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

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

 --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:

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

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

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

Ответ №3:

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