Ignoring any 'bin' directory on a git project

Ignoring any ‘bin’ directory on a git project

技术背景

在Git项目中,有时我们希望忽略特定名称的目录,比如bin目录,以避免将编译生成的文件或临时文件纳入版本控制。在Git 1.8.2版本之前,**.gitignore文件中没有特殊含义,从1.8.2版本开始,Git支持**表示零个或多个子目录。

实现步骤

配置.gitignore文件

若要忽略目录树中当前层级以下所有名为bin的目录,可在.gitignore文件中添加如下模式:

1
bin/

此模式会忽略所有名为bin的目录及其子目录,但不匹配名为bin的普通文件或符号链接。

若要同时匹配大小写的bin目录,可使用:

1
[Bb]in/

移除已跟踪的目录

若Git索引中已有bin文件夹且不再想跟踪,需显式移除它们。因为Git不会仅因新的.gitignore模式匹配而停止跟踪已跟踪的路径。可执行以下命令从索引中递归移除文件夹(仅从索引移除,不删除本地文件):

1
git rm -r --cached bin

刷新本地仓库

若要忽略本地仓库中已存在的目录,编辑.gitignore文件后,需在根目录运行以下命令刷新本地仓库并取消暂存被忽略的文件:

1
2
3
git rm --cached -r .
git add .
git commit -m "Update .gitignore"

核心代码

.gitignore文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

移除已跟踪文件并提交更改

1
2
3
git rm -r --cached .
git add .
git commit -m "Update .gitignore"

最佳实践

  • 使用全局.gitignore文件:对于通用的忽略规则,可创建全局.gitignore文件并配置Git使用它,避免在每个项目中重复配置。例如,可使用GitHub提供的VisualStudio.gitignore文件。
  • 定期清理索引:定期检查并清理Git索引中不再需要跟踪的文件和目录,保持版本库的整洁。

常见问题

.gitignore文件不生效

.gitignore文件配置后仍无法忽略某些文件或目录,可能是这些文件已被纳入版本控制。此时需先从索引中移除这些文件,再提交更改:

1
2
3
git rm -r --cached <file_or_directory>
git add .
git commit -m "Update .gitignore"

大小写敏感问题

在某些情况下,.gitignore文件的匹配可能是大小写敏感的。若要同时匹配大小写的目录名,可使用方括号指定大小写范围,如[Bb]in/

特殊字符或路径问题

若要忽略特定子目录下的bin目录,可使用**表示零个或多个子目录,如**/bin/。但需注意,不同Git版本对**的支持可能不同。在Git 2.13.3及以后版本,直接在.gitignore文件中写bin应能忽略bin目录及其所有子目录和文件。


Ignoring any 'bin' directory on a git project
https://119291.xyz/posts/ignoring-any-bin-directory-on-a-git-project/
作者
ww
发布于
2025年6月24日
许可协议