一、“.gitignore”文件
在项目根路径下创建“.gitignore”文件,配置举例:
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.log
target/
这样git提交的时候就会自动忽略项目根路径下的这些文件。
二、忽略本地修改skip-worktree
若某个文件不在“.gitignore”文件的配置中,自己本地修改了但不想提交上去,可用:
git update-index --skip-worktree /path/to/file
例:git update-index --skip-worktree ./Demo.java 忽略当前目录下的Demo.java文件。
执行这条命令后,Git 就会忽略本地对这个文件的所有修改。现在可以放心大胆地 git add ./git add -u 啦!
副作用
这种方式也有一个副作用,那就是在pull拉取远程分支时,由于本地和远程文件存在不一致的更新,会导致冲突的问题。
处理冲突前,还需要先把已经忽略掉的文件再恢复回来,命令还比较好记,就是 --skip-worktree 换成 --no-skip-worktree 就可以了:
git update-index --no-skip-worktree /path/to/file
如果时间久了,忘了哪些文件被忽略了,那么可以通过 git ls-files -v 来查看,其结果中第一列打 H 标记的项目就是被忽略(Hide)的项目。我们可以通过 grep来将这些项目过滤出来。
git ls-files -v | grep -E -i /path/to/file
三、两种方式的比较
.gitignore
说明:显式地阻止提交文件。
优势:.gitignore 文件本身提交至远程仓库,全组共享忽略文件配置。
局限:如果项目已经存在远程仓库,即使被加入 .gitignore,仍然可以进行修改并提交。本地的修改会显示在 git status 结果中。
skip-worktree
说明:声明忽略文件的本地修改。
优势:本地可以对文件做一些个人定制。文件不会出现在 git status。
局限:拉取远程文件更新,或切换分支时有可能出现冲突,需要撤销忽略后手动解决冲突。