gitignore:忽略子文件夹中除特定文件类型之外的所有内容

gitignore: Ignore everything but specific file type in sub folder

我有一个 .gitignore 文件似乎无法正常工作。它没有按预期上传子目录中的任何文件,但我添加了一个除了所有 .cs 文件之外的文件,但子目录仍然是空的。这是我的代码:

/*

!.gitignore

!my_repo/build/game/Assets/Scripts/*.cs

除了 .cs 文件和 .gitignore 文件,我什么都不想要。但 .cs 文件似乎仍未被 git 拾取。谢谢

PS.

我也试过这样做,但也没用:

!*.cs

您还需要包含该目录。参见 https://git-scm.com/docs/gitignore#_examples

# Ignore all (assumes ignore is in my_repo/build/.gitignore)
/*
!.gitignore    

# Exempt directories
# Also ignore all files except the sub directories in the path
!game/
game/*
!game/Assets
game/Assets/*
!game/Assets/Scripts
game/Assets/Scripts/*

# Except your CS files
!game/Assets/Scripts/*.cs

-- 更新以增加清晰度--

这似乎违反直觉,但您必须首先 明确地包含 目录,因为:

It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.

所以你必须包含目录,然后默认忽略目录中的所有内容,然后创建你的豁免。

!my_repo/build/game/Assets/Scripts/*.cs 包含根文件夹,但它不应该,!*.cs 仅在根文件夹中查找。

应该是这样的 /* !.gitignore !**/*.cs

然后用git添加-f *