【git】gitignore
gitignore
git专门有个文件用来管理那些不被纳入版本库的文件,这个文件是 [.gitignore],所有不被包含的都能放进去,但这个是有前提的。
前提
前提是文件如果没被git客户端tracked,那么该文件是可以直接添加到 [.gitignore] 中的;
否则,如果文件先被track到git项目中,那么即使该文件路径被加到 [.gitignore] 中,该文件的修改也是会被git项目跟踪到的。
实践1
模拟已经tracked到项目,查看文件的状态。
$ cat .gitignore .idea .env $ git check-ignore -v .idea .gitignore:1:.idea .idea $ git check-ignore -v .env [这里显示的是空行]
同样都在gitignore文件中,为什么一个文件检查ignore状态是通过的,一个检查是失败的?
这里就有个区别:因为我们之前提交过[.env]文件,但是未提交过[.idea]。
这里要回顾下前提。
实践2
如果一个文件被tracked,则加入到 [.gitignore] 是失效的。
$ vim .env [edit some line] $ git status .env 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: .env $ git check-ignore -v .env [这里输出的是空行,表示验证ignore失败]
这里能够看到,一个被tracked到项目中的文件,它的修改是能够被跟踪到的。
实践3
我们要如何操作?才能将该文件包含到gitignore中,从而它的修改删除状态,不会被git所跟踪
$ git rm .env rm '.env' $ git status .env On branch branch_v1 Your branch is up-to-date with 'origin/branch_v1'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: .env $ git commit -m 'Remove: .env' [branch_v1 bebee11] Remove: .env 1 file changed, 7 deletions(-) delete mode 100755 .env $ git push origin branch_v1:branch_v1 ....... $ git check-ignore -v .env .gitignore:2:.env .env
最后可以看到,检查ignore状态是成功命中的。
回顾
如果一个文件已经包含在 [.gitignore] 文件中,但是它的修改仍然可以被跟踪到,那么这个文件是被tracked到项目中的,在gitignore包含它之前,它已经提交到项目中了。
解决办法:将该文件从git项目中删除掉即可。
具体操作:
1,将该文件备份到另一文件;
2,操作git命令,将该文件删除掉,然后commit & push到远程;
3,修改 [.gitignore] 文件,把该文件包含进去,然后git commit&push;
4,把1备份的文件重命名会原始文件,原始文件仍然在本地,但是不会被git所管理。
大致操作如下:
1, cp src_file src_backup
2, git rm [src_file]; git commit -m ''; git push origin;
3, vim .gitignore; git commit -m ''; git push origin;
4, cp src_backup src_file; rm src_backup;
更多扩展:
高级-Git官方:https://git-scm.com/docs/gitignore