0509---关于 gitignore

关于 gitignore

Git 是开源的分布式版本控制系统,对于Git系统不需要管理的文件,可以通过配置gitignore来实现,本文就配置 gitignore应注意的问题进行说明。

一 配置 gitignore的时机

在规划git版本控制时,就应该提前规划 gitignore规则,因为已经被git 追踪管理的文件是不受后来配置gitignore模式影响的。

二 gitignore 概述

1 忽略模式来源

Git在决定是否忽略一个文件(路径)时,通常会检查多个忽略模式来源,优先级从高到低(同一级别的优先级,由最后的匹配模式决定结果)依次如下:

  1. 从命令行中读取的忽略模式;
  2. 当前目录下.gitignore文件定义的忽略模式;
# windows下的操作步骤
# 新建目录 git-ig-root
# 进入 git-ig-root,右键 Git Bash Here 启动git操作窗口
# 在顶层工作目录编写.gitignore文件,定义忽略模式。
$ touch .gitignore
vim .gitignore
#修改.gitignore文件,添加一行文本,内容是 *.ig
$ git init
$ touch hello.txt
$ touch wyf.ig
$ git add ./
# 观察 git 当前状态,说明.gitignore文件配置的忽略模式已经生效 
$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        hello.txt
nothing added to commit but untracked files present (use "git add" to track)

  1. 父级目录定义的模式
模式从当前目录和父目录中读取,直至顶级目录。子目录中定义的.gitignore 模式覆盖父目录中定义的 .gitignore 模式。
  1. $GIT_DIR/info/exclude 文件中定义的模式;
# 在 windows下的操作
# 新建目录 git-ig
# 进入 git-ig,右键 Git Bash Here 启动git操作窗口
$ git init
#修改  git-ig/.git/info/exclude 文件,添加一行文本,内容是 *.ig
$ touch hello.txt
$ touch wyf.ig
$ git add ./
#观察git状态,发现 wyf.ig 文件没有被追踪管理,符合预期
$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.txt

  1. 配置变量 core.excludesFile 中定义的模式
Git相关的配置文件有三个,对于同一配置项,三个配置文件的优先级是 1 <2<3
1  /etc/gitconfig:包含了适用于系统所有用户和所有项目的值。
2  ~/.gitconfig:只适用于当前登录用户的配置。
3  位于git项目目录中的.git/config:适用于特定git项目的配置。

===============================
对于windows 平台
修改系统目配置文件gitconfig,在 git 安装目录的 /etc文件夹下
git config --system core.excludesfile "%USERPROFILE%/.gitignore"

修改用户家目录下的.gitconfig 文件
git config --global core.excludesfile "%USERPROFILE%/.gitignore"

git项目的配置文件在 .git目录下config文件,手工修改即可

2 模式定义存放在哪个级别取决于模式的使用方式

  1. 如果模式文件本身应该受版本控制,且通过 clone分发给其他开发者的项目,模式应该写入工程根目录的 .gitignore 文件;
  2. 特定存储库的专有模式且不需要与其他相关存储库共享(例如,存在于存储库内但为一个用户工作流程的辅助文件专用)应该写入$GIT_DIR/info/exclude文件。
  3. 用户希望 Git 在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常存放在用户配置文件 ~/.gitconfig 的 core.excludesFile
  4. 底层 Git 工具,例如 git ls-filesgit read-tree,读取由命令行选项指定的模式,或从命令行选项指定的文件中读取。

三 gitignore 模板

初学者往往搞不清不楚 gitignore如何书写,可以访问 https://github.com/github/gitignore,里面有各种类型工程项目的模板文件可供参考,然后结合自己的实际情况,稍加修改就可以完成自己项目的gitignore。

  1. maven项目的gitignore:https://github.com/github/gitignore/blob/main/Maven.gitignore
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

# Eclipse m2e generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
  1. C++项目的gitignore:https://github.com/github/gitignore/blob/main/C%2B%2B.gitignore
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

四 忽略模式的匹配语法

1. 空行不匹配任何文件,所以空行常用来提高可读性
2. 以#开头的行是注释行;在第一个#之前书写\,就转义了#,代表以#开始的模式
3. 尾部的空格被忽略,除非用反斜线包围起来(\...\)
4. !可选项前缀取反模式,先前匹配的忽略文件会重新包含进来。如果一个文件的父目录匹配了忽略语法,那么这个文件就不能再包含进去。
5. 斜线/用来分隔目录,/可出现在搜索模式的开始、中间和末尾。
6. 如果模式以 /开始或在模式的中间有/,则该模式是相对于特定.gitignore文件本身的目录级别的。否则,模式也可能匹配低于.gitignore级别的任何级别。
7. 如果/出现在模式的末尾,则此模式只匹配目录,否则,模式可以同时匹配文件和目录。
8. 模式中2个连续的*匹配多级目录,但不同的位置具有特殊的意义
   **/foo :匹配任何地方的 foo文件或foo文件夹
   /**    :匹配内部的所有内容,如 abc/** ,匹配abc目录中的任何文件
   a/**/b :代表任何连续的目录,如 a/b,a/x/b, a/x/y/b
  

四 其它应注意的问题

1. 强制添加一个文件到 git

对于生效的 gitignore 模式,仍然可以强制加入 git的追踪和管理。

git add -f file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值