在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文件所覆盖。以下是一些排查方法:
1. 确认.gitignore文件是否已经添加到Git仓库中。执行以下命令:
$ git status
如果.gitignore文件未被追踪,执行以下命令将其添加到Git仓库中:
$ git add .gitignore
$ git commit -m "add .gitignore file"
2. 确认.gitignore文件中的规则是否正确。建议使用绝对路径来定义规则,避免相对路径带来的问题。并且建议在.gitignore文件中添加注释,方便他人理解。
3. 确认是否有其他.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文件夹。