Git忽略文件的几种方法,以及.gitignore文件的忽略规则
目录
-
-
- .gitignore文件
- Git忽略规则以及优先级
- .gitignore文件忽略规则
- 常用匹配示例:
- 有三种方法可以实现忽略Git中不想提交的文件。
-
- 1、在Git项目中定义 .gitignore 文件(优先级最高,推荐!)
- 2、在Git项目的设置中指定排除文件
- 3、定义Git全局的 .gitignore 文件(个人使用方便,但是团队的话不适用,因为是在自己电脑设置的全局)
- 如何检查自己写的ignore规则是否有效?
- gitignore规则不生效
-
.gitignore文件
在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。
注意:如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。
Git忽略规则以及优先级
详细的忽略规则可以参考官方英文文档。
在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
- 从命令行中读取可用的忽略规则
- 当前目录定义的规则
- 父级目录定义的规则,依次递推,目录结构较高的.gitignore文件被较近的.gitignore文件中相同的配置所覆盖
- .git/info/exclude文件中定义的规则
- core.excludesfile中定义的全局规则
.gitignore文件忽略规则
- 空格不匹配任意文件,可作为分隔符,方便阅读。
- #用于注释,\表示转义(如需使用实体\,则要加引号”\”)。
- *可以匹配任何字符(0或多个)。
- ?可以匹配单个字符。(不可以匹配/)
- /用于分隔目录:
- 当/在开头时,表示从.gitignore文件所在的根目录开始匹配。
- 当/在末尾时,只匹配目录及该目录下面的全部内容,否则同名的目录和文件都将匹配。
- !开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用!也不会再次被包含。
- []通常用于匹配一个字符列表,如:a[mn]z可匹配amz和anz。
- **用于匹配多级目录,如a/**/b可匹配a/b,a/x/b,a/x/y/b。
注意:git 对于 .gitignore配置文件是按行从上到下进行规则匹配的。
常用匹配示例:
- #: 表示此为注释,将被Git忽略。
- *:表示忽略所有。
- */:表示忽略所有目录。
- 1.txt: 忽略任意目录(当前目录即根目录及其子文件夹)下的1.txt的文件夹或同名文件,例如1.txt,/pojo/1.txt,/pojo/a/1.txt,若是文件夹则该文件夹下的所有内容都会被忽略。
- *.txt: 忽略任意目录(当前目录即根目录及其子文件夹)下的所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略。
- /1.txt:忽略根路径下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
- /*.txt: 忽略根路径下的所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略 /pojo/1.txt。
- pojo:忽略任意目录(当前目录即根目录及其子文件夹)下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
- /pojo: 忽略根目录下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
- pojo/: 忽略目录 pojo下的全部内容;注意,不管是根目录下的/pojo/目录,还是某个目录下的 /child/pojo/,以及pojo文件夹里面的全部内容都会被忽略,同时忽略pojo文件夹,以pojo命名的文件不会忽略。
- pojo/*:忽略当前路径下pojo文件夹下的全部内容,pojo文件夹不忽略。
- /pojo/: 忽略根目录下的pojo文件夹,该文件夹下的所有内容都会被忽略,以pojo命名的文件不会忽略。
- pojo/1.txt:忽略当前路径下的pojo下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo文件夹。
- /pojo/1.txt:忽略根目录下的pojo文件下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo文件夹。
- pojo/*.txt: 忽略当前路径下的pojo文件夹下所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo/common/1.txt,不忽略/a/pojo/1.txt,不忽略pojo文件夹。
- pojo/1.txt/*:忽略当前路径下的pojo文件夹下的1.txt文件夹中的所有文件,1.txt文件夹不忽略。
- **/pojo: 忽略任意目录下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。/pojo,/pojo/1.txt,/a/pojo,/a/pojo/1.txt,a/b/pojo等。
- a/**/b: 忽略当前路径下的以a文件夹为开始,中间可以有0个或任意个目录的b文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,a/b,a/x/b,a/x/y/b,a/x/y/b/1.txt等。
- /pojo/*和!/pojo/1.txt: 忽略pojo目录下的所有文件但不忽略pojo目录下的1.txt文件,pojo文件夹不忽略。
注意上面的/pojo/*不能写为/pojo/,否则父目录被前面的规则排除掉了,1.txt文件虽然加了!过滤规则,也不会生效!
有三种方法可以实现忽略Git中不想提交的文件。
1、在Git项目中定义 .gitignore 文件(优先级最高,推荐!)
这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹及其子文件夹下的文件的Git提交行为。
.gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。
在 .gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:
样例一:
HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr mvnw mvnw.cmd .mvn ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ logs/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/
样例二:
###################### # Project Specific ###################### /target/www/** /src/test/javascript/coverage/ /src/test/javascript/PhantomJS*/ ###################### # Node ###################### /node/ node_tmp/ node_modules/ npm-debug.log.* ###################### # SASS ###################### .sass-cache/ ###################### # Eclipse ###################### *.pydevproject .project .metadata tmp/ tmp/**/* *.tmp *.bak *.swp *~.nib local.properties .classpath .settings/ .loadpath .factorypath /src/main/resources/rebel.xml # External tool builders .externalToolBuilders/** # Locally stored "Eclipse launch configurations" *.launch # CDT-specific .cproject # PDT-specific .buildpath ###################### # Intellij ###################### HELP.md .idea *.iws *.iml *.ipr mvnw mvnw.cmd .mvn *.ids *.orig classes/ ###################### # Visual Studio Code ###################### .vscode/ ###################### # Maven ###################### /log/ target/ ###################### # Gradle ###################### .gradle/ /build/ ###################### # Package Files ###################### *.jar *.war *.ear *.db ###################### # Windows ###################### # Windows image file caches Thumbs.db # Folder config file Desktop.ini ###################### # Mac OSX ###################### .DS_Store .svn # Thumbnails ._* # Files that might appear on external disk .Spotlight-V100 .Trashes ###################### # Logs ###################### *.log ###################### # Others ###################### *.class *.*~ *~ .merge_file* ###################### # Gradle Wrapper ###################### !gradle/wrapper/gradle-wrapper.jar ###################### # Maven Wrapper ###################### !.mvn/wrapper/maven-wrapper.jar ###################### # ESLint ###################### .eslintcache /.apt_generated/ server/package-lock.json server/mochawesome-report/
2、在Git项目的设置中指定排除文件
这种方式只是临时指定该项目的行为,需要编辑当前项目下的 .git/info/exclude 文件,然后将需要忽略提交的文件写入其中。
需要注意的是,这种方式指定的忽略文件的根目录是项目根目录。
3、定义Git全局的 .gitignore 文件(个人使用方便,但是团队的话不适用,因为是在自己电脑设置的全局)
除了可以在项目中定义 .gitignore 文件外,还可以设置全局的 git .ignore 文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。
1) 创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore).
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用
户家目录下
git.ignore 文件模版内容如下:
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* .classpath .project .settings target .idea *.iml
2) 在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)我的是在C:\Users\PC.gitconfig
[user] email = xuxin@wondertek.com.cn name = xuxin666 [credential "https://gitee.com"] provider = generic [core] excludesfile = C:/Users/PC/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
如何检查自己写的ignore规则是否有效?
git check-ignore -v {文件或目录路径}




gitignore规则不生效
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先修改.gitignore文件,之后在执行以下内容先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
同样的,已被.gitignore忽略的文件是无法加入版本库的。
解决方法:要纳入版本管理,先移除规则。
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/3a47da8142.html
