Можно ли «обновить» репозиторий git после обновления файла gitignore?
Я просто добавил больше примечаний (?) К своему gitignore и хотел бы удалить материал из репо, соответствующий новому файлу.
Можно ли «обновить» репозиторий git после обновления файла gitignore?
Я просто добавил больше примечаний (?) К своему gitignore и хотел бы удалить материал из репо, соответствующий новому файлу.
Ответы:
Решение, упомянутое в « .gitignore file not ignoring », немного экстремально, но должно работать:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( Убедитесь , что для совершения первого изменения , которые вы хотите сохранить , чтобы избежать любых инцидентов , как jball037 комментариев ниже . Вариант будет держать ваши файлы нетронутым на жестком диске , хотя.)--cached
У вас также есть другое, более детальное решение в посте блога « Заставить Git игнорировать уже отслеженные файлы »:
git rm --cached `git ls-files -i --exclude-standard`
Бассим предлагает в своей редакции :
В случае, если вы получите сообщение об ошибке, например
fatal: path spec '...' did not match any files
, могут быть файлы с пробелами в их пути.Вы можете удалить все остальные файлы с опцией
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
но несопоставленные файлы останутся в вашем хранилище и должны будут быть удалены явно, заключив их путь в двойные кавычки:
git rm --cached "<path.to.remaining.file>"
Я могу неправильно понять, но вы пытаетесь удалить файлы, которые недавно игнорировались, или вы хотите игнорировать новые модификации этих файлов? В этом случае вещь работает.
Если вы хотите удалить проигнорированные файлы, ранее зафиксированные, используйте
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m ' cleanup ``
Я знаю, что это старый вопрос, но решение gracchus не работает, если имена файлов содержат пробелы. Решение VonC для имен файлов с пробелами состоит в том, чтобы не удалять их используя --ignore-unmatch
, а затем удалять их вручную, но это не будет работать хорошо, если их много.
Вот решение, которое использует массивы bash для захвата всех файлов.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'