在Git项目中,我们经常需要忽略一些文件或文件夹,以避免提交到Git仓库,例如编译生成的文件、日志文件、缓存文件等。Git提供了忽略文件夹的功能,本文将从多个方面详解Git的忽略文件夹功能。
一、git忽略文件夹的命令
在Git中,我们可以使用.gitignore
文件来指定要忽略的文件或文件夹。我们可以使用git命令来创建.gitignore
文件,并将其添加到Git仓库中。具体步骤如下:
$ touch .gitignore
$ git add .gitignore
$ git commit -m "add .gitignore file"
在.gitignore
文件中,我们可以使用通配符匹配文件或文件夹,例如:
# 忽略日志文件
*.log
# 忽略编译生成的文件夹
build/
# 忽略指定文件
config.ini
以上配置将会忽略所有以.log
结尾的文件、build
文件夹以及config.ini
文件。
二、git忽略文件自动更新
通常情况下,我们对.gitignore
文件进行修改后,Git仓库中已经存在的文件或文件夹不会受影响,需要手动将其从Git仓库中删除才能生效。但是,如果我们在.gitignore
文件中添加了一个新规则,Git会自动忽略匹配到的文件。例如:
# 忽略所有.log文件
*.log
# 忽略指定目录下的所有.class文件
/foo/bar/*.class
如果我们在使用Git时添加了一个新的.log
文件或/foo/bar
目录下的.class
文件,Git会自动将其忽略。
三、git忽略文件夹下所有文件
有时候,我们需要忽略一个文件夹中的所有文件,例如忽略某个文件夹下的node_modules
目录。在.gitignore
文件中,我们可以使用 ./
相对路径来匹配当前文件夹,例如:
# 忽略当前文件夹下的node_modules目录
./node_modules/
注意,在匹配文件夹时,最后一定要添加 /
,否则Git会将其识别为文件。
四、gitignore忽略文件夹
在某些情况下,我们需要将文件夹从Git仓库中完全删除,包括历史记录。这时候,我们可以使用git rm
命令和git commit
命令将其从Git仓库中删除。以下是具体的步骤:
$ git rm -r --cached foldername
$ git commit -m "remove foldername from git"
以上命令会将指定的文件夹从Git仓库中彻底删除,包括历史记录。如果不希望删除历史记录,可以从.gitignore
文件中删除相应的规则,并使用以下命令将其重新添加到Git仓库中:
$ git add -f foldername
$ git commit -m "re-add foldername to git"
五、git忽略文件夹不起作用
有时候,在.gitignore
文件中定义的规则不起作用,导致被忽略的文件或文件夹仍然出现在Git仓库中。这通常是因为.gitignore
文件没有被正确地添加到Git仓库中,或者被另一个.gitignore
文件所覆盖。以下是一些排查方法:
- 确认
.gitignore
文件是否已经添加到Git仓库中。执行以下命令:
$ git status
如果.gitignore
文件未被追踪,执行以下命令将其添加到Git仓库中:
$ git add .gitignore
$ git commit -m "add .gitignore file"
- 确认
.gitignore
文件中的规则是否正确。建议使用绝对路径来定义规则,避免相对路径带来的问题。并且建议在.gitignore
文件中添加注释,方便他人理解。 - 确认是否有其他
.gitignore
文件所覆盖。如果有多个.gitignore
文件,Git会将其合并,如果有重复的规则,则后面的规则会覆盖前面的规则。
六、git忽略文件夹及子文件夹
如果我们希望忽略某个文件夹及其所有子文件夹中的文件,可以在.gitignore
文件中使用一个通配符 **
。例如:
# 忽略foo文件夹及其所有子文件夹中的.log文件
foo/**/*.log
以上规则会忽略foo
文件夹及其所有子文件夹中所有以.log
结尾的文件。
七、git忽略文件夹内层所有文件
有时候,我们需要忽略一个文件夹中的所有文件,但是保留这个文件夹本身。例如,忽略node_modules
文件夹中的所有文件,但是不忽略node_modules
文件夹本身。在.gitignore
文件中,我们可以使用以下规则来实现:
# 忽略node_modules文件夹中的所有文件
node_modules/*
# 但是不忽略node_modules文件夹本身
!node_modules/
以上规则将会忽略node_modules
文件夹中的所有文件,但是不忽略node_modules
文件夹本身。
八、git忽略文件夹中的某个文件夹
有时候,我们需要忽略一个文件夹中的某个文件夹,例如忽略vendor
文件夹。我们可以在.gitignore
文件中使用 !
来取消忽略。例如:
# 忽略vendor文件夹
vendor/
# 但是不忽略vendor/assets文件夹
!vendor/assets/
以上规则会忽略vendor
文件夹,但是不忽略vendor/assets
文件夹。
九、vscode git忽略文件夹
如果您使用Visual Studio Code进行开发,可以使用.vscode/settings.json
文件来配置忽略文件夹。您可以在该文件中添加一个"files.exclude"
属性,来指定要忽略的文件或文件夹。例如:
{
"files.exclude": {
"**/.git": true,
"**/node_modules": true,
"**/build": true,
"**/dist": true
}
}
以上配置将会忽略.git
文件夹、node_modules
文件夹、build
文件夹和dist
文件夹。
十、git忽略.idea文件夹
如果您使用IntelliJ IDEA进行开发,可以在.gitignore
文件中加入以下规则来忽略.idea
文件夹:
# 忽略.idea文件夹
.idea/
如果您希望不忽略某个.idea
文件夹下的文件,可以在.gitignore
文件中添加以下规则:
# 忽略.idea文件夹
.idea/
# 但是不忽略.idea/codeStyles文件夹
!.idea/codeStyles/
以上规则将会忽略.idea
文件夹,但是不忽略.idea/codeStyles
文件夹。