git 取消对指定的文件跟踪

作者

使用git的时候,有些文件比如图片或者编译产生的文件,是没有必要纳入版本库。有时候会无意的把这些不需要跟踪的文件,纳入了版本库。这个时候就需要把他们移除版本库。防止跟踪的文件过多。

git 删除(忽略)对跟踪的文件
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中。

回复

邮箱地址不会被公开。