如何忽略 git 存储库子目录中除单个文件外的所有内容?
How can I ignore everything in a git repository subdirectory except a single file?
我有一个存储库,其中包含一个名为 mod/ 的子目录。我希望这个子目录连同其中的 README 文件一起包含在存储库中,但我不希望包含 mod/ 中的其他子目录。我已经尝试了几个 here 使用 .gitignore 提出的修复并提交更改,但 git status
仍然显示 mod/ 中的所有内容都被跟踪。目前,我的 .gitignore 包含:
mod/* # Ignore everything in 'mod'...
!mod/README.md # ... except this.
但我也试过将第一行设置为:
/mod
mod/
./mod
./mod/*
和其他一些变体...
为了'apply'这些设置我每次编辑.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/ 中未跟踪的文件。
没有必要例外。忽略整个目录(mod/*
)然后
git add -f mod/README.md
git commit
-f
告诉 git 覆盖这个文件的忽略。 git 将继续跟踪它,而忽略其他所有内容。
这是可行的,因为 .gitignore
仅决定 git 如何处理 未跟踪的 文件。如果您强制 git 跟踪带有 -f
的文件,它在忽略文件中的事实是无关紧要的。
我可以想到三个直观的选项:
添加一个单独的.gitignore
到mod
:
*
!README.md
使用您的根级别 .gitignore
,每行仅 规则或评论,但不能同时使用:
./mod/*
!./mod/README.md
我在这里使用./
前缀来强调,但这并不是绝对必要的。由于路径都包含一个非尾部斜杠,因此它们将被解释为相对于 .gitignore
的目录,而不管。
不要使用 .gitignore
作为肯定规则:忽略 mod
,然后使用
git add -f mod/README.md
Git 持续跟踪使用 -f/--force
标志添加的任何文件。
我有一个存储库,其中包含一个名为 mod/ 的子目录。我希望这个子目录连同其中的 README 文件一起包含在存储库中,但我不希望包含 mod/ 中的其他子目录。我已经尝试了几个 here 使用 .gitignore 提出的修复并提交更改,但 git status
仍然显示 mod/ 中的所有内容都被跟踪。目前,我的 .gitignore 包含:
mod/* # Ignore everything in 'mod'...
!mod/README.md # ... except this.
但我也试过将第一行设置为:
/mod
mod/
./mod
./mod/*
和其他一些变体...
为了'apply'这些设置我每次编辑.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/ 中未跟踪的文件。
没有必要例外。忽略整个目录(mod/*
)然后
git add -f mod/README.md
git commit
-f
告诉 git 覆盖这个文件的忽略。 git 将继续跟踪它,而忽略其他所有内容。
这是可行的,因为 .gitignore
仅决定 git 如何处理 未跟踪的 文件。如果您强制 git 跟踪带有 -f
的文件,它在忽略文件中的事实是无关紧要的。
我可以想到三个直观的选项:
添加一个单独的
.gitignore
到mod
:* !README.md
使用您的根级别
.gitignore
,每行仅 规则或评论,但不能同时使用:./mod/* !./mod/README.md
我在这里使用
./
前缀来强调,但这并不是绝对必要的。由于路径都包含一个非尾部斜杠,因此它们将被解释为相对于.gitignore
的目录,而不管。不要使用
.gitignore
作为肯定规则:忽略mod
,然后使用git add -f mod/README.md
Git 持续跟踪使用
-f/--force
标志添加的任何文件。