分段后从Git跟踪中删除某些扩展名的文件

时间:2016-06-02 19:26:15

标签: git version-control gitignore

我想知道在添加到Git跟踪后是否可以删除特定扩展名的文件。

具体来说,我有一个已经删除这些文件的.gitignore。但是,由于发生了事故,它们可能已被添加到跟踪中。我现在的计划是在.gitignore中指定的所有目录和文件上运行git rm --cached。但是我在解决指定为文件扩展名的条目时遇到了困难。

1 个答案:

答案 0 :(得分:2)

我会使用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