我们经常会在Github上面一些大型开源项目的代码中见到.gitignore
这文件。那它是干什么的呢?
我们知道git版本控制的目录下都有一个隐藏文件夹.git
(类UNIX系统中,.
开头的文件或文件夹都默认是隐藏的,Linux下可使用ctrl+h
快捷键显示隐藏文件,其他系统没用过),这个文件夹记录了有版本控制的文件。而且,还没有加入版本控制的文件会显示为“Untracked”。然后我们需要使用git add
命令把这些未纳入版本控制的文件加到版本库里面,并后续git commit; git push
。比如我下面的extra文件就还没有纳入到版本库中:
➜ extra git:(master) ✗ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
extra
nothing added to commit but untracked files present (use "git add" to track)
但是有的时候我们有些文件就是只需要在本地,而不需要纳入到版本控制中。我平时有几个特别典型的这种场景:
- IDE自己产生的一些配置文件不需要纳入到代码库中。比如IDEA产生的.idea文件夹、.iml文件等。
- 一些编译链接产生的临时文件。比如编译C代码产生的.o、.a文件不需要纳入到版本库。
- 一些软件自动产生的临时文件。比如vim、Emacs等产生的临时文件,office系列软件产生的临时文件等,这些文件大多以~开头。
- 一些本地自己的测试文件。
虽然,你可以在每次提交代码时稍微注意一些,不提交这些文件,但难免有不小心的时候。所以git提供了.gitignore
文件,写在这个文件里面的东西git会过滤掉,不纳入版本管理。这个文件支持POSIX基本的正则表达式(如果你对BRE不熟悉,可参见我之前的博客《Linux正则表达式》),而且它还满足以下规则:
- 所有空行或者以
#
开头的行都会被git忽略,即#
是注释行。 - 匹配模式可以以
/
开头防止递归。 - 匹配模式可以以
/
结尾指定目录。 - 要忽略指定模式以外的文件或者目录,可以在模式前加上
!
取反。
下面我们看个例子:
# 忽略掉所有.o、.a文件
*.[ao]
# 忽略掉所有~开头和结尾的文件
*~
~*
# 把 lib.a纳入到版本管理,即使之前已经忽略了所有.a文件
!lib.a
# 只忽略当前目录下的TODO文件
/TODO
# 忽略build目录下的所有文件
build/
# 忽略doc目录下所有.txt结尾的文件
doc/*.txt
有了这个文件后,你会发现你输入git status之后,凡是符合上述过滤条件的文件都不会再显示为“Untracked”状态了。如果你在为这个语法苦恼,那恭喜你:
https://github.com/github/gitignore
这个地方集结了各种场景的.gitignore文件,你可以直接拿过来用,你也可以稍微私人订制一下。比如提供的JetBrains系列IDE的.gitignore文件为:
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
# Sensitive or high-churn files:
.idea/dataSources/
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
# Gradle:
.idea/gradle.xml
.idea/libraries
# Mongo Explorer plugin:
.idea/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
而且这个设计在其他地方也可能会遇到,比如docker提供了.dockerignore
文件和Dockerfile配合使用,作用与.gitignore
相同。
祝使用愉快。
评论已关闭