.gitignore的使用

.gitignore配置文件规则

在 .gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

  1. *.log
  2. *.temp
  3. /vendor

定义全局的 .gitignore 文件

除了可以在项目中定义 .gitignore 文件外,还可以设置全局的 git .gitignore 文件来管理所有Git项目的行为。

  1. git config --global core.excludesfile ~/.gitignore

Git 忽略规则优先级

在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源 优先级如下(由高到低):

  • 从命令行中读取可用的忽略规则
  • 当前目录定义的规则
  • 父级目录定义的规则,依次地推
  • $GIT_DIR/info/exclude 文件中定义的规则
  • core.excludesfile中定义的全局规则

Git 忽略规则匹配语法

在 .gitignore 文件中,每一行的忽略规则的语法如下:

  • 空格 不匹配任意文件,可作为分隔符,可用反斜杠转义
  • # 开头 的模式标识注释,可以使用反斜杠进行转义
  • ! 开头 的模式标识否定,该文件将会再次被包含,
    • 如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  • / 结束 的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  • / 开始 的模式匹配项目跟目录
    • 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  • **匹配 多级目录,可在开始,中间,结束
  • ? 通用匹配单个字符
  • [] 通用匹配单个字符列表

.gitignore常用规则

常用匹配示例:

  1. bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
  2. /bin: 忽略根目录下的bin文件
  3. /*.c: 忽略 cat.c,不忽略 build/cat.c
  4. debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
  5. **/foo: 忽略/foo, a/foo, a/b/foo
  6. a/**/b: 忽略a/b, a/x/b, a/x/y/b
  7. !/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
  8. *.log: 忽略所有 .log 文件
  9. config.php: 忽略当前路径的 config.php 文件

.gitignore常用规则-JAVA

  1. # Operating System Files
  2. *.DS_Store
  3. Thumbs.db
  4. *.sw?
  5. .#*
  6. *#
  7. *~
  8. *.sublime-*
  9. # Build Artifacts
  10. .gradle/
  11. build/
  12. target/
  13. bin/
  14. dependency-reduced-pom.xml
  15. # Eclipse Project Files
  16. .classpath
  17. .project
  18. .settings/
  19. # IntelliJ IDEA Files
  20. *.iml
  21. *.ipr
  22. *.iws
  23. *.idea

.ignore规则配置-C++

  1. # User ================================
  2. # 用户自定义的其他忽略文件
  3. # Clion ================================
  4. # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
  5. # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
  6. # User-specific stuff
  7. .idea/**/workspace.xml
  8. .idea/**/tasks.xml
  9. .idea/**/usage.statistics.xml
  10. .idea/**/dictionaries
  11. .idea/**/shelf
  12. # Generated files
  13. .idea/**/contentModel.xml
  14. # Sensitive or high-churn files
  15. .idea/**/dataSources/
  16. .idea/**/dataSources.ids
  17. .idea/**/dataSources.local.xml
  18. .idea/**/sqlDataSources.xml
  19. .idea/**/dynamic.xml
  20. .idea/**/uiDesigner.xml
  21. .idea/**/dbnavigator.xml
  22. # Gradle
  23. .idea/**/gradle.xml
  24. .idea/**/libraries
  25. # Gradle and Maven with auto-import
  26. # When using Gradle or Maven with auto-import, you should exclude module files,
  27. # since they will be recreated, and may cause churn. Uncomment if using
  28. # auto-import.
  29. # .idea/modules.xml
  30. # .idea/*.iml
  31. # .idea/modules
  32. # *.iml
  33. # *.ipr
  34. # CMake
  35. cmake-build-*/
  36. # Mongo Explorer plugin
  37. .idea/**/mongoSettings.xml
  38. # File-based project format
  39. *.iws
  40. # IntelliJ
  41. out/
  42. # mpeltonen/sbt-idea plugin
  43. .idea_modules/
  44. # JIRA plugin
  45. atlassian-ide-plugin.xml
  46. # Cursive Clojure plugin
  47. .idea/replstate.xml
  48. # Crashlytics plugin (for Android Studio and IntelliJ)
  49. com_crashlytics_export_strings.xml
  50. crashlytics.properties
  51. crashlytics-build.properties
  52. fabric.properties
  53. # Editor-based Rest Client
  54. .idea/httpRequests
  55. # Android studio 3.1+ serialized cache file
  56. .idea/caches/build_file_checksums.ser
  57. # vscode ================================
  58. .vscode/*
  59. !.vscode/settings.json
  60. !.vscode/tasks.json
  61. !.vscode/launch.json
  62. !.vscode/extensions.json
  63. # C++ ================================
  64. Prerequisites
  65. *.d
  66. # Compiled Object files
  67. *.slo
  68. *.lo
  69. *.o
  70. *.obj
  71. # Precompiled Headers
  72. *.gch
  73. *.pch
  74. # Compiled Dynamic libraries
  75. *.so
  76. *.dylib
  77. *.dll
  78. # Fortran module files
  79. *.mod
  80. *.smod
  81. # Compiled Static libraries
  82. *.lai
  83. *.la
  84. *.a
  85. *.lib
  86. # Executables
  87. *.exe
  88. *.out
  89. *.app
  90. # CMake ================================
  91. bin/
  92. build/
  93. CMakeLists.txt.user
  94. CMakeCache.txt
  95. CMakeFiles
  96. CMakeScripts
  97. Testing
  98. Makefile
  99. cmake_install.cmake
  100. install_manifest.txt
  101. compile_commands.json
  102. CTestTestfile.cmake