Я хотел бы использовать find
для этого, так как она позволяет как задать шаблон имени файла (включая .extension) и выполнить команду на этом файле.
Вот пример, который делает процедуру вручную, для одного расширения файла одновременно (? Т.е. вновь отслеживаться)
/tmp/madphys $ git init .
Initialized empty Git repository in /tmp/madphys/.git/
/tmp/madphys HEAD$ touch lala.a
/tmp/madphys HEAD$ touch lala.b
/tmp/madphys HEAD$ mkdir dirdir
/tmp/madphys HEAD$ touch dirdir/bobo.a
/tmp/madphys HEAD$ git add .
/tmp/madphys HEAD$ git commit -m first
[master (root-commit) bfc10f1] first
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dirdir/bobo.a
create mode 100644 lala.a
create mode 100644 lala.b
/tmp/madphys master$ echo "*.a" > .gitignore
/tmp/madphys master$ git add -A .
/tmp/madphys master$ git commit -m ignore
[master 3e0d206] ignore
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
/tmp/madphys master$ find . -name "*.a" -type f -exec git rm --cached {} \;
rm 'dirdir/bobo.a'
rm 'lala.a'
/tmp/madphys master$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: dirdir/bobo.a
deleted: lala.a
/tmp/madphys master$ git commit -m "removed"
[master 87d95d6] removed
2 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 dirdir/bobo.a
delete mode 100644 lala.a
/tmp/madphys master$ tree
.
├── dirdir
│ └── bobo.a
├── lala.a
└── lala.b
1 directory, 3 files
/tmp/madphys master$ git status
On branch master
nothing to commit, working directory clean
это получает список недавно добавленных файлов, которые находятся в индексе «мерзавец дифференциала - -cached --diff-filter = A -name-only. Это может помочь, если неудача добавила посторонние файлы, а намеренная фиксация - нет. В противном случае git rm --cached - * .xxx должен удалить файл из индекса в соответствии с моим чтением git help rm – Gregg
Будет ли git rm --cached - * .xxx делать это для всех файлов и всех (под) каталогов? – MadPhysicist