Удалите все файлы, уже добавленные в репозиторий git, на основе .gitignore - PullRequest
0 голосов
/ 10 марта 2019

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

мой обходной путь был:

  1. сначала я удалил все файлы из репозитория git,
  2. Затем я добавил файлы, которые не игнорируются .gitignore.

Таким образом, файлы были удалены, которые были добавлены (идентичны) сразу после этого. Это, конечно, неоптимальный, а не максимальный результат. Есть ли лучшее решение для этого более элегантного?

вот мои попытки финиша:

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git rm -r --cached .
rm 'AHK Studio Download Page.url'
rm 'ActionLists/ActionListNameFilter.inc.ahk'
rm 'ActionLists/ApplicationFrameWindow/ActionListNameFilter.inc.ahk'

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git commit -m 'Delete all the stuff'

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git rm -r -f .

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git commit -m 'Delete all the stuff'

Полагаю, если бы я использовал rm -r -f . вместо rm -r --cached ., я бы получил тот же эффект. После использования rm -r --cached ., к сожалению, в хранилище остались файлы, которых там быть не должно (в отношении .gitignore).

git rm -r -f . и commit + push удаляет все из репозитория git

1 Ответ

1 голос
/ 10 марта 2019

git ls-files - швейцарский армейский лист списка файлов с поддержкой индекса.

git ls-files --exclude-standard -ci 

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

git ls-files --exclude-standard -ci | git update-index --force-remove --stdin

или также удалить из рабочего дерева

git ls-files --exclude-standard -ciz | xargs  -r0 git rm -f 

Кстати, у меня есть git config --global alias.ls 'ls-files --exclude-standard, так что для меня Nuke-Em это

git ls -ciz|xargs -r0 rm -f
...