NYC's Blog - Git http://niyanchun.com/tag/git/ .gitignore文件 http://niyanchun.com/gitignore-file.html 2016-11-17T22:02:00+08:00 我们经常会在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相同。祝使用愉快。