前段时间我将我的 .gitignore
文件设置为不跟踪文件夹 my_folder
:
my_folder/
现在我只想跟踪所述文件夹中名为 my_file.md
的给定文件。在使 .gitignore
看起来像这样之后:
my_folder/
!my_folder/my_file.md
并检查:
git status
该文件未显示为要提交的更改。
我做错了什么?
添加
我尝试将我的 .gitignore
文件更改为:
my_folder/*
!my_folder/my_file.md
按照建议,但是文件仍然没有显示为在 git status
之后提交的更改。我需要重置某些东西吗?
加2
尝试使用 git add my_folder/my_file.md
添加文件返回:
The following paths are ignored by one of your .gitignore files:
my_folder/my_file.md
Use -f if you really want to add them.
fatal: no files added
命令 git check-ignore -v my_folder/my_file.md
给出:
.gitignore:1:my_folder/* my_folder/my_file.md
最佳答案
要添加到“.gitignore
exclude folder but include specific subfolder”,调试这些 .gitignore 文件的一种好方法是使用 git check-ignore
(Git 1.8.4+):
git check-ignore -v my_folder/my_file.md
由于 my_folder/
规则,您会看到它仍然被忽略。
那是因为如果文件的父目录被排除,则不可能重新包含该文件。(*
)
(*
:除非在 git 2.?+ 中满足某些条件,见下文)
这就是为什么忽略该文件夹中的文件(my_folder/*
,而不是文件夹本身)允许您排除一个。
当然,您可以强制添加忽略的文件(git add -f my_folder/my_file.md
),但这不是本答案的重点。
重点是解释为什么在 .gitignore
中添加 !my_folder/my_file.md
不适用于 git 2.6 或更低版本。
请注意,使用 git 2.9.x/2.10(2016 年年中?),如果文件的父目录被排除在外,则可能会重新包含该文件 if there is no wildcard in the path re-included .
Nguyễn Thái Ngọc Duy (pclouds
)正在尝试添加此功能:
- commit 506d8f1对于 git v2.7.0,在 commit 76b620d 中还原git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0,...在 commit 5cee3493 中恢复(!) git 2.8.0-rc4.
所以在这里,对于 git 2.8+,这会起作用:
/my_folder
!my_folder/my_file.md
关于git - 跟踪忽略目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189082/