git - 如何忽略 git 存储库子目录中除单个文件外的所有内容?

标签 git gitignore

我有一个存储库,其中包含一个名为 mod/的子目录。我希望这个子目录连同其中的 README 文件一起包含在存储库中,但我不希望包含 mod/中的其他子目录。我已经尝试了几个建议的修复 here使用 .gitignore 并提交更改,但 git status 仍然显示正在跟踪 mod/中的所有内容。目前,我的 .gitignore 包含:

mod/* # Ignore everything in 'mod'...
!mod/README.md # ... except this.

但我也试过将第一行设置为:

/mod
mod/
./mod
./mod/*

和一些其他变体...

要在每次编辑 .gitignore 时“应用”这些设置,我运行:

git rm -r --cached .  
git add .gitignore
git add mod/README.md
git commit -m "banging my head on the wall"
git status

并且状态继续显示 mod/中未跟踪的文件。

最佳答案

我可以想到三个直观的选项:

  1. 添加一个单独的.gitignoremod:

    *
    !README.md
    
  2. 使用你的根级别 .gitignore,每行只有一个规则或注释,但不能同时有:

    ./mod/*
    !./mod/README.md
    

    我在这里使用./前缀来强调,但这并不是绝对必要的。由于所有路径都包含一个非尾部斜杠,因此它们将被解释为相对于 .gitignore 的目录而不管。

  3. 不要将 .gitignore 用于肯定规则:忽略 mod,然后执行

    git add -f mod/README.md
    

    Git 持续跟踪使用 -f/--force 标志添加的任何文件。

关于git - 如何忽略 git 存储库子目录中除单个文件外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51410403/

相关文章:

git - 为什么在github push 时git 不要求我输入用户名和密码?

git - 在我的本地仓库副本上运行 git reset --hard 时出现奇怪的行为

git - Sourcetree 在全局 .gitignore 中添加文件,而不是在存储库 .gitignore 中

asp.net-mvc - 通过 Gitignore 递归包含 Nuget DLL

git - 如何 gitignore Go 二进制文件?

git - 协作时如何管理配置文件?

git:当git没有注意到冲突时如何手动 merge 文件

git - 无法创建工作树目录 'example.com'。 : Permission denied

Git 子模块是脏的?

gitignore 以及如何忽略公共(public)目录名称及其内容