本文所有的描述都可以在Git Bash中通过git help ignore
命令获取,本文仅仅是用更通俗的描述配以示例以方便新手配置。
三种不同作用域的ignore文件
Git 下设置ignore文件共有三种方式,分别是:
- 设置为全局,所有的repo都会共用该设置;
- 设置为单个repo专用,但该设置会被同步至远程仓库,在clone该repo时会同时将该设置clone至本地;
- 设置为单个repo专用,且该设置不会同步至远程仓库,仅供本地的repo使用。
以上三种方式的实现方式分别为:
- 全局设置
编辑用户账户文件夹(ex,C:/User/Sea
)下的.gitconfig
文件,编辑后的.gitconfig
示例如下:
[user]
name = sea
email = sea@gmail.com
[core]
excludesfile = ~/gitignore.txt
其中,与ignore相关的设置代码部分是
[core]
excludesfile = ~/gitignore.txt
~/gitignore.txt
可以为任意路径下的任意文件,可自行命名,.gitconfig
文件中仅仅是引用该文件的路径。具体的ignore设置就是在该文件中设置,将在下文中讲解。
- 单个repo专用且可同步至远程仓库
在repo根目录下新建.gitignore
文件,文件名不可更改。在Win系统下,不允许新建以.
开头的文件或文件夹,因此需要在Git Bash中新建,参考代码如下:
cd c:/workspace/somerepo
vim .gitignore
在编辑结束后,:wq
保存退出即可。
- 单个repo专用且不同步至远程仓库
直接编辑repo根目录下的.git/info/exlude
文件。
ignore文件的设置语法
在上文的三种不同作用域的设置方法中,都需要在某一个文件(c:/user/sea/gitignore.txt
或c:/workspace/somerepo/.gitignore
或c:/workspace/somerepo/.git/info/exclude
)中用特定的语法设置希望被忽略的文件。常用语法介绍如下:
# 以#开头的行都是注释
# 忽略*.o和*.a文件(常见的编译过程中产生的文件)
*.[oa]
# 忽略*.c和*.C文件,somefile.b除外,!用于在在某规则之后增加例外
*.[bB]
!somefile.b
# 忽略somepath文件和somepath目录
dbg
# 只忽略somepath目录,不忽略somepath文件
somepath/
# 只忽略somepath文件,不忽略somepath目录
somepath
!somepath/
# 只忽略当前目录下的somepath文件和目录,子目录的somepath不在忽略范围内
/somepath
注意
若通过以上几种方法设置了对somefile的忽略之后,通过git status查看仍显示somefile状态。说明在设置ignore参数之前,在git库中已存在了这个文件,因为之前push过该文件,因此不起作用。
解决方法为:在本地删除该文件,并commit+push。之后的所有操作中可会忽略该文件。