Git以递归方式忽略将子目录中的所有文件列入白名单

时间:2017-03-29 14:01:28

标签: git

我的软件项目是模块化的。某些文件由开发人员在指定的子目录下提交,其他文件未解压缩以提供用于开发的环境运行时(Web资源),并且不应提交。

- webapp
   - common (provided)
   - error (provided)
   - secure
      - admin (provided)
      - audit (provided)
      - ftt (provided)
   - WEB-INF (to ignore)

我想忽略webapp 下的所有内容,但 /webapp/secure/ftt及其子目录下的所有文件。

我试过

/webapp
!/webapp/secure/ftt
但是Git仍然无视ftt。

我希望这些目录只包含.jsp.js个文件。但我不知道将来会发生什么(例如gif,pdf等)

如何告诉Git将/webapp/secure/ftt下的文件列入白名单并忽略/webapp下的所有其他内容?

根据我的研究,我发现如果没有列出每个特定的子目录和文件模式,可能是不可能的。

在@DevDonkey评论之后

[添加]我试图清空我的整个gitignore文件并留下他发布的内容

/webapp/*
!/webapp/secure/ftt

除了现在可用于索引的无用文件(例如.class文件)之外,因为我说我清空了gitignore,我发现sample.jsp仍然被忽略

See yourself

2 个答案:

答案 0 :(得分:1)

怎么样

/webapp/*
!/webapp/secure/ftt

在我当地工作。注意添加斜杠和通配符,因此git保留根文件夹,但随后处理其余的文件夹。

答案 1 :(得分:0)

您应该遵循一些不优雅的解决方案,例如根据以下内容将单独的.gitignore文件部署到/webapp/secure/ftt目录:

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

如果您不愿意或无法添加.gitignore文件,则会有一个不太优雅的解决方案:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo