有时你开启了一个新的项目, 运行了 cargo inituv initgo mod init

这些命令创建了工作所需要的必要文件, 同时也在 .gitignore 文件中添加了以下内容

PLAINTEXT
target
__pycache__
bin
Click to expand and view more

一切都很顺利, 你继续开发新功能, 等到时机成熟时就将项目发布到了 Git 托管平台上

人们开始对你的项目感兴趣, 甚至有人决定为你实现一个新功能, 这简直是免费劳动力!

当你查看代码, 发现了一个格格不入的文件 .DS_Store, 你问那个人这是什么, 他说他根本不知道

然后你只是将该文件从分支里面删除, 并把文件名加入了仓库的 .gitignore

PLAINTEXT
target
__pycache__
bin
.DS_Store
Click to expand and view more

现在代码合并到了 main, 仓库里只包含有用的内容

接着, 另一人使用基于 Web 技术的 IDE 提交了另一个合并请求, 一看发现有一个完全无关的目录也被提交了, 于是 .gitignore 里又增加了一条内容

PLAINTEXT
target
__pycache__
bin
.DS_Store
.vscode
Click to expand and view more

接下来, 有人使用 IntelliJ IDEA 提交了五百个 XML 文件和 .idea 目录, 这时又不得不将其加入 .gitignore

PLAINTEXT
target
__pycache__
bin
.DS_Store
.vscode
.idea
Click to expand and view more

多年后, .gitignore 已经有了上百行, 但是仍然时不时有各种奇怪的文件, 例如 testscriptsfooaquxdata.tar.gzstart.shcat ……

你就像西西弗斯一样, 因欺骗死亡和冥界而受到永无止境的惩罚

西西弗斯推着一块写着 .DS_Store 的巨石艰难上山

如何改变偷偷溜进来的文件循环呢? 去教育每一个提交合并请求的人肯定不行, 得通过自动化工具结局, 而不是主观沟通

幸运的是, 可以将这个黑名单变成白名单, 可以通过默认忽略所有文件, 然后只手动“取消忽略”明确允许的文件

PLAINTEXT
*

!.gitignore

# 白名单:任意位置下的 src 目录及其子文件夹
!src/
!src/**/
!src/**/*.rs
!Cargo.{toml,lock}

# 白名单:项目根目录下的 pysrc 目录
!/pysrc/
!/pysrc/*.py
!pyproject.toml
!uv.lock

!/cmd/
!/cmd/*.go
!main.go
!go.{mod,sum}

!/docs/
!/docs/*.md
Click to expand and view more

现在, 没人再能不小心提交不该提交的文件了. Git 会自动忽略所有文件, 只允许那些明确列入白名单的文件.

这种做法也具备一定的“面向未来”的能力——当然, 前提是以后不会有某个 IDE 把 src/ide.rs 当成保存项目配置的理想文件路径, 但愿那一天永远不会到来…

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut