Gitignore exclude certain files in all subdirectories

I have a directory called /static. There is a lot of subdirectories in it.
I need to ignore all files in all subdirectories of the /static/ directory except of .htaccess, null.jpg and index.php files.
Tell me please what is the right syntax for this operation?

/static/**
!/static/**/.htaccess

and

  • What way to choose in case of merging in my case?
  • Git is not detecting a file and is not in .gitignore
  • How can I do case insensitive git diffing?
  • Git Version Control and Branching
  • How to download an older branch of Chromium from Git using gclient?
  • Can I 'git commit' a file and ignore its content changes?
  • /static/*
    !/static/*/.htaccess
    

    don’t work.

  • GitHub API Single Commit dont fetch all files
  • Visual Studio 2013 Update 3 Process taking up 30% CPU for a long time after commit
  • Git: Pushing multiple branches using wildcards
  • Find first common child of two commits
  • Do not need Git Synchronization
  • How to use EnableMSDeployAppOffline when doing continuous deployment to azure websites?
  • One Solution collect form web for “Gitignore exclude certain files in all subdirectories”

    As I mentioned in “Including specific file extension in gitignore”, the main rule to remember is:

    It is not possible to re-include a file if a parent directory of that file is excluded. (*)
    (*: unless certain conditions are met in git 2.?+, see below)

    That is why any rule which ignores folders (like * or */) would make excluding any sub-files impossible.

    That is why the right approach is to exclude everything except:

    • folders,
    • (then) the files you want to exclude.

    If you don’t exclude folders first, your files would still be ignored (because of the rule I mention above)

    So add in your .gitignore:

    /static/**/**
    !/static/**/
    !.gitignore
    !.htaccess
    

    This is tested with Git 2.4.1 and works even on Windows.


    Note that with git 2.9.x/2.10 (mid 2016?), it might be possible to re-include a file if a parent directory of that file is excluded if there is no wildcard in the path re-included.

    Nguyễn Thái Ngọc Duy (pclouds) is trying to add this feature:

    • commit 506d8f1 for git v2.7.0, reverted in commit 76b620d git v2.8.0-rc0
    • commit 5e57f9c git v2.8.0-rc0,… reverted(!) in commit 5cee3493 git 2.8.0-rc4.

    However, since one of the conditions was “The directory part in the re-include rules must be literal (i.e. no wildcards)”, you cannot use that feature here anyway.

    Git Baby is a git and github fan, let's start git clone.