使用git的时候,有些文件比如图片或者编译产生的文件,是没有必要纳入版本库。有时候会无意的把这些不需要跟踪的文件,纳入了版本库。这个时候就需要把他们移除版本库。防止跟踪的文件过多。
创建一个测试的环境
echo "file.txt" > file.txt
echo "tmp.tmp" > tmp.tmp
echo ".gitignore" > .gitignore
git init .
git add .
git commit -m 'git测试,取消跟踪跟踪的文件'
git rm --cached filename 对提交到版本库的文件停止跟踪
这里假设git不应该对文件tmp.tmp进行跟踪,进行下面的操作
git rm --cached tmp.tmp
# rm 'tmp.tmp' (输出的结果)
# 查看一下当前的状态
git status
#On branch master
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: tmp.tmp
#
#Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# tmp.tmp
可以看到从版本库中删除了文件 tmp.tmp,删除的是版本库中文件,工作区的文件是没有被删除的。同时 没有被跟踪的文件是 tmp.tmp 。这个时候可以把不需要跟踪的文件写入 .gitignore 中
echo "*.tmp" >> .gitignore
# 看下现在的状态
#git status
#On branch master
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: tmp.tmp
可以看到,已经不再跟踪 tmp.tmp 文件了。
后记得提交这次更改
git commit -m 'git删除了不应该被跟踪的文件 tmp.tmp'
### 后看下状态
git status
#On branch master
#nothing to commit, working tree clean
了解更多
暂时性的忽略一些文件 git update-index --assume-unchanged file.txt, 意思是这个可以暂时性的忽略文件 file.txt的变动。
# 修改一下这个文件
echo "假装忽略一下这个文件" >> file.txt
# git 已经发现了这个文件的变化
git status
#On branch master
#Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: file.txt
#
#no changes added to commit (use "git add" and/or "git commit -a")
# 假装忽略这个文件
git update-index --assume-unchanged file.txt
# 可以看到,已经停止了对临时性 file.txt 的跟踪
git status
#On branch master
#nothing to commit, working tree clean
# 删除假装不更新
git update-index --no-assume-unchanged file.txt
git status
#On branch master
#Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: file.txt
可以看到文件已经被重新进行了跟踪。好的习惯应该,一开始就把不需要跟踪的文件,写入到 .gitignore中。