Git忽略除特定扩展名文件之外的所有文件,即使是在子目录中。

4

如何忽略除特定扩展名之外的所有文件,甚至考虑到子目录中的文件?

示例:我的玩具“存储库”

./foo.xyz  
./tmp/foo.xyz  
./tmp/foo.arg  
./.gitnore  

我希望保留foo.xyz和tmp/foo.xyz,但不包括foo.arg

我尝试了以下操作:

# gitignore file
*                                                                                                           
!*/                                                                                                         
!.gitignore
!*.xyz

然而,foo.arg将不会被忽略 :(
请问有什么办法可以递归地在子目录中进行操作吗?

你的代码库中是否有包含文件 foo.arg 的提交记录? - JSelser
在您粘贴的文本中,.gitignore 的第二行 * 后面和第三行 !*/ 后面有很多空格。这些在实际文件中吗?尽管末尾的空格会被忽略,但末尾的 制表符 不会被忽略,因此如果存在空格,则实际上是所有空格,还是其他形式的空格? - torek
是什么情况促使你想到这个解决方案的思路? - Thorbjørn Ravn Andersen
@JSelser 不,foo.arg 是一个新文件。 - jmborr
2个回答

2

请确保您的文件名为./.gitignore,而不是像您在问题中提到的那样./.gitnore(可能只是一个简单的拼写错误)。

要确保文件被忽略,请选择您知道已被忽略的文件并键入git check-ignore -v -- afile:您将看到您的.gitignore文件是否实际生效。

如果没有,请尝试:

git rm --cached -r .
git add .
git commit -m "apply .gitignore"

git check-ignore 解决了我的问题。我在 .gitignore 文件中有另一条规则,但我在问题中没有展示出来,而那个规则实际上允许 foo.arg。git check-ignore 向我展示了这个规则。非常感谢!!! - jmborr

1
这是一个 .gitignore 文件:
/Debug/      ignore a folder and all subdirectories.
/Release/
*.sdf        ignore all files in this format. (all in project directory)
sample.txt   ignore a file.

我认为您已经将文件添加并提交到了Git,现在想要忽略它。这是不可能的,您应该从Git中删除它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接